Openlayers에서 레이어 순서를 정의하는 방법?


28

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

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

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

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


OpenLayers에서 layerindex와 z-index는 서로 바꾸어 쓸 수있는 용어라고 생각합니다. 그것들은 문서에서 같은 맥락으로 사용됩니다 : 예 : dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/…
Casey

안녕하세요 @Casey 귀하의 사례에 감사드립니다. 그러나 layerindex와 z-index가 상호 교환 가능하다고 생각하지 않습니다. 내 경험상 setZindex는 작동하지 않지만 setIndex는 작동합니다. 1. openlayer의 Z-index 예제는 벡터 레이어의 기능에 대해 작동하며 rendererOptions : {zIndexing : true}에 의해 활성화됩니다. 2. 래스터 이미지 레이어에 대한 예제에서 레이어 렌더링 순서는 맵 컨트롤에 표시되는 것을 기반으로하며 레이어 인덱스 (응답 코드)에 따라 달라집니다. 3. 레이어 지수는 나는 새 레이어에 추가 순서 (기반 계층 0 등 ...)에 의해 설정된다

1. 당신이 옳다고 생각합니다. 2 & 3. 맞습니다. 그러나 레이어의 z- 색인을 조정하는 setLayerIndex 메서드를 호출하여 기본 동작을 무시할 수 있습니다. 이는지도 컨트롤의 레이어 순서와 레이어의 그리기 순서에 영향을줍니다.
Casey

답변:


24

각 레이어에 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


이 예는 맬웨어에 연결됩니다.
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.