Queremos mostrar varios marcadores en un mapa estático y queremos calcular el nivel de zoom óptimo como lo hace Google Maps. Ya calculamos el rectángulo delimitador y el punto central del mapa, pero ahora nos resulta difícil calcular el nivel de zoom correcto para mostrar todo el rectángulo delimitador. ¿Alguien puede señalarnos en la dirección correcta?
google-maps
openstreetmap
tiles
extents
Tobias Schwarz
fuente
fuente
Respuestas:
Para obtener el nivel de zoom, deberá conocer las dimensiones en píxeles de su mapa. También necesitarás hacer tus cálculos en coordenadas esféricas de mercator.
fuente
Este es el código C # que uso en Maperitive :
mapArea
: cuadro delimitador en long / lat coords (x = long, y = lat)paddingFactor
: esto se puede usar para obtener el efecto "120%" al que se refiere ThomM. El valor de 1.2 le daría el 120%.Tenga en cuenta que en mi caso
zoom
puede ser un número real. En el caso de los mapas web, necesita un valor de zoom entero, por lo que debe usar algo como(int)Math.Floor(zoom)
obtenerlo.Por supuesto, este código solo se aplica a la proyección de Web Mercator.
fuente
GeometryUtils
solo se usa aquí para convertir grados a radianes y viceversa, es una fórmula matemática simple.Bounds2
es básicamente solo una estructura rectangular. Este código se proporcionó más como un pseudocódigo que como algo directamente copiable.Si está utilizando OpenLayers
Map.getZoomForExtent
, calculará el nivel de zoom más alto que pueda ajustarse a toda la extensión en el mapa. Laextent
necesidad de estar en la proyección del mapa. También puede usar afill_factor
para evitar mostrar puntos en el borde del mapa ymax_zoom
limitar el posible zoom:fuente