Openlayers - परत redraw पर चयन या शैली खोना


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)
});

निम्नलिखित कोड मेरा चयन कोड है। यह सब काम करता है क्योंकि मैं इसे नहीं करना चाहता। हालांकि, जब परत को फिर से तैयार किया जाता है तो चयन खो जाता है और ऑनफ्रीचर यूनेसेले को निकाल नहीं दिया जाता है (जो इसे होना चाहिए)। मुझे यकीन नहीं है कि चयन वास्तव में खो गया है या कि शैली रीसेट हो गई है।

    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

मेरे onFeatureSelect और onFeatureUnselect फ़ंक्शंस:

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];
}

आपके onFeatureSelect फ़ंक्शन में क्या है?
geographika

मैंने अपनी पोस्ट को दो कार्यों
Boedy

जवाबों:


4

मैंने ज़ूमिंग, पैनिंग और वेक्टर में वेक्टर चयनों को बनाए रखने का सबसे आसान तरीका पाया है, अपने नक्शे में एक नई खाली वेक्टर परत जोड़ना है, और जब विशेषताओं को इस परत में एक कॉपी चुना जाता है।

आप स्पष्ट रूप से दिखाई देने वाली शैली होने के लिए चयन परत शैली सेट कर सकते हैं।

अपने चुनिंदा टूल हाइलाइटिंग फ़ंक्शन में, चयन करते समय सुविधा का एक क्लोन जोड़ें, और जब इसे दूसरी बार चुना जाता है तो इसे हटा दें।

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 फ़ंक्शन को भी जांचें - आपको आईडी के बजाय अपनी सुविधा पर एक अलग अनूठी संपत्ति का उपयोग करना पड़ सकता है।


उत्तर के लिए धन्यवाद। मुझे लगता है कि यह एक अच्छा समाधान हो सकता है। मैं कुछ कोड के साथ फ़िदेलिंग कर रहा हूं, लेकिन मैं इस बिंदु पर अटका हुआ हूं कि चयन खो जाने पर ऑनफ्रीचर यूनीसेलेट ईवेंट आग नहीं लगे। तो किस घटना पर मैं फीचर क्लोन हटाऊं? मेरी मूल पोस्ट देखें।
बोईद

@Boedy अद्यतन जवाब देखें। आपको संभवतः सब कुछ चुनिंदा फ़ंक्शन में करना चाहिए। चयन करने के लिए एक बार चयन करें, और फिर से चयन रद्द करें।
geographika

बहुत धन्यवाद! यदि चयनित परत में सुविधा है तो चेचिंग में मदद मिलेगी। अब मुझे सिर्फ एक स्टाइल की समस्या है, लेकिन मुझे यकीन है कि मैं खुद को समझ सकता हूं।
बोदई

0

मेरे प्रयोगों ( http://ian01.geog.psu.edu/geoserver/www/wfs/wfs-sld2.html ) से ऐसा लगता है कि चयन और शैली को ज़ूम से अधिक बनाए रखना चाहिए।


आपके मामले में यह काम करता है। लेकिन आपका कोड उपयोग नहीं करता है: resFactor: 1 और अनुपात: 1। जो ज़ूम के बदले जाने पर लाल हो जाता है। आपका उदाहरण redraw को ट्रिगर नहीं करता है।
बोइडी

अच्छी तरह से है कि आप के लिए नीचे समस्या तो सीमित कर देता है
इयान Turton
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.