Mevcut seçimleri kaybetmeden SelectFeature'a nasıl katman eklenir?


9

Birden çok katmandaki seçimler için bir OpenLayers.Control.SelectFeature kullanıyorum . Ancak, setLayer () kullanarak bir katman eklediğimde, diğer katmanlardaki seçimlerim kaybolur.

Bu sorunu nasıl çözeceğini bilen var mı? SelectFeature denetimine bir katman eklediğimde, mevcut seçimlerimi diğer katmanlarda tutmak istiyorum.

İşte bir örnek: MY EXAMPLE

Güncelleme:

Bunun API'nın bir parçası olduğunun farkındayım. Ama etrafta bir iş arıyorum.

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

Yanıtlar:


6

SelectFeature denetiminin setLayer yöntemini değiştirebilirsiniz:

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

Tabiki yapabilirim! Neden böyle düşünmediğimi bilmiyorum. Teşekkürler! (+1)
CaptDragon

0

Bu çok yararlı bir yöntem olduğunu düşünüyorum ama addLayer (Katman) ve bir katman işlemek için bazı küçük değişiklikler ile eklenmelidir:

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

ki bu istekte alınacağını umuyorum - https://github.com/openlayers/openlayers/pull/1287

Ayrıca, kullanıcının eklenen katmanların listesini tutması gerekmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.