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

9

Estoy usando un OpenLayers.Control.SelectFeature para las selecciones en varias capas. Sin embargo, cuando agrego 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 agrego una capa al control SelectFeature.

Aquí hay un ejemplo: MI EJEMPLO

Actualizar:

Soy consciente de que esto es 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();
    }
},
CaptDragon
fuente

Respuestas:

6

Puede 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();
    }
}
drnextgis
fuente
¡Por supuesto que puedo! No sé por qué no pensé en eso. ¡Gracias! (+1)
CaptDragon
0

Creo que este es un método muy útil, pero debería agregarse 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 sea tomada en esta solicitud de extracción - https://github.com/openlayers/openlayers/pull/1287

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

Endre Moen
fuente