Kurze Antwort
Die containerPoint-Methoden stammen aus einer Feature-Anfrage aus dem Jahr 2012 und sind heute etwas verwirrend.
Die beste Antwort ist die Beschreibung von Flugblattbetreuer Vladimir Agafonkin:
"layerPoint ist eigentlich ein Punkt relativ zum Kartenlayer (der Teil, der Kacheln und Markierungen enthält), nicht der äußere Kartencontainer. Was Sie brauchen, ist map.layerPointToContainerPoint. Aber ich bin damit einverstanden, dass es keine bequeme Methode gibt, um es sofort abzurufen. Planen Sie dies für die nächste Version. "
Lange Antwort
Genauer gesagt:
Die wichtigsten öffentlichen Konvertierungsmethoden in Leaflet sind L.Map.project(latlng [, zoom])
und , obwohl sie von Anwendungsentwicklern selten verwendet werden L.Map.unproject(point [, zoom])
.
Webkarten sind in ein Raster aus Kacheln mit jeweils der gleichen Pixelanzahl aufgeteilt. Bei höheren Zoomstufen wird die Karte in eine größere Anzahl von Kacheln mit einer entsprechend größeren Anzahl von Pixeln unterteilt. Somit ist die Pixelgröße der Karte von der Zoomstufe abhängig.
Dies bedeutet, dass sich die Ausgabe von L.Map.project` für eine bestimmte Sprache nur ändert, wenn Sie mit einem Leaflet-Demofenster in Ihrem Browser herumspielen und die Ansicht vergrößern oder verkleinern .
Ab der neuesten Version von Leaflet (0.7.3) L.Map.latLngToLayerPoint
lautet die Definition von :
latLngToLayerPoint: function (latlng) {
var projectedPoint = this.project(L.latLng(latlng))._round();
return projectedPoint._subtract(this.getPixelOrigin());
}
Im Gegensatz dazu L.Map.latLngToContainerPoint
lautet:
latLngToContainerPoint: function (latlng) {
return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
}
mit L.Map.layerPointToContainerPoint
definiert als:
layerPointToContainerPoint: function (point) {
return L.point(point).add(this._getMapPanePos());
}
Die private Kartenmethode _getMapPanePos()
gibt den Versatz zwischen der aktuellen Kartenposition und ihrer Position bei der ersten Erstellung zurück. Dies ändert sich nur während eines Kartenschwenks (nicht während des Zoomens). Der Unterschied zwischen dem LayerPoint und dem ContainerPoint, der einem bestimmten LatLng entspricht, besteht darin, dass der LayerPoint die Position des LatLng im Kartencontainer ist , während sich die <div>
Karte an ihrer Anfangsposition befindet containerPoint ist die aktuelle Position des Latls im Kartencontainer <div>
.
EDIT: stellt sich heraus, dass ich falsch lag. Containerkoordinaten scheinen für den sichtbaren Rahmen zu gelten, während Ebenenkoordinaten für einen größeren Bereich als den sichtbaren gelten. Diese Frage muss von jemandem beantwortet werden, der über mehr Kenntnisse verfügt als ich.
quelle