Come aggiungere un livello a SelectFeature senza perdere le selezioni esistenti?


9

Sto usando un OpenLayers.Control.SelectFeature per le selezioni su più livelli. Tuttavia, quando aggiungo un layer usando setLayer (), le mie selezioni sugli altri layer vengono perse.

Qualcuno sa come aggirare questo? Vorrei mantenere le mie selezioni esistenti su altri livelli quando aggiungo un livello al controllo SelectFeature.

Ecco un esempio: IL MIO ESEMPIO

Aggiornare:

Sono consapevole che questo fa parte dell'API. Ma sto cercando un lavoro.

/**
 * 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();
    }
},

Risposte:


6

È possibile modificare il metodo setLayer del controllo 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();
    }
}

Certo che posso! Non so perché non ci abbia pensato. Grazie! (+1)
CaptDragon,

0

Penso che questo sia un metodo molto utile ma dovrebbe essere aggiunto come addLayer (Layer) e con alcune piccole modifiche per farlo gestire un livello:

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();
  }
},

che spero venga accolto in questa richiesta pull - https://github.com/openlayers/openlayers/pull/1287

Inoltre, l'utente non deve mantenere un elenco di livelli che sono stati aggiunti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.