Mais

Adicionar camada (s) dinamicamente ao grupo de camadas

Adicionar camada (s) dinamicamente ao grupo de camadas


Tenho um aplicativo Openlayers 3 e os usuários podem recuperar rotas armazenadas de um serviço da web e exibi-las em um mapa. Atualmente, cada rota é adicionada ao topo do índice, mas gostaria que fossem inseridas em um grupo de camadas existente.

Eu tentei usar esses métodos até agora, mas sem sucesso:

var coleção = map.getLayerGroup (plannerLayers); coleção.push (carregadoRoute); map.addLayer (carregadoRoute); // este é o único método que funciona map.getLayerGroup (plannerLayers) .addLayer (carregadoRoute);

O gerenciamento de camadas em geral é algo com o qual pareço estar lutando e, idealmente, gostaria de apenas ser capaz de interrogar o mapa em busca de camadas vetoriais e adicionar funcionalidade discreta a elas. Existe uma maneira de adicionar / remover camadas de forma programática a um grupo ou até mesmo mover-se entre os grupos?


Para qualquer outra pessoa que possa se deparar com este problema, acontece (obviamente para alguns) que, porque um Grupo de Camadas é um Objeto que contém outros Objetos, mas também uma série de objetos, isso deve ser identificado e a nova camada pode ser inserida nele. Exemplo abaixo:

/ ********************* / / * Get Planner Group * / / ******************* ** / função getPlannerGroup () {var layers = map.getLayers (); comprimento var = layers.getLength (), l; para (var i = 0; i 

Espero que isso ajude qualquer pessoa que esteja procurando fazer algo semelhante;)


Estive programando para OpenLayers durante todo o final de semana, e o que li em todos os lugares parece muito complicado, aqui está a maneira mais fácil e rápida de adicionar Layers ao LayerGroup

Primeiro adicione um "grupo" ao mapa, vamos chamá-lo de markerGroup

marcadorGroup = novo ol.layer.Group ({camadas: [], nome: 'markerGroup'}); var map = new Map ({target: 'map', layers: [this.markerGroup]}) // Obtenha a camada que deseja editar, pode ser uma variável ou parte diretamente do mapa // Prefiro armazenar meus marcadores em uma variável this.markerGroup.getLayers (). array_.push (vectorLayer) // this.map.get ("markerGroup"). getLayers () deve retornar a mesma matriz this.map.removeLayers (this.markerGroup); this.map.addLayers (this.markerGroup);

Limpo e fácil de ler;)


A resposta do dvmac01 me ajudou muito. Obrigado!

Uma coisa que eu gostaria de acrescentar é que se você quiser adicionar outra camada ao Grupo, terá que trabalhar um nível acima disso. (Trabalhando com OpenLayers v.4.6.5)

Apresento aqui um exemplo para verificar se já existe uma camada de grupo e, em caso afirmativo, adicione a nova camada. Veja abaixo:

var innerLayers = []; // faz um loop em cada camada do mapa map.getLayers (). forEach (function (layer) {if (layer instanceof ol.layer.Group) {// veja se a camada de grupo já existe if (layer.get ("nome" ) === "Planner") {// verificar se layer.getLayers existe if (layer.getLayers) {// obter camadas internas da camada de grupo como Collection innerLayers = layer.getLayers (); // sem matriz! // novo camada para Coleção innerLayers.push (loadedRoute); if (innerLayers instanceof ol.Collection) {// definir a coleção de camadas do grouplayer layer.setLayers (innerLayers);}}}}});

Eu confirmo a resposta acima, faço minha própria versão dela, funciona.

var all_layer_groups = map.getLayers (); var layer_group; para (i = 0, n = all_layer_groups.getLength (); i