Colocar controles fora do contêiner de mapa com o Leaflet?


12

Alguém pode me dizer como posso colocar controles fora do conteúdo do mapa com o Leaflet?

Nesse caso, eu só quero colocar o controle do switch de camada fora do objeto do mapa.

insira a descrição da imagem aqui

Respostas:


18

O Folheto faz um aceno manual para ocultar a implementação do portal do mapa, mas, para sua sorte, eles pensaram em uma solução!

A getContainerfunção é exatamente o que você precisa. Isso retorna o nó HTML real, não apenas a marcação.

É então tão fácil quanto não criar (?) O nó e atribuí-lo a um novo pai, com algumas linhas de Javascript.

Exemplo de trabalho e comentários (e um conjunto de peças incríveis)!

http://codepen.io/romahicks/pen/ONmPmp

O código

//Create Layer
var baseMap = new    L.TileLayer('http://{s}.tiles.mapbox.com/v3/gvenech.m13knc8e/{z}/{x}/{y}.png'   );

var baseMapIndex = {
  "Map": baseMap
};

// Create the map
var map = new L.map('map', {
  center: new L.LatLng(41.019829, 28.989864),
  zoom: 14,
  maxZoom: 18,
  zoomControl: false, // Disable the default zoom controls.
  layers: baseMap
});

// Create the control and add it to the map;
var control = L.control.layers(baseMapIndex);
control.addTo(map);

 // Call the getContainer routine.
 var htmlObject = control.getContainer();
 // Get the desired parent node.
 var a = document.getElementById('new-parent');

 // Finally append that node to the new parent, recursively searching out and re-parenting nodes.
 function setParent(el, newParent)
 {
    newParent.appendChild(el);
 }
 setParent(htmlObject, a);

Você deve recursivamente passar por todos os filhos e atribuí-los novamente aos pais. Veja a segunda resposta para um loop recursivo simples.

/programming/20910147/how-to-move-all-html-element-children-to-another-parent-using-javascript


Bom trabalho. Você já recebeu o voto positivo, mas você se importaria em adicionar o JavaScript relevante à sua resposta?
22416 elrobis

a.appendChild(control.onAdd(map))deve ser suficiente. Veja também stackoverflow.com/questions/36041651/…
ghybs 22/03

Funcionou bem com a solução getContainer. Mas quando tentei com o a.appendChild (control.onAdd (map)), todas as camadas wms e o controle de camada desaparecem.
mauricio santos 23/03

Eu atualizo minha resposta com um loop recursivo para obter filhos, desculpe. Informe-me se isso não funcionar.
RomaH 23/03

@mauriciosantos Meu mal, não funciona tão simplesmente para L.control.layers.
ghybs

0

Maneira possível simples que eu usei:

Adicione a tag html abaixo, para onde você deseja mover os controles do folheto:

<div id="custom-map-controls"></div>

Código JavaScript:

$(document).ready(function () {

var newParent = document.getElementById('custom-map-controls');
        var oldParent = document.getElementsByClassName("leaflet-top leaflet-right")

        while (oldParent[0].childNodes.length > 0) {
            newParent.appendChild(oldParent[0].childNodes[0]);
        }
 });
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.