OpenLayers में अतिव्यापी सुविधाओं से निपटना


14

यदि उपयोगकर्ता एक बहुभुज सुविधा बनाते हैं जो इस तरह से एक और पूरी तरह से ओवरलैप करता है, तो…

... तो कोई रास्ता नहीं है कि आप आंतरिक सुविधा का चयन कर सकते हैं, यानी एक दूसरे द्वारा ओवरलैप किया गया। मैं SelectFeatureइस समय एक साधारण का उपयोग कर रहा हूँ :

var select = new OpenLayers.Control.SelectFeature(
  [this.annotationLayer, this.controlPointsLayer], { 
    hover: true,
    renderIntent: "temporary"
    }
);
this.map.addControl(select);
select.activate();

लेकिन जाहिर है, मैं इसे केवल बाहरी सुविधा का चयन करने के लिए प्राप्त कर सकता हूं। इससे निपटने का विशिष्ट तरीका क्या है? मैं उपयोगकर्ता के लिए आंतरिक सुविधा का चयन कैसे कर सकता हूं?

सबसे सरल समाधान संभवतः बाहरी सुविधा को केवल उस क्षेत्र के भीतर चयन करने योग्य बनाना होगा जो आंतरिक सुविधा को घटाते समय छोड़ दिया जाता है - लेकिन मुझे नहीं पता कि ऐसा करने के बारे में कैसे जाना जाए।


1
आप एक z- सूचकांक (आदेश) बनाने के लिए की जरूरत है - देखना openlayers.org/dev/examples/ordering.html
Mapperz

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

z- इंडेक्स ऑर्डर काम नहीं करता है
neogeomat

जवाबों:


10

कुछ विकल्प। कुछ क्रेज़ियर :-) दूसरों की तुलना में। मूल रणनीतियाँ हैं

  • क्लस्टर सुविधाएँ
  • शीर्ष विशेषता को छुपाएं / स्थानांतरित करें
  • शीर्ष सुविधा के माध्यम से क्लिक भेजें

==>

  1. सुविधा क्लस्टरिंग रणनीति चालू करें

  2. अपने स्वयं के क्लस्टरिंग एल्गोरिथ्म को लागू करें, इसलिए जब एक नया आइटम जोड़ा जाता है या संशोधित किया जाता है, तो आपका एल्गोरिथ्म फिर से चलता है और एक नेस्टेड-लूप की जांच करता है और n * n (-1) चेक करता है कि क्या ओवरलैप हो रहा है - फिर फीचर संपत्ति को संशोधित करें ओवरलैपिंग सुविधाओं की एक सूची को सेटअप करने के लिए, और जब उपयोगकर्ता सुविधा पर क्लिक करता है, तो उन विशेषताओं की एक सूची प्रदर्शित करें जो ओवरलैप करते हैं और उपयोगकर्ता का चयन करते हैं कि वे वास्तव में क्या क्लिक करना चाहते थे। समझ में आता है?

  3. ऑन-क्लिक सुविधा लागू करने के बजाय, बस एक पूरा नक्शा क्लिक हैंडलर लागू करें। और जब उपयोगकर्ता क्लिक करता है, तो किसी भी अन्तर्विभाजक सुविधाओं के लिए अपनी परत के माध्यम से जाँच करें - और यदि कोई है - तो उस आदमी का पॉप-अप प्रदर्शित करें, और यदि कई हैं, तो उपर्युक्त # 2 की तरह एक शीघ्र सूची प्रदर्शित करें। यदि कोई भी प्रतिच्छेद नहीं करता है, तो बस उपेक्षा करें।

  4. अस्थायी रूप से "छिपाने" के लिए एक राइट-क्लिक विकल्प को लागू करें जिससे आपको छिपी हुई सुविधा तक पहुंच मिल सके। जैसे ही अगला क्लिक किया जाता है, सभी छिपी हुई विशेषताओं को फिर से प्रदर्शित करें

  5. # 4 के समान, टॉप फीचर के पॉप-अप के अंदर, फीचर को "छिपाने" के लिए मेनू / लिंक आइटम जोड़ें। और # 4 में आगे बढ़ें।

  6. समान-ईश से # 4/5 राइट-क्लिक करें "अस्थायी चाल" और क्लिक करें सुविधा को इस तरह से बाहर खींचें [याद रखें कि यह पुराना है]। तब उपयोगकर्ता निचली सुविधा पर क्लिक करता है और शीर्ष एक मूल स्थिति में वापस आ जाता है।

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