Openlayers में लेयर ऑर्डर को कैसे परिभाषित करें?


28

मेरे पास एक मार्कर परत, दो वेक्टर परतें और दो रेखापुंज परतें हैं। मार्कर परत दो रेखापुंज परतों द्वारा कवर हो जाती है।

क्या हमेशा शीर्ष पर मार्कर परत को स्थानांतरित करने का एक तरीका है?

संपादित: Z-indexes का क्रम वेक्टर लेयर में अच्छा काम करता है, लेकिन जब मैं मैप पर एक और WMS रैस्टर लेयर को कम Z-index के साथ जोड़ता हूं, तो raster लेयर अभी भी वेक्टर लेयर को कवर करती है।

संपादित: क्या कोई "LayerIndex" और "Z-Index" एक लेयर के संदर्भ में प्रतिपादन क्रम के अंतर को इंगित कर सकता है? मुझे लगता है कि ओवरले ऑर्डर के साथ लेयर इंडेक्स डील और Zindex एक वेक्टर लेयर में फीचर ऑर्डर के साथ डील करता है, क्या मैं सही हूं?


मुझे लगता है कि OpenLayers में लेयरइंडेक्स और जेड-इंडेक्स विनिमेय शब्द हैं। वे प्रलेखन में इसी संदर्भ में उपयोग किए जाते हैं, उदा: dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/…
केसी

नमस्कार @ कैसी मैं आपके उदाहरण की सराहना करता हूं। हालांकि, मुझे नहीं लगता कि लेयरइंडेक्स और जेड-इंडेक्स विनिमेय हैं। मेरे अपने अनुभव के लिए सेटजिन्डेक्स काम नहीं करता है, लेकिन सेटइंडेक्स काम करता है। मैंने देखा है कि: 1. ओपनलेयर में जेड-इंडेक्स उदाहरण एक वेक्टर परत में एक विशेषता के लिए काम करता है, और यह रेंडरर द्वारा सक्षम किया गया है: {zIndexing: true}। 2. रैस्टर इमेज लेयर के लिए अपने उदाहरण से, आप देख सकते हैं कि लेयर रेंडर ऑर्डर, मैप कंट्रोल पर आपके द्वारा देखे जाने पर आधारित है, जो लेयर इंडेक्स (आपके उत्तर कोड के रूप में) पर निर्भर करता है। 3. लेयर इंडेक्स को उस क्रम से सेट किया जाता है जिसे मैं नई लेयर पर जोड़ता हूं (0 के रूप में लेयर ...)
सीन

1. मुझे लगता है कि आप सही हैं। 2 और 3. सही, लेकिन आप सेटलेयरइंडेक्स विधि को कॉल करके डिफ़ॉल्ट व्यवहार को ओवरराइड कर सकते हैं, जो एक परत के जेड-इंडेक्स को समायोजित करता है। यह मानचित्र नियंत्रण में परतों के क्रम और परतों के आरेखण क्रम को प्रभावित करेगा।
केसी

जवाबों:


24

प्रत्येक परत के लिए z- इंडेक्स सेट करने में मदद करनी चाहिए: http://www.openlayers.org/dev/examples/ordering.html

संपादित

मैं मूल रूप से जुड़ा हुआ उदाहरण बहुत उपयोगी नहीं है। आप परतों के लेयरइंडेक्स / जेड-इंडेक्स को सेट करना चाहते हैं, न कि परतों के भीतर के निर्माताओं (जैसा कि आदेश दिया गया उदाहरण दिखाया गया है)। मैंने कस्टम लेयर अनुक्रमण दिखाते हुए एक उदाहरण (इस उदाहरण के आधार पर ) को एक साथ रखा । ध्यान दें कि जब आप कनाडा रैस्टर को चालू करते हैं, तो मार्कर परत शीर्ष पर रहती है।

यहाँ प्रासंगिक कोड है:

map.setLayerIndex(dm_wms, 0); //set the image overlay to the bottom
map.setLayerIndex(markers, 99); //set the marker layer to an arbitrarily high layer index

सेटलेयरइन्डेक्स कोड के लिए प्रलेखन यहाँ है: http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Map-js.html#penLayers.Map.setLayerIndex


उदाहरण एक मैलवेयर के लिए लिंक।
Bazinga777

8

आप इसे कर सकते हैं, यदि आप चाहते हैं कि आपकी वेक्टर परत हमेशा बस कोड के साथ शीर्ष पर रहे ...

var vecLyr = map.getLayersByName('VectorLayer')[0];
map.raiseLayer(vecLyr, map.layers.length);

यह आसान हो सकता है!


4

उपर्युक्त में से किसी ने भी मेरे लिए काम नहीं किया है, लेकिन जब भी मैं एक नई परत जोड़ता हूं, तो अपने मार्कर लेयर को शीर्ष पर रखने के लिए एक उपचार का काम करता है:

myMarkerLayer.setZIndex (1001);


यही एकमात्र उत्तर था जिसने मेरे लिए भी काम किया। दूसरे किसी ने काम नहीं किया।
मैथ्यू लॉक

3

आप मौजूदा के शीर्ष पर एक नई शीट बिछाने के रूप में नक्शे में एक परत जोड़ने के बारे में सोच सकते हैं। यदि नई शीट पारदर्शी नहीं है तो यह नीचे के सभी लोगों को छिपा देगी।

दुर्भाग्य से OpenLayers में InsertLayerAt विधि नहीं है , इसलिए आपको प्रविष्टि के बाद अपनी परतों को फिर से व्यवस्थित करना होगा। समाधान तब परत को जोड़ने के लिए होता है और फिर इसे स्टैक को वांछित गहराई तक ले जाएं या उस एक को स्थानांतरित करें जिसे आप शीर्ष पर वापस शीर्ष पर चाहते हैं।

आप निम्नानुसार कर सकते हैं:

// add your wms as usual
var yourWMSLayer = new ....
map.addLayer(yourWMSlayer);

// you can do it both ways:
// 1. now move the markers to the top of the stack
var yourMarkers = map.getLayersByName("the marker layer name")[0];
map.setLayerIndex(yourMarkers, map.layers.length-1);

// 2. OR you move the WMS down
// this is more succint
map.setLayerIndex(yourWMSLayer, map.layers.length-2);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.