Openlayers에서 레이어 순서를 정의하는 방법? 있습니다. 마커 레이어는

마커 레이어, 벡터 레이어 2 개 및 래스터 레이어 2 개가 있습니다. 마커 레이어는 두 개의 래스터 레이어로 덮여 있습니다.

마커 레이어를 항상 위로 이동시키는 방법이 있습니까?

편집 : Z- 색인의 순서는 벡터 레이어에서 잘 작동하지만 Z- 색인이 낮은 맵에서 다른 WMS 래스터 레이어를 추가해도 래스터 레이어는 여전히 벡터 레이어를 덮습니다.

편집 : 누구나 레이어의 “LayerIndex”와 “Z-Index”와 관련하여 렌더링 순서의 차이를 지적 할 수 있습니까? 레이어 인덱스가 오버레이 순서를 처리하고 Zindex가 벡터 레이어의 기능 순서를 처리한다고 생각합니다. 맞습니까?



답변

각 레이어에 z- 색인을 설정하면 다음과 같은 도움이됩니다. http://www.openlayers.org/dev/examples/ordering.html

편집

처음에 연결 한 예제는 그다지 도움이되지 않습니다. 순서 예에 표시된대로 계층 내 메이커가 아닌 계층의 layerindex / z-index를 설정하려고합니다. 커스텀 레이어 인덱싱을 보여주는 예제 (이 예제를 기반으로 함 )를 정리했습니다 . 캐나다 래스터를 켜면 마커 레이어가 맨 위에 유지됩니다.

관련 코드는 다음과 같습니다.

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


답변

벡터 레이어가 항상 단순히 코드로 맨 위로 가고 싶다면 원하는대로 할 수 있습니다 …

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

쉬울 수 있습니다!


답변

위의 어느 것도 나를 위해 효과가 없었지만 새 레이어를 추가 할 때마다 단순히 마커 레이어를 맨 위에 유지하기 위해 처리했습니다.

myMarkerLayer.setZIndex (1001);


답변

기존 시트 위에 새 시트를 배치 할 때 매핑 할 레이어를 추가 할 수 있습니다. 새 시트가 투명하지 않으면 아래 시트가 모두 숨겨집니다.

불행히도 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);