Folleto: ¿Coordenadas del contenedor vs Coordenadas de la capa?

17

¿Cuál es la diferencia entre las coordenadas del contenedor del mapa y las coordenadas de la capa ?

Por lo que obtuve, las coordenadas del contenedor del mapa siempre son relativas a la ventana gráfica del mapa, y aunque las coordenadas de la capa siempre comienzan con los mismos valores que las coordenadas del contenedor , cambian una vez que el mapa se desplaza.

API que se refieren a coordenadas / punto:

Saad Malik
fuente

Respuestas:

21

Respuesta corta

Los métodos de containerPoint datan de una solicitud de características en 2012 , y hoy son un poco confusos.

La mejor respuesta es la descripción del mantenedor de folletos Vladimir Agafonkin:

"layerPoint es en realidad un punto relativo a la capa del mapa (el div que contiene mosaicos y marcadores), no el contenedor del mapa externo. Lo que necesita es map.layerPointToContainerPoint. Pero estoy de acuerdo en que no hay un método conveniente para obtenerlo de inmediato, así que programe esto para la próxima versión ".

Respuesta larga

En mayor detalle:

Los principales métodos de conversión pública en Leaflet, aunque rara vez los usan los desarrolladores de aplicaciones, son L.Map.project(latlng [, zoom])y L.Map.unproject(point [, zoom]).

Los mapas web se dividen en una cuadrícula de mosaicos, cada uno con el mismo número de píxeles. A niveles de zoom más altos, el mapa se divide en una mayor cantidad de mosaicos, con una mayor cantidad de píxeles correspondiente. Por lo tanto, el tamaño de píxel del mapa depende del nivel de zoom.

Esto significa que si está jugando con una ventana de demostración de Leaflet en su navegador, la salida de L.Map.project` para un bloqueo dado solo cambiará si acerca y aleja.

A partir de la última versión de Leaflet (0.7.3), la definición de L.Map.latLngToLayerPointlecturas:

latLngToLayerPoint: function (latlng) {
    var projectedPoint = this.project(L.latLng(latlng))._round();
    return projectedPoint._subtract(this.getPixelOrigin());
}

Por el contrario, L.Map.latLngToContainerPointlee:

latLngToContainerPoint: function (latlng) {
    return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
}

con L.Map.layerPointToContainerPointdefinido para ser:

layerPointToContainerPoint: function (point) { 
    return L.point(point).add(this._getMapPanePos());
}

El método de mapa privado _getMapPanePos()devuelve el desplazamiento entre la posición actual del mapa y su posición cuando se creó por primera vez. Esto solo cambia durante una panorámica del mapa (no durante el zoom), por lo que la diferencia entre el layerPoint y el containerPoint correspondiente a un latlng dado es que el layerPoint es la posición del latlng en el contenedor <div> del mapa con el mapa en su posición inicial , mientras que containerPoint es la posición actual del latlng en el contenedor del mapa <div>.

Justin Manley
fuente
1
Hombre, si pudiera votar, te votarían 100 veces.
Saad Malik
0

EDITAR: resulta que estaba equivocado. Las coordenadas del contenedor parecen ser para el marco visible, mientras que las coordenadas de la capa son para un área mayor que la visible. Esta pregunta necesita a alguien más informado que yo para responderla.

Alex Leith
fuente
1
Alex - No creo que eso sea correcto. Las coordenadas del contenedor y las coordenadas de la capa se especifican en píxeles desde el origen (arriba a la izquierda) del contenedor. Sin embargo, cuando comienzo a desplazar el mapa, la coordenada / punto de capa de un marcador permanece igual mientras que la coordenada / punto del mapa para un marcador se actualiza respectivamente al punto de origen superior izquierdo.
Saad Malik
Hola @ SimFox3, tienes razón. ¡Y debería haberlo probado antes de decir algo! Ahora creo que el punto de capa es una coordenada que se define en relación con una especie de 'ventana' que se mantiene, que es más grande que la pantalla. Es como una vista en caché que es biogger que la pantalla. Es por eso que las coordenadas del punto de capa cambian, pero no con frecuencia, y solo cuando se mueve la 'ventana'. Las coordenadas de los puntos del contenedor parecen siempre confinadas a las coordenadas relativas a la vista visible. Habiendo dicho todo eso, está claro que no sé más que tú, por lo que sería genial si un desarrollador de Leaflet. podría entrar!
Alex Leith el