전단지 : 컨테이너 좌표와 레이어 좌표?


17

지도 컨테이너 좌표레이어 좌표 의 차이점은 무엇입니까 ?

내가 수집 한 것에서 맵 컨테이너 좌표 는 항상 맵 뷰포트를 기준으로하며 레이어 좌표는 항상 컨테이너 좌표 와 동일한 값으로 시작 하지만 맵이 이동하면 변경됩니다.

좌표 / 점을 참조하는 API :

답변:


21

짧은 답변

containerPoint 메서드 는 2012 년의 기능 요청으로 시작되었으며 오늘날 약간 혼란 스럽습니다.

가장 좋은 대답은 전단지 관리자 인 Vladimir Agafonkin의 설명입니다.

"layerPoint는 실제로 외부 맵 컨테이너가 아닌 맵 레이어 (타일과 마커를 포함하는 div)에 상대적인 점입니다. 필요한 것은 map.layerPointToContainerPoint입니다. 그러나 즉시 가져 오는 편리한 방법이 없다는 것에 동의합니다. 다음 버전을 위해. "

긴 대답

더 자세하게 :

Leaflet의 핵심 공개 변환 방법은 응용 프로그램 개발자가 거의 사용하지 않지만 L.Map.project(latlng [, zoom])and L.Map.unproject(point [, zoom])입니다.

웹 맵은 각각 동일한 수의 픽셀을 가진 타일 격자로 나뉩니다. 확대 / 축소 수준이 높을수록지도는 더 많은 수의 타일로 나누어지고 해당하는 더 많은 수의 픽셀이 있습니다. 따라서지도의 픽셀 크기는 확대 / 축소 수준에 따라 다릅니다.

즉, 브라우저에서 Leaflet 데모 창을 사용하는 경우 주어진 latlng에 대한 L.Map.project의 출력은 확대 및 축소하는 경우 에만 변경됩니다.

최신 버전의 Leaflet (0.7.3)을 기준으로 다음과 같이 L.Map.latLngToLayerPoint읽습니다.

latLngToLayerPoint: function (latlng) {
    var projectedPoint = this.project(L.latLng(latlng))._round();
    return projectedPoint._subtract(this.getPixelOrigin());
}

대조적으로, L.Map.latLngToContainerPoint읽습니다 :

latLngToContainerPoint: function (latlng) {
    return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
}

L.Map.layerPointToContainerPoint정의 :

layerPointToContainerPoint: function (point) { 
    return L.point(point).add(this._getMapPanePos());
}

개인지도 메소드 _getMapPanePos()는 현재지도 위치와 처음 작성된 위치 사이 의 오프셋을 반환합니다 . 이것은 단지 layerPoint 및 containerPoint 차이는 위도와 경도 주어에 대응하도록 layerPoint가지도 용기에 위도와 경도의 위치라고하고,지도 팬 (되지 크게 동안) 동안 변화 <div> 가 초기 위치에있는지도와이 그동안, containerPoint는지도 컨테이너에서 latlng의 현재 위치입니다 <div>.


1
사람-내가 공감할 수 있다면, 당신은 100 번 공감 당할 것입니다.
Saad Malik

0

편집 : 내가 잘못 밝혀졌다. 컨테이너 좌표는 보이는 프레임을위한 것으로 보이지만 레이어 좌표는 보이는 것보다 더 큰 영역을위한 것입니다. 이 질문에 답하려면 저보다 더 많은 지식이 필요합니다.


1
Alex-나는 그것이 옳지 않다고 생각합니다. 컨테이너 좌표와 레이어 좌표는 모두 컨테이너의 원점 (왼쪽 위)에서 픽셀로 지정됩니다. 그러나 맵 패닝을 시작하면 마커의 레이어 좌표 / 점은 동일하게 유지되고 마커의 맵 좌표 / 점은 왼쪽 상단 원점에 따라 업데이트됩니다.
Saad Malik

@ SimFox3 안녕하세요. 맞습니다. 그리고 나는 그것을 말하기 전에 그것을 시험해야했다! 이제 레이어 점은 보유한 일종의 '창'에 대해 정의 된 좌표, 즉 화면보다 큽니다. 화면보다 더 생생한 캐시 된보기와 같습니다. 그렇기 때문에 레이어 포인트 좌표가 자주 변경되지는 않지만 '창'이 움직일 때만 변경됩니다. 컨테이너 점 좌표는 항상 보이는보기를 기준으로 좌표에 국한된 것 같습니다. 모든 것을 말하면, 나는 당신보다 더 이상 모른다는 것이 분명하므로 Leaflet dev라면 좋을 것입니다. 칩을 넣을 수 있습니다!
Alex Leith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.