9 votos

¿Cómo añadir una capa a SelectFeature sin perder las selecciones existentes?

Estoy usando un OpenLayers.Control.SelectFeature para selecciones en múltiples capas. Sin embargo, cuando añado una capa usando setLayer(), mis selecciones en las otras capas se pierden.

¿Alguien sabe cómo solucionar esto? Me gustaría mantener mis selecciones existentes en otras capas cuando añado una capa al control SelectFeature.

He aquí un ejemplo: MI EJEMPLO

Actualización:

Soy consciente de que esto forma parte de la API. Pero estoy buscando una solución.

/**
 * APIMethod: setLayer
 * Attach a new layer to the control, overriding any existing layers.
 *
 * Parameters:
 * layers - Array of {<OpenLayers.Layer.Vector>} or a single
 *     {<OpenLayers.Layer.Vector>}
 */
setLayer: function(layers) {
    var isActive = this.active;
    this.unselectAll();
    this.deactivate();
    if(this.layers) {
        this.layer.destroy();
        this.layers = null;
    }
    this.initLayer(layers);
    this.handlers.feature.layer = this.layer;
    if (isActive) {
        this.activate();
    }
},

6voto

Soldarnal Puntos 2646

Podría modificar el método setLayer del control SelectFeature:

OpenLayers.Control.SelectFeature.prototype.setLayer = function(layers) {
    var isActive = this.active;
    //this.unselectAll(); <- what you need
    this.deactivate();
    if(this.layers) {
        this.layer.destroy();
        this.layers = null;
    }
    this.initLayer(layers);
    this.handlers.feature.layer = this.layer;
    if (isActive) {
        this.activate();
    }
}

0 votos

¡Claro que sí! No sé por qué no se me ocurrió. Gracias. (+1)

0voto

drewrockshard Puntos 150

Creo que es un método muy útil pero debería añadirse como addLayer(Layer) y con algunos pequeños cambios para que maneje una capa:

addLayer = function(layer) {
  var isActive = this.active;
  var currLayers = this.layers; 
  this.deactivate();
  if(this.layers) {
      this.layer.destroy();
      this.layers = null;
  }
  if ( currLayers != null) {
      currLayers.push(layer);   
      this.initLayer(currLayers);
  } else {
      this.initLayer([layer]);
  }
  this.handlers.feature.layer = this.layer;
  if (isActive) {
      this.activate();
  }
},

que espero que se tome en este pull request - https://github.com/openlayers/openlayers/pull/1287

Además, el usuario no tiene que mantener una lista de capas que se han añadido.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X