Короткий ответ
Методы containerPoint датируются запросом на функцию еще в 2012 году , и сегодня они немного сбивают с толку.
Наилучший ответ - описание автора буклета Владимира Агафонкина:
"layerPoint на самом деле является точкой относительно слоя карты (div, который содержит плитки и маркеры), а не внешнего контейнера карты. Вам нужен map.layerPointToContainerPoint. Но я согласен, что нет удобного способа получить его немедленно, поэтому планируем это для следующей версии. "
Длинный ответ
Более подробно:
Основными публичными методами преобразования в Leaflet, хотя они редко используются разработчиками приложений, являются L.Map.project(latlng [, zoom])
и L.Map.unproject(point [, zoom])
.
Веб-карты разделены на сетку плиток, каждая с одинаковым количеством пикселей. При более высоких уровнях масштабирования карта делится на большее количество плиток с соответствующим большим количеством пикселей. Таким образом, размер пикселя карты зависит от уровня масштабирования.
Это означает, что если вы поэкспериментируете с демонстрационным окном Leaflet в вашем браузере, вывод L.Map.project` для данного latlng изменится только при увеличении и уменьшении.
Начиная с последней версии 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, соответствующая данному значению latlng, заключается в том, что layerPoint - это положение latlng в контейнере карты <div>
с картой в ее начальном положении , в то время как containerPoint - это текущая позиция latlng в контейнере карты <div>
.
РЕДАКТИРОВАТЬ: оказывается, я был не прав. Координаты контейнера, по-видимому, соответствуют видимому кадру, а координаты слоя - большей области, чем видимая. На этот вопрос нужен кто-то более знающий, чем я, чтобы ответить на него.
источник