Bagaimana cara menambahkan layer ke SelectFeature tanpa kehilangan pilihan yang ada?

9

Saya menggunakan OpenLayers.Control.SelectFeature untuk seleksi pada banyak layer. Namun, ketika saya menambahkan lapisan menggunakan setLayer (), pilihan saya di lapisan lain hilang.

Adakah yang tahu cara mengatasi ini? Saya ingin menyimpan pilihan saya yang ada di lapisan lain ketika saya menambahkan lapisan ke kontrol SelectFeature.

Berikut ini sebuah contoh: CONTOH SAYA

Memperbarui:

Saya sadar bahwa ini adalah bagian dari API. Tapi saya mencari kerja di sekitar.

/**
 * 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
sumber

Jawaban:

6

Anda bisa memodifikasi metode setLayer dari kontrol 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
sumber
Tentu saja saya bisa! Tidak tahu mengapa saya tidak memikirkan itu. Terima kasih! (+1)
CaptDragon
0

Saya pikir ini adalah metode yang sangat berguna tetapi harus ditambahkan sebagai addLayer (Layer) dan dengan beberapa perubahan kecil untuk membuatnya menangani satu layer:

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

yang saya harap akan dimasukkan dalam permintaan tarik ini - https://github.com/openlayers/openlayers/pull/1287

Selain itu, pengguna tidak perlu memelihara daftar layer yang telah ditambahkan.

Endre Moen
sumber