বিদ্যমান নির্বাচনগুলি না হারিয়ে কীভাবে একটি স্তর নির্বাচন করুন?


9

আমি একাধিক স্তরের নির্বাচনের জন্য একটি ওপেনলায়ারস.কন্ট্রোল.সিলেক্টফিজার ব্যবহার করছি । তবে, যখন আমি সেটলেয়ার () ব্যবহার করে একটি স্তর যুক্ত করি, তখন অন্যান্য স্তরগুলিতে আমার নির্বাচনগুলি হারিয়ে যায়।

কেউ কি জানেন কিভাবে এই চারপাশে কাজ করতে হয়? আমি যখন নির্বাচিত বৈশিষ্ট্য নিয়ন্ত্রণে একটি স্তর যুক্ত করি তখন আমি আমার বিদ্যমান নির্বাচনগুলি অন্যান্য স্তরগুলিতে রাখতে চাই।

এখানে একটি উদাহরণ: আমার উদাহরণ

হালনাগাদ:

আমি জানি যে এটি 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

আপনি সিলেক বৈশিষ্ট্য নিয়ন্ত্রণের সেটলায়ার পদ্ধতিটি পরিবর্তন করতে পারেন:

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

এছাড়াও তারপরে ব্যবহারকারীদের যুক্ত হওয়া স্তরগুলির একটি তালিকা বজায় রাখতে হবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.