วิธีการกำหนดลำดับเลเยอร์ใน Openlayers?


28

ฉันมีชั้นเครื่องหมายสองชั้นเวกเตอร์และสองชั้นแรสเตอร์ เลเยอร์เครื่องหมายถูกปกคลุมด้วยแรสเตอร์สองชั้น

มีวิธีย้ายเลเยอร์มาร์กเกอร์เสมอหรือไม่?

แก้ไข:ลำดับของดัชนี Z ทำงานได้ดีในเลเยอร์เวกเตอร์ แต่เมื่อฉันเพิ่มเลเยอร์แรสเตอร์ WMS อื่นบนแผนที่ด้วยดัชนี Z ที่ต่ำกว่าเลเยอร์แรสเตอร์ยังคงครอบคลุมเลเยอร์เวกเตอร์

แก้ไข:ใครสามารถชี้ให้เห็นความแตกต่างของลำดับการแสดงผลในแง่ของ "LayerIndex" และ "ดัชนี Z" ของเลเยอร์? ฉันคิดว่าดัชนีเลเยอร์จัดการกับลำดับการซ้อนทับและ Zindex จัดการกับลำดับคุณลักษณะในเลเยอร์เวกเตอร์ฉันไม่ถูกต้องหรือไม่


ฉันคิดว่า layerindex และ z-index เป็นคำที่ใช้แทนกันได้ใน OpenLayers พวกเขาจะใช้ในบริบทเดียวกันในเอกสารเช่น: dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/…
Casey

สวัสดี @Casey ฉันขอขอบคุณตัวอย่างของคุณ อย่างไรก็ตามฉันไม่คิดว่า layerindex และ z-index นั้นใช้แทนกันได้ สำหรับประสบการณ์ของฉันเอง setZindex ไม่ทำงาน แต่ setIndex ทำงาน ฉันสังเกตเห็นว่า: 1. ตัวอย่างดัชนี Z ใน openlayer ใช้งานได้กับคุณลักษณะในเลเยอร์เวกเตอร์และเปิดใช้งานโดย rendererOptions: {zIndexing: true} 2. จากตัวอย่างเลเยอร์ภาพแรสเตอร์คุณสามารถเห็นลำดับการเรนเดอร์เลเยอร์ขึ้นอยู่กับสิ่งที่คุณเห็นบนตัวควบคุมแผนที่ซึ่งขึ้นอยู่กับดัชนีเลเยอร์ (เป็นรหัสคำตอบของคุณ) 3. ดัชนีเลเยอร์ถูกกำหนดโดยคำสั่งที่ฉันเพิ่มในเลเยอร์ใหม่ (ตามเลเยอร์เป็น 0 ... )
เห็น

1. ฉันคิดว่าคุณพูดถูก 2 & 3. ถูกต้อง แต่คุณสามารถแทนที่พฤติกรรมเริ่มต้นได้โดยการเรียกเมธอด setLayerIndex ซึ่งปรับดัชนี z ของเลเยอร์ สิ่งนี้จะทำให้ลำดับของเลเยอร์ในตัวควบคุมแผนที่และลำดับการวาดของเลเยอร์
Casey

คำตอบ:


24

การตั้งค่าดัชนี z สำหรับแต่ละชั้นควรช่วย: http://www.openlayers.org/dev/examples/ordering.html

แก้ไข

ตัวอย่างที่ฉันเชื่อมโยงในตอนแรกไม่เป็นประโยชน์เกินไป คุณต้องการตั้งค่า layerindex / z-index ของเลเยอร์ไม่ใช่ผู้สร้างภายในเลเยอร์ (ดังตัวอย่างที่แสดงให้เห็น) ฉันรวบรวมตัวอย่าง (จากตัวอย่างนี้) แสดงการทำดัชนีเลเยอร์ที่กำหนดเอง โปรดสังเกตว่าเมื่อคุณเปิด Canada Raster เลเยอร์ Marker จะอยู่ด้านบน

นี่คือรหัสที่เกี่ยวข้อง:

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

เอกสารสำหรับรหัส setLayerIndex อยู่ที่นี่: http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Map-js.html#OpenLayers.Map.setLayerIndex


ตัวอย่างลิงก์ไปยังมัลแวร์
Bazinga777

8

คุณสามารถทำได้ถ้าคุณต้องการให้เลเยอร์เวกเตอร์ของคุณอยู่ด้านบนเสมอด้วยรหัสง่ายๆ ...

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

อาจเป็นเรื่องง่าย!


4

ไม่มีข้อใดถูกใช้งานได้สำหรับฉัน แต่เพียงทำแบบนี้ทุกครั้งที่ฉันเพิ่มเลเยอร์ใหม่ทำงานเพื่อรักษาเลเยอร์เครื่องหมายของฉันให้อยู่ด้านบน:

myMarkerLayer.setZIndex (1001);


นี่เป็นคำตอบเดียวที่เหมาะกับฉันเช่นกัน ไม่มีอีกเลยที่ทำงานได้
Matthew Lock

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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.