Comment ajouter un calque à SelectFeature sans perdre les sélections existantes?


9

J'utilise un OpenLayers.Control.SelectFeature pour les sélections sur plusieurs couches. Cependant, lorsque j'ajoute un calque à l'aide de setLayer (), mes sélections sur les autres calques sont perdues.

Quelqu'un sait comment contourner cela? Je souhaite conserver mes sélections existantes sur d'autres calques lorsque j'ajoute un calque au contrôle SelectFeature.

Voici un exemple: MON EXEMPLE

Mise à jour:

Je suis conscient que cela fait partie de l'API. Mais je cherche un travail.

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

Réponses:


6

Vous pouvez modifier la méthode setLayer du contrôle 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();
    }
}

Bien sûr, je peux! Je ne sais pas pourquoi je n'y ai pas pensé. Merci! (+1)
CaptDragon

0

Je pense que c'est une méthode très utile mais elle devrait être ajoutée en tant qu'addLayer (Layer) et avec quelques petits changements pour qu'elle gère une couche:

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

qui, je l'espère, sera pris en compte dans cette demande de tirage - https://github.com/openlayers/openlayers/pull/1287

De plus, l'utilisateur n'a pas à maintenir une liste des couches ajoutées.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.