ওপেনলেয়ার্স - স্তর পুনরায় আঁকলে নির্বাচন বা শৈলী হারাতে হবে


10

আমি যখন মানচিত্রটি জুম বা সরানো হয় তখন আমার স্তরটি আবার আঁকানো হয়। এটি আমি চাই, কারণ আমার সাথে একবারে লোড করার জন্য বিভিন্ন বৈশিষ্ট্য রয়েছে। এই কোড:

    wfs = new OpenLayers.Layer.Vector("WFS", {
    strategies: [new OpenLayers.Strategy.BBOX({
                    resFactor: 1,
                    ratio:1
                })],
    protocol: new OpenLayers.Protocol.WFS({
              maxFeatures:1000,
              url:  myUrl,
              featureType: myFeatureType,
              featureNS: myFeaturedNS,
              version: "1.1.0"
              }),
      filter: setFilter(year, variant)
});

নিম্নলিখিত কোডটি আমার নির্বাচনকোড। আমি যা করতে চাইছি না কেন এটি সমস্ত কাজ করে। যাইহোক, স্তরটি পুনরায় আঁকলে নির্বাচনটি নষ্ট হয়ে যায় এবং onFeचरUnselect নিক্ষেপ করা হয় না (যা এটি হওয়া উচিত)। আমি নিশ্চিত না যে নির্বাচনটি সত্যই হারিয়ে গেছে বা স্টাইলটি পুনরায় সেট করা হয়েছে কিনা।

    selectCtrl = new OpenLayers.Control.SelectFeature(
        wfs,
        {
            clickout: true, toggle: false,
            multiple: false, hover: false,
            box: true,
            toggleKey: "shiftKey", // ctrl key removes from selection
            multipleKey: "shiftKey",
            eventListeners: {
                featurehighlighted: onFeatureSelect,
                featureunhighlighted: onFeatureUnselect

            }
        }
    );

@geographika

আমার অনফেসিচারসিলিট এবং অন-ফিচারউইনসलेक्ट ফাংশন:

function onFeatureSelect(e) {
var feature = e.feature.attributes;
var featureclone = e.feature.clone();

var style = {
    pointRadius: 10,
    fillOpacity:0,
    strokeColor: "#000000"
    };

featureclone.style = style;

layer2.addFeatures([featureclone]);
selectedFeatures[featureclone.attributes.receptor_id] = featureclone;
}

function onFeatureUnselect(e) {
    var feature = e.feature.attributes;
    layer2.removeFeatures(selectedFeatures[feature.receptor_id]);   
    delete selectedFeatures[feature.receptor_id];
}

আপনার অনফিচারচিহ্ন ফাংশনে কী আছে?
ভূগোলিকা

আমি দুটি ফাংশন সঙ্গে আমার পোস্টে আপডেট করেছি
Boedy

উত্তর:


4

জুমিং, প্যানিং এবং redraws জুড়ে ভেক্টর নির্বাচনগুলি বজায় রাখার সবচেয়ে সহজ উপায় আমি খুঁজে পেয়েছি হ'ল আপনার মানচিত্রে একটি নতুন খালি ভেক্টর স্তর যুক্ত করা এবং যখন বৈশিষ্ট্যগুলি নির্বাচন করা হয় তখন এই স্তরের একটি অনুলিপি রাখুন।

আপনি স্পষ্টভাবে দৃশ্যমান স্টাইল হতে নির্বাচিত স্তর শৈলীটি সেট করতে পারেন।

আপনার নির্বাচিত সরঞ্জাম হাইলাইট করে ফাংশনগুলিতে, নির্বাচন করার সময় বৈশিষ্ট্যের একটি ক্লোন যুক্ত করুন এবং এটি দ্বিতীয়বার যখন নির্বাচিত হয় তখন এটিকে সরিয়ে দিন।

onFeatureSelect(feat){
  //check if the feature is in the select layer
  var cloned_feat = selectionLayer.getFeatureById(feat.id); 
  //or a getFeatureBy with a unique property

  if(cloned_feat){
      selectionLayer.removeFeatures([cloned_feat]);
  }
  else {
      var featCopy = feat.clone();
      this.sketchLayer.addFeatures([featCopy]);
  }
}

এটি সামান্য সরলীকৃত (এবং অনির্ধারিত) - আপনি সম্ভবত আপনার নির্বাচিত সরঞ্জামের সম্পত্তি হিসাবে নির্বাচন স্তরটি সংরক্ষণ করতে চান।

এছাড়াও getFeatureById ফাংশনটি পরীক্ষা করে দেখুন - আপনার আইডির পরিবর্তে আপনাকে নিজের বৈশিষ্ট্যটিতে আলাদা একটি অনন্য সম্পত্তি ব্যবহার করতে হতে পারে।


জবাবের জন্য ধন্যবাদ. আমি মনে করি এটি একটি ভাল সমাধান হতে পারে। আমি কিছু কোডের সাথে ফিড করছি, তবে আমি এই স্থানে আটকে আছি যে নির্বাচনটি হারিয়ে যাওয়ার পরে অন-ফিচারUnselect ইভেন্টটি চালিত হয় না। তাহলে কোন ইভেন্টে আমি বৈশিষ্ট্যটির ক্লোনগুলি সরিয়ে দেব? আমার মূল পোস্ট দেখুন।
বোয়ডি

@ বোয়েডি আপডেট উত্তর দেখুন। আপনার সম্ভবত নির্বাচিত কার্যক্রমে সমস্ত কিছু করা উচিত। নির্বাচন করতে একবার নির্বাচন করুন, এবং আবার নির্বাচন নির্বাচন করুন।
geographika

অনেক ধন্যবাদ! বৈশিষ্ট্যটি নির্বাচিত স্তরটিতে থাকলে চেক করা সহায়তা করে। এখন আমার কেবল স্টাইলিংয়ের সমস্যা আছে তবে আমি বাজি ধরছি যে আমি নিজেই এটি বুঝতে পারি।
বোয়ডি

0

আমার পরীক্ষাগুলি থেকে ( http://ian01.geog.psu.edu/geoserver/www/wfs/wfs-sld2.html ) মনে হয় নির্বাচন এবং শৈলীটি একটি জুমের উপরে বজায় রাখা উচিত।


আপনার ক্ষেত্রে এটি কাজ করে। তবে আপনার কোডটি ব্যবহার করে না: রেসফ্যাক্টর: 1 এবং অনুপাত: 1। জুম পরিবর্তন করা হয় যা redraw কারণ। আপনার উদাহরণ একটি পুনরায় আঁকতে ট্রিগার করে না।
বোয়ডি

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