Como definir a ordem das camadas nos Openlayers?

28

Eu tenho uma camada de marcador, duas camadas de vetor e duas camadas de varredura. A camada do marcador é coberta pelas duas camadas de varredura.

Existe uma maneira de mover a camada do marcador sempre por cima?

Editado: a ordem dos índices Z funciona bem na camada vetorial, mas quando adiciono outra camada raster WMS no mapa com um índice Z mais baixo, a camada raster ainda cobre a camada vetorial.

Editado: Alguém poderia apontar a diferença da ordem de renderização em termos de "LayerIndex" e "Z-Index" de uma camada? Acho que o índice da camada lida com a ordem de sobreposição e o Zindex lida com a ordem dos recursos em uma camada vetorial, estou certo?

Visto
fonte
Eu acho que layerindex e z-index são termos intercambiáveis ​​no OpenLayers. Eles são usados ​​no mesmo contexto na documentação, ex: dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/…
Casey
Olá @Casey Agradeço o seu exemplo. No entanto, não acho que o índice de camada e o índice z sejam intercambiáveis. Para minha própria experiência, o setZindex não funciona, mas o setIndex funciona. Percebo que: 1. o exemplo de índice Z no openlayer funciona para um recurso em uma camada vetorial e é ativado por rendererOptions: {zIndexing: true}. 2.No seu exemplo para a camada de imagem raster, você pode ver a ordem de renderização da camada com base no que vê no controle do mapa, que depende do índice da camada (como seu código de resposta). 3. O índice camada é definida pela ordem I adicionar nova camada (layer com base em 0 ...)
Visto
1. Eu acho que você está certo. 2 e 3. Certo, mas você pode substituir o comportamento padrão chamando o método setLayerIndex, que ajusta o índice z de uma camada. Isso afetará a ordem das camadas no controle de mapa e a ordem de desenho das camadas.
Casey #

Respostas:

24

A configuração do índice z para cada camada deve ajudar: http://www.openlayers.org/dev/examples/ordering.html

EDITADO

O exemplo ao qual originalmente vinculei não é muito útil. Você deseja definir o índice de camada / índice-z das camadas, não os criadores das camadas (como o exemplo de pedido mostrou). Eu montei um exemplo (baseado neste exemplo ) mostrando a indexação de camada personalizada. Observe que, quando você liga o Canada Raster, a camada Marcador permanece no topo.

Aqui está o código relevante:

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

A documentação para o código setLayerIndex está aqui: http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Map-js.html#OpenLayers.Map.setLayerIndex

Casey
fonte
o exemplo está vinculado a um malware.
Bazinga777
8

Você pode fazê-lo, se quiser que sua camada vetorial sempre cubra simplesmente com o código ...

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

May it be easy!

Aragão
fonte
4

nenhuma das opções acima funcionou para mim, mas simplesmente fazer isso sempre que adiciono uma nova camada funcionava como um deleite para manter minha camada de marcador por cima:

myMarkerLayer.setZIndex (1001);

ErichBSchulz
fonte
Esta foi a única resposta que funcionou para mim também. Nenhum dos outros funcionou.
Matthew Lock
3

Você pode adicionar uma camada ao mapa e colocar uma nova planilha sobre as existentes. Se a nova planilha não for transparente, ela ocultará todas as que estão abaixo.

Infelizmente, o OpenLayers não possui um método insertLayerAt , portanto, é necessário reordenar suas camadas após a inserção. A solução é adicionar a camada e movê-la para baixo na pilha até a profundidade desejada ou mover a que você deseja de cima para trás.

Você pode fazer isso da seguinte maneira:

// 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);
unicoletti
fonte