วิธีเพิ่มเลเยอร์ใน 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

นอกจากนี้ผู้ใช้ไม่จำเป็นต้องเก็บรักษารายการเลเยอร์ที่เพิ่มไว้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.