Come definire l'ordine dei layer in Openlayers?


28

Ho un livello marker, due livelli vettoriali e due livelli raster. Lo strato marker viene coperto dai due layer raster.

C'è un modo per spostare il layer marker sempre in primo piano?

Modificato: l'ordine degli indici Z funziona bene nel livello vettoriale, ma quando aggiungo un altro livello raster WMS sulla mappa con un indice Z inferiore, il livello raster copre ancora il livello vettoriale.

Modificato: Qualcuno potrebbe indicare la differenza dell'ordine di rendering in termini di "LayerIndex" e "Z-Index" di uno strato? Penso che l'indice di livello gestisca l'ordine di sovrapposizione e Zindex gestisca l'ordine delle caratteristiche in un livello vettoriale, vero?


Penso che layerindex e z-index siano termini intercambiabili in OpenLayers. Sono utilizzati nello stesso contesto nella documentazione, ad esempio: dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/…
Casey

Ciao @Casey, apprezzo il tuo esempio. Tuttavia, non credo che layerindex e z-index siano intercambiabili. Per la mia esperienza, setZindex non funziona ma setIndex funziona. Ho notato che: 1. l'esempio di Z-index in openlayer funziona per una funzione in un livello vettoriale ed è abilitato da rendererOptions: {zIndexing: true}. 2.Dal tuo esempio per il livello di immagine raster, puoi vedere l'ordine di rendering del livello in base a ciò che vedi sul controllo della mappa, che dipende dall'indice del livello (come codice di risposta). 3. L'indice del livello è impostato dall'ordine che aggiungo sul nuovo livello (livello basato su 0 ...)
Visto

1. Penso che tu abbia ragione. 2 e 3. Esatto, ma puoi sovrascrivere il comportamento predefinito chiamando il metodo setLayerIndex, che regola l'indice z di un livello. Ciò influenzerà l'ordine dei livelli nel controllo della mappa e l'ordine di disegno dei livelli.
Casey,

Risposte:


24

L'impostazione dell'indice z per ciascun livello dovrebbe essere di aiuto: http://www.openlayers.org/dev/examples/ordering.html

MODIFICATO

L'esempio a cui avevo originariamente collegato non è troppo utile. Si desidera impostare layerindex / z-index dei layer, non i creatori all'interno dei layer (come mostrato nell'esempio di ordinazione). Ho messo insieme un esempio (basato su questo esempio ) che mostra l'indicizzazione dei livelli personalizzati. Si noti che quando si accende il Canada Raster, il livello Marker rimane in primo piano.

Ecco il codice pertinente:

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 documentazione per il codice setLayerIndex è qui: http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Map-js.html#OpenLayers.Map.setLayerIndex


l'esempio si collega a un malware.
Bazinga777,

8

Puoi farlo, se vuoi che il tuo livello vettoriale sia sempre in primo piano semplicemente con il codice ...

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

Che sia facile!


4

nessuna delle precedenti ha funzionato per me, ma semplicemente farlo ogni volta che aggiungo un nuovo livello ha funzionato a meraviglia per mantenere il mio livello marker in alto:

myMarkerLayer.setZIndex (1001);


Questa è stata l'unica risposta che ha funzionato anche per me. Nessuno degli altri ha funzionato.
Matthew Lock,

3

Puoi pensare di aggiungere un livello alla mappa come se stendi un nuovo foglio sopra a quelli esistenti. Se il nuovo foglio non è trasparente, nasconderà tutti quelli di seguito.

Sfortunatamente OpenLayers non ha un metodo insertLayerAt , quindi è necessario riordinare i livelli dopo l'inserimento. La soluzione consiste quindi nell'aggiungere il livello e quindi spostarlo nella pila fino alla profondità desiderata o spostare quello che si desidera dall'alto in alto.

Puoi farlo come segue:

// 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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.