Як додати шар до SelectFeature, не втрачаючи існуючих виділень?


9

Я використовую OpenLayers.Control.SelectFeature для виділення на декількох шарах. Однак, коли я додаю шар за допомогою setLayer (), мій вибір на інших шарах втрачається.

Хтось знає, як обійти це? Я хотів би зберегти існуючі виділення на інших шарах, коли я додаю шар до елемента SelectFeature.

Ось приклад: МОЙ ПРИКЛАД

Оновлення:

Мені відомо, що це частина API. Але я шукаю собі роботу.

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

Відповіді:


6

Ви можете змінити метод setLayer управління 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();
    }
}

Звичайно я можу! Не знаю, чому я про це не думав. Дякую! (+1)
CaptDragon

0

Я думаю, що це дуже корисний метод, але його слід додати як addLayer (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();
  }
},

які, сподіваюся, будуть прийняті в цьому запиті на потяг - https://github.com/openlayers/openlayers/pull/1287

Крім того, користувачеві не доведеться підтримувати список доданих шарів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.