¿Hay algún método para cambiar los índices Z de las capas en OpenLayers3 como en la versión anterior?
map.setLayerIndex(markers, 99); //set the marker layer to an arbitrarily high layer index
Necesito cambiar el orden de las capas usando un mapa. Entonces, la posibilidad de definir un índice z como este no ayuda
var geoLayer = new ol.layer.Vector({
source : new ol.source.GeoJSON({
projection : 'EPSG:900913',
url : './myGeoJson.json'
}),
style : function(feature, resolution) {
var text = resolution < 5000 ? feature.get('name') : '';
if (!styleCache[text]) {
styleCache[text] = [new ol.style.Style({
fill : new ol.style.Fill({
color : 'rgba(255, 255, 255, 0.1)'
}),
stroke : new ol.style.Stroke({
color : '#319FD3',
width : 1
}),
text : new ol.style.Text({
font : '12px Calibri,sans-serif',
text : text,
fill : new ol.style.Fill({
color : '#000'
}),
stroke : new ol.style.Stroke({
color : '#fff',
width : 3
})
}),
zIndex : 999
})];
}
}
});
javascript
layers
openlayers
z-index
Anuket
fuente
fuente
Respuestas:
Intenta algo como:
map.getLayers().setAt(99, markers)
La lista de capas está en un objeto que hereda de un
ol.Collection
. Vea el documento de API para ello.Tenga cuidado, estoy bastante seguro, no puede usar un número arbitrario como 99 en
setAt
: el primer argumento es para la posición en la matriz de capas y el segundo argumento es para la referencia del elemento de capa que desea mover. Para obtener el número de capas, solo usemap.getLayers().getArray().length
Aunque puede ver que podemos obtener una matriz JS para capas, no estoy seguro de que manipular esta matriz directamente sea la mejor manera porque las capas pueden tener eventos adjuntos. Puedes usar los
ol.Collection
métodos en su lugar.fuente
map.getOverlays()
devuelve un meol.Collection
gustamap.getLayers()
.No es tan fácil como solía ser, pero hay algunos métodos auxiliares para la colección. Eso debería permitirle hacer cosas similares a las que ThomasG77 describió anteriormente.
Suponiendo que tiene un mapa llamado mapa, con 4 capas, es decir, [capa_base, costas, mapa de calor, marcadores]
Luego puede obtener la colección a través de map.getLayers (), y la matriz de capas a través de map.getLayers (). GetArray (), y capas individuales a través de
Puede manipular el orden de las capas mediante los métodos de recopilación. Probablemente ayudará a crear algunas funciones auxiliares como:
Espero que tenga la capacidad de identificar sus capas y encontrarlas, configuré una identificación en la creación como layer.set ("layer_id" 44), que luego se puede recuperar a través de layer.get ("layer_id"). Entonces puede tener un bucle de ayuda findLayer a través de su matriz de capas y devolver el índice de capa.
De esta manera puedo tener algo como moveLayerBefore (map, findLayer (44), findLayer (22));
De todos modos, hay una gran cantidad de métodos en la colección, pero espero que esto te ayude a comenzar. Y lo siento si hay errores en ese código, todo está compilado mentalmente ... :)
fuente
basado en la respuesta srussking, escribí el siguiente código asumiendo que el objeto del mapa principal se llama map y es una var global, preferí usar find layer por nombre y no por id,
Aquí está mi código:
fuente
No es necesario manejar los índices en la colección a través de setAt o insertAt. La forma más fácil es usar el método setZIndex en la capa como en la API
fuente
En mi caso, la respuesta de ThomasG77 causó un
AssertionError
, porque la capa que estaba a punto de mover a la parte superior ya estaba adjunta al mapa ( https://openlayers.org/en/v4.4.2/doc/errors/#58 ).Solución que funcionó para mí:
(la función remove devuelve la capa eliminada). Oneliner debería funcionar también, pero no lo probé.
fuente