Leaflet으로 맵 컨테이너 외부에 컨트롤을 배치 하시겠습니까?


13

Leaflet을 사용하여지도 컨텐츠 외부에 컨트롤을 배치하는 방법을 알려줄 수 있습니까?

이 경우 레이어 스위치 컨트롤을지도 객체 외부에 배치하려고합니다.

여기에 이미지 설명을 입력하십시오

답변:


19

리플렛은지도 포털의 구현을 숨기기 위해 손을 많이 흔들지 만 해결책을 생각한 것은 운이 좋습니다!

getContainer기능은 필요한 것입니다. 마크 업뿐만 아니라 실제 HTML 노드를 반환합니다.

그런 다음 노드를 자식 해제 (?)하는 것만으로 몇 줄의 Javascript로 새 부모에게 할당합니다.

실제 사례 및 의견 (및 킥-어스 타일셋)!

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

코드

//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);

모든 어린이를 재귀 적으로 살펴보고 부모에게 다시 할당해야합니다. 간단한 재귀 루프에 대해서는 두 번째 답변을 참조하십시오.

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


잘 하셨어요. 이미 귀하의 의견을 밝혔지만 답변에 관련 JavaScript를 추가 하시겠습니까?
elrobis

a.appendChild(control.onAdd(map))충분해야합니다. 참조 stackoverflow.com/questions/36041651/...
ghybs

getContainer 솔루션과 잘 작동했습니다. 그러나 a.appendChild (control.onAdd (map))로 시도하면 모든 wms 레이어와 레이어 컨트롤이 사라집니다.
mauricio santos 10

나는 아이들을 얻기 위해 재귀 루프로 대답을 업데이트합니다. 죄송합니다. 그래도 작동하지 않으면 알려주십시오.
RomaH

@mauriciosantos 내 나쁜, 그것은 단순히 작동하지 않습니다 L.control.layers.
집시

1

내가 사용한 간단한 가능한 방법 :

전단지 컨트롤을 이동할 html 태그 아래에 추가하십시오.

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

자바 스크립트 코드 :

$(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]);
        }
 });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.