Resposta curta
Os métodos containerPoint datam de uma solicitação de recurso em 2012 e hoje são um pouco confusos.
A melhor resposta é a descrição do mantenedor do Leaflet Vladimir Agafonkin:
"layerPoint é na verdade um ponto relativo à camada do mapa (a div que contém blocos e marcadores), não ao contêiner externo do mapa. O que você precisa é map.layerPointToContainerPoint. Mas eu concordo que não há um método conveniente para obtê-lo imediatamente, portanto, agende isso para a próxima versão ".
Resposta longa
Mais detalhadamente:
Os principais métodos de conversão pública no Leaflet, embora raramente sejam usados pelos desenvolvedores de aplicativos, são L.Map.project(latlng [, zoom])
e L.Map.unproject(point [, zoom])
.
Os mapas da Web são divididos em uma grade de blocos, cada um com o mesmo número de pixels. Em níveis mais altos de zoom, o mapa é dividido em um número maior de blocos, com um número maior correspondente de pixels. Assim, o tamanho do pixel do mapa depende do nível de zoom.
Isso significa que, se você estiver mexendo com uma janela de demonstração do Leaflet no navegador, a saída do L.Map.project` para uma determinada latlng só será alterada se você aumentar e diminuir o zoom.
Na versão mais recente do Leaflet (0.7.3), a definição de L.Map.latLngToLayerPoint
lê:
latLngToLayerPoint: function (latlng) {
var projectedPoint = this.project(L.latLng(latlng))._round();
return projectedPoint._subtract(this.getPixelOrigin());
}
Por outro lado, L.Map.latLngToContainerPoint
lê-se:
latLngToContainerPoint: function (latlng) {
return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
}
com L.Map.layerPointToContainerPoint
definido para ser:
layerPointToContainerPoint: function (point) {
return L.point(point).add(this._getMapPanePos());
}
O método de mapa privado _getMapPanePos()
retorna o deslocamento entre a posição atual do mapa e sua posição quando foi criada. Isso muda apenas durante uma panorâmica do mapa (não durante o zoom); portanto, a diferença entre o layerPoint e o containerPoint correspondente a uma determinada latlng é que o layerPoint é a posição da latlng no contêiner de mapa <div>
com o mapa em sua posição inicial , enquanto o containerPoint é a posição atual do latlng no container de mapa <div>
.
Edição: Acontece que eu estava errado. As coordenadas do contêiner parecem ser para o quadro visível, enquanto as coordenadas da camada são para uma área maior que a visível. Esta pergunta precisa de alguém com mais conhecimento do que eu para respondê-la.
fonte