Réponse courte
Les méthodes containerPoint datent d' une demande de fonctionnalité en 2012 , et aujourd'hui, elles sont un peu déroutantes.
La meilleure réponse est la description de Vladimir Agafonkin, responsable du dépliant:
"layerPoint est en fait un point par rapport à la couche de la carte (la div qui contient des tuiles et des marqueurs), pas le conteneur de carte externe. Ce dont vous avez besoin est map.layerPointToContainerPoint. Mais je suis d'accord qu'il n'y a pas de méthode pratique pour l'obtenir immédiatement, alors planifiez cette pour la prochaine version. "
Longue réponse
Plus en détail:
Les principales méthodes de conversion publiques de Leaflet, bien que rarement utilisées par les développeurs d'applications, sont L.Map.project(latlng [, zoom])
et L.Map.unproject(point [, zoom])
.
Les cartes Web sont divisées en une grille de tuiles, chacune avec le même nombre de pixels. À des niveaux de zoom plus élevés, la carte est divisée en un plus grand nombre de tuiles, avec un plus grand nombre de pixels correspondant. Ainsi, la taille en pixels de la carte dépend du niveau de zoom.
Cela signifie que si vous jouez avec une fenêtre de démonstration de Leaflet dans votre navigateur, la sortie de L.Map.project` pour un latlng donné ne changera que si vous zoomez et dézoomez .
Depuis la dernière version de Leaflet (0.7.3), la définition de se L.Map.latLngToLayerPoint
lit comme suit:
latLngToLayerPoint: function (latlng) {
var projectedPoint = this.project(L.latLng(latlng))._round();
return projectedPoint._subtract(this.getPixelOrigin());
}
En revanche, se L.Map.latLngToContainerPoint
lit comme suit:
latLngToContainerPoint: function (latlng) {
return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
}
avec L.Map.layerPointToContainerPoint
défini comme:
layerPointToContainerPoint: function (point) {
return L.point(point).add(this._getMapPanePos());
}
La méthode de carte privée _getMapPanePos()
renvoie le décalage entre la position actuelle de la carte et sa position lors de sa première création. Cela ne change que pendant un panoramique de carte (pas pendant le zoom), donc la différence entre le layerPoint et le containerPoint correspondant à un latlng donné est que le layerPoint est la position du latlng dans le conteneur <div>
de la carte avec la carte à sa position initiale , tandis que le containerPoint est la position actuelle du latlng dans le conteneur de carte <div>
.
EDIT: il s'avère que j'avais tort. Les coordonnées du conteneur semblent être pour le cadre visible tandis que les coordonnées du calque sont pour une zone plus grande que celle visible. Cette question a besoin de quelqu'un de mieux informé que moi pour y répondre.
la source