¿Cómo definir el orden de las capas en Openlayers?

28

Tengo una capa de marcador, dos capas vectoriales y dos capas ráster. La capa de marcador queda cubierta por las dos capas de trama.

¿Hay alguna forma de mover la capa de marcador siempre arriba?

Editado: el orden de los índices Z funciona bien en la capa vectorial, pero cuando agrego otra capa ráster WMS en el mapa con un índice Z inferior, la capa ráster todavía cubre la capa vectorial.

Editado: ¿Alguien podría señalar la diferencia del orden de representación en términos de "LayerIndex" y "Z-Index" de una capa? Creo que el índice de capas se ocupa del orden de superposición y el Zindex se ocupa del orden de las características en una capa vectorial, ¿estoy en lo cierto?

Visto
fuente
Creo que layerindex y z-index son términos intercambiables en OpenLayers. Se usan en el mismo contexto en la documentación, por ejemplo: dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/…
Casey
Hola @Casey, agradezco tu ejemplo. Sin embargo, no creo que el índice de capa y el índice z sean intercambiables. Por mi propia experiencia, setZindex no funciona pero setIndex funciona. Noté que: 1. el ejemplo del índice Z en la capa abierta funciona para una característica en una capa vectorial, y está habilitado por rendererOptions: {zIndexing: true}. 2.De su ejemplo para la capa de imagen ráster, puede ver que el orden de representación de la capa se basa en lo que ve en el control del mapa, que depende del índice de la capa (como su código de respuesta). 3. El índice de capa se establece por el orden que agrego en la nueva capa (capa basada en 0 ...)
Visto el
1. Creo que tienes razón. 2 y 3. Correcto, pero puede anular el comportamiento predeterminado llamando al método setLayerIndex, que ajusta el índice z de una capa. Esto afectará el orden de las capas en el control del mapa y el orden de dibujo de las capas.
Casey

Respuestas:

24

La configuración del índice z para cada capa debería ayudar: http://www.openlayers.org/dev/examples/ordering.html

EDITADO

El ejemplo al que me vinculé originalmente no es demasiado útil. Desea establecer el índice de capa / índice z de las capas, no los creadores dentro de las capas (como se muestra en el ejemplo de pedido). Puse un ejemplo (basado en este ejemplo ) que muestra la indexación de capa personalizada. Observe que cuando activa el Ráster de Canadá, la capa de Marcador permanece en la parte superior.

Aquí está el 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

La documentación para el código setLayerIndex está aquí: http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Map-js.html#OpenLayers.Map.setLayerIndex

Casey
fuente
El ejemplo enlaza a un malware.
Bazinga777
8

Puede hacerlo, si desea que su capa vectorial siempre esté arriba con simplemente código ...

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

¡Que sea facil!

Aragón
fuente
4

ninguno de los anteriores funcionó para mí, pero simplemente hacer esto cada vez que agrego una nueva capa funcionó de maravilla para mantener mi capa de marcador en la parte superior:

myMarkerLayer.setZIndex (1001);

ErichBSchulz
fuente
Esta fue la única respuesta que también funcionó para mí. Ninguno de los otros funcionó.
Matthew Lock
3

Puede pensar en agregar una capa al mapa como colocar una nueva hoja sobre las existentes. Si la nueva hoja no es transparente, ocultará todos los siguientes.

Desafortunadamente, OpenLayers no tiene un método insertLayerAt , por lo que debe reordenar sus capas después de la inserción. La solución es agregar la capa y luego moverla hacia abajo en la pila hasta la profundidad deseada o mover la que desea en la parte superior de nuevo a la parte superior.

Puede hacerlo de la siguiente manera:

// 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
fuente