मौजूदा चयनों को खोए बिना SelectFeature में एक परत कैसे जोड़ें?


9

मैं कई परतों पर चयन के लिए OpenLayers.Control.SelectFeature का उपयोग कर रहा हूं । हालाँकि, जब मैं सेटलेयर () का उपयोग करके एक परत जोड़ता हूं, तो दूसरी परतों पर मेरे चयन खो जाते हैं।

किसी को पता है कि इस के आसपास काम करने के लिए कैसे? जब मैं SelectFeature नियंत्रण में एक परत जोड़ता हूं, तो मैं अपने मौजूदा चयनों को अन्य परतों पर रखना चाहूंगा।

यहाँ एक उदाहरण है: मेरा उदाहरण

अपडेट करें:

मुझे पता है कि यह एपीआई का हिस्सा है। लेकिन मैं एक काम की तलाश में हूँ।

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

आप 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)
कैप्ट्रैगन

0

मुझे लगता है कि यह एक बहुत ही उपयोगी तरीका है, लेकिन इसे एडलेयर (लेयर) के रूप में जोड़ा जाना चाहिए और इसे एक परत बनाने के लिए कुछ छोटे बदलावों के साथ:

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.