Risposta breve
I metodi containerPoint risalgono a una richiesta di funzionalità nel 2012 e oggi sono un po 'confusi.
La migliore risposta è la descrizione del manutentore del volantino Vladimir Agafonkin:
"layerPoint è in realtà un punto relativo al layer della mappa (il div che contiene riquadri e marker), non il contenitore esterno della mappa. Ciò di cui hai bisogno è map.layerPointToContainerPoint. Ma sono d'accordo che non esiste un metodo conveniente per ottenerlo immediatamente, quindi pianificalo per la prossima versione ".
Risposta lunga
Più in dettaglio:
I principali metodi di conversione pubblici in Leaflet, sebbene usati raramente dagli sviluppatori di applicazioni, sono L.Map.project(latlng [, zoom])
e L.Map.unproject(point [, zoom])
.
Le mappe Web sono suddivise in una griglia di riquadri, ciascuno con lo stesso numero di pixel. A livelli di zoom più elevati, la mappa è divisa in un numero maggiore di riquadri, con un corrispondente numero maggiore di pixel. Pertanto, la dimensione dei pixel della mappa dipende dal livello di zoom.
Ciò significa che se stai scherzando con una finestra demo di Leaflet nel tuo browser, l'output di L.Map.project` per un dato latlng cambierà solo se ingrandisci e riduci .
A partire dall'ultima versione di Leaflet (0.7.3), la definizione di L.Map.latLngToLayerPoint
legge:
latLngToLayerPoint: function (latlng) {
var projectedPoint = this.project(L.latLng(latlng))._round();
return projectedPoint._subtract(this.getPixelOrigin());
}
Al contrario, si L.Map.latLngToContainerPoint
legge:
latLngToContainerPoint: function (latlng) {
return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
}
con L.Map.layerPointToContainerPoint
definito come:
layerPointToContainerPoint: function (point) {
return L.point(point).add(this._getMapPanePos());
}
Il metodo della mappa privata _getMapPanePos()
restituisce l' offset tra la posizione corrente della mappa e la sua posizione quando è stata creata per la prima volta. Questo cambia solo durante una panoramica della mappa (non durante lo zoom), quindi la differenza tra layerPoint e containerPoint corrispondente a un dato latlng è che layerPoint è la posizione del latlng nel contenitore <div>
della mappa con la mappa nella sua posizione iniziale , mentre il containerPoint è la posizione corrente del latlng nel contenitore della mappa <div>
.