Existe um método para alterar índices Z de camadas no OpenLayers3 como na versão antiga?
map.setLayerIndex(markers, 99); //set the marker layer to an arbitrarily high layer index
Preciso alterar a ordem das camadas usando um mapa. Portanto, essa possibilidade de definir o índice z como este não ajuda
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
fonte
fonte
Respostas:
Tente algo como:
map.getLayers().setAt(99, markers)
A lista de camadas está em um objeto herdado de um
ol.Collection
. Veja o documento da API para isso.Tenha cuidado, tenho certeza, você não pode usar um número arbitrário como 99 in
setAt
: o primeiro argumento é para a posição na matriz de camadas e o segundo argumento é para a referência do elemento da camada que você deseja mover. Para obter o número de camadas, basta usarmap.getLayers().getArray().length
Embora você veja que podemos obter uma matriz JS para camadas, não tenho certeza de que manipular essa matriz diretamente é a melhor maneira, porque as camadas podem ter eventos anexados. Você pode usar os
ol.Collection
métodos.fonte
map.getOverlays()
retornos eol.Collection
assim comomap.getLayers()
faz.Não é tão fácil como costumava ser, mas existem alguns métodos auxiliares para a coleção. Isso deve permitir que você faça coisas semelhantes às descritas no ThomasG77 acima.
Supondo que você tenha um mapa chamado map, com 4 camadas, isto é [camada_ base, linhas costeiras, mapa de calor, marcadores]
Em seguida, você pode obter a coleção via map.getLayers () e a matriz de camadas via map.getLayers (). GetArray () e camadas individuais via
Você pode manipular a ordem das camadas através dos métodos de coleta. Provavelmente ajudará a criar algumas funções auxiliares como:
Espero que você tenha a capacidade de identificar suas camadas e encontrá-las, defino um ID na criação como layer.set ("layer_id" 44), que pode ser recuperado através de layer.get ("layer_id"). Em seguida, você pode fazer um loop auxiliar do findLayer pela matriz de camadas e retornar o índice da camada.
Dessa forma, posso ter algo como moveLayerBefore (map, findLayer (44), findLayer (22));
De qualquer forma, existem vários métodos na coleção, mas espero que isso ajude você a começar. E desculpe se há erros nesse código, isso é tudo compilado ... :)
fonte
com base na resposta srussking, escrevi o código a seguir, assumindo que o objeto principal do mapa é chamado map e é uma var global, preferi usar a camada de localização por nome e não por id,
aqui está o meu código:
fonte
Não há necessidade de manipular os índices na coleção via setAt ou insertAt. A maneira mais fácil é usar o método setZIndex na camada, como na API
fonte
No meu caso, a resposta de ThomasG77 causou um
AssertionError
, porque a camada que eu estava prestes a mover para o topo já estava anexada ao mapa ( https://openlayers.org/en/v4.4.2/doc/errors/#58 ).Solução que funcionou para mim:
(a função remove retorna a camada removida). O Oneliner também deve funcionar, mas não testei.
fonte