Características del escalado de mapas WebGL

Hemos lanzado un editor de estilo . Aprender más acerca de cómo usarlo, puede configurar la tarjeta en las tareas de servicio se pueden leer en vc.ru . En Habré, queremos hablar sobre el concepto StyleZoom, que también usamos en el editor de estilo.



Debajo del corte: una breve historia sobre los niveles de zoom: por qué en la forma estándar no son adecuados para áreas grandes y cómo la escala afecta la carga de mosaicos y la apariencia del mapa.









Nivel de zoom



Para indicar la escala en el mapa 2GIS WebGL, como en muchos otros mapas, se utiliza un número: nivel de zoom o simplemente zoom. Un zoom de cero corresponde a una escala de mapa que encaja todo el mundo en un cuadrado de 256 × 256 px.





Mapa mundial con zoom = 0



Acercar una unidad corresponde a estirar el mapa dos veces. En el primer zoom, todo el mundo será de 256 × 2 = 512 px. En el cuarto, obtenemos el tamaño 256 × 2 × 2 × 2 × 2 = 4096 px.



Este sistema le permite designar una gama de escalas con números fáciles de entender. Por ejemplo, zoom = 11 es sobre una gran ciudad en la pantalla, zoom = 19 le permite ver edificios y pasajes entre ellos en detalle.



Proyección de Mercator



Los mapas 2GIS utilizan la proyección cartográfica de Mercator. Una proyección cartográfica es una forma de mostrar una superficie esférica de la Tierra en un mapa plano.



Dado que un avión y una bola no son lo mismo, cualquier proyección cartográfica distorsiona la forma o el tamaño de los objetos. En la proyección de Mercator, los objetos en latitudes altas en el mapa parecen más grandes que los objetos en el ecuador. Por lo tanto, en tales mapas, Groenlandia parece del tamaño de África, aunque de hecho su área es 14 veces menor que África. Aquí puedes ver cómo la proyección distorsiona el tamaño de los países.





Si Rusia se acerca al ecuador, su tamaño en el mapa se reduce significativamente



El estiramiento de los objetos es proporcional a 1 / cos (lat), donde lat es la latitud del objeto. De esta fórmula se deduce que los objetos en la latitud de San Petersburgo (lat = 60 °) en el mapa se estirarán dos veces. Y los objetos en los polos norte o sur (lat = 90 °) se estirarán indefinidamente. Es por eso que los polos nunca se dibujan en los mapas en la proyección de Mercator: cortan todo al norte y al sur de la latitud de ≈85 °.



Puede leer más sobre la proyección de Mercator en este material visual y fascinante .



Problemas con el zoom y la proyección de Mercator



El principal problema con los zooms se deriva de las propiedades de la proyección de Mercator: el mismo nivel de zoom en diferentes latitudes corresponde a diferentes escalas reales del mapa.



Comparemos capturas de pantalla del mapa con el zoom 14 en Murmansk (latitud 69 °) y Tashkent (latitud 41 °).





15º zoom en Murmansk





15º zoom en Tashkent Puede



ver cuánto difiere el tamaño de la casa. En Murmansk, son grandes, en Tashkent, el mapa es poco profundo.



Al diseñar el mapa, queremos darle una apariencia y sensación específicas. Para ello, establecemos el ancho de las carreteras en píxeles, según el zoom o zoom, a partir del cual comenzamos a mostrar las casas. Los estilos escritos para una latitud se verán muy diferentes en otra. El significado inherente a ellos se distorsionará, ya que los zooms significarán una escala real diferente.



Decisión



Para solucionar este problema, introdujimos el concepto de styleZoom, que puede diferir del zoom habitual.

Zoom normal StyleZoom
Define la escala de objetos Determina qué mosaicos cargar
Escrito en url Determina a qué escala aplicar estilos
Utilizado en los métodos familiares getZoom / setZoom Utilizado en los métodos getStyleZoom / setStyleZoom
Coincide con mosaicos de mapa de bits


styleZoom se calcula a partir del zoom y la latitud mediante la siguiente fórmula: styleZoom = zoom + log2 (1 / (2 * cos (lat)).



Las siguientes propiedades de styleZoom se derivan de la fórmula:

  • Estilo de latitud de 60 ° Zoom = zoom. Dado que los estilos se escribieron originalmente para Novosibirsk y Moscú, decidimos tomar esta latitud como base.
  • En latitudes <60 ° styleZoom <zoom. En el ecuador, styleZoom = zoom - 1.
  • En latitudes> 60 ° styleZoom> zoom.


Ahora veamos cómo se verán Tashkent y Murmansk con styleZoom = 15.





Tashkent, styleZoom = 15 (zoom ≈ 15.59)





Murmansk, styleZoom = 15 (zoom ≈ 14.53)



Se ve claramente que styleZoom corresponde a la escala real del mapa independientemente de la latitud: en casa visualmente no difieren en tamaño, el mapa se ve igual en dos ciudades diferentes.



Limitaciones



El mecanismo de corrección tiene inconvenientes que aparecen en dos escenarios para trabajar con el mapa.



zoom <9

En zooms pequeños, cuando todo el mundo o la mayor parte es visible en la pantalla, arrastrar el mapa hacia arriba y hacia abajo provoca grandes cambios en la latitud y, en consecuencia, styleZoom.



Mientras arrastra y suelta, esto puede llevar a cargar nuevos mosaicos, cambiar de estilo, objetos que aparecen o desaparecen, etc. Para evitar este efecto, con zoom <9, la corrección se desactiva y styleZoom se establece en zoom.



lat> 60 °

En latitudes muy altas, styleZoom se convierte en un zoom mucho mayor. Dado que styleZoom es responsable de qué mosaicos cargar, puede resultar, por ejemplo, que en el zoom 14 cargaremos y mostraremos los mosaicos del zoom 16. El mosaico de zoom 16 es 16 veces más pequeño en área que el mosaico de zoom 14. Y si por lo general caen tiles30 mosaicos en la pantalla, en este caso habrá 480. Y el número de mosaicos afecta en gran medida el rendimiento. Para no cargar la tarjeta de video en estas latitudes, en lat> 60 ° la corrección está deshabilitada y styleZoom también está configurado para hacer zoom.



En lugar de salida



Conecta la API de nuestros mapas WebGL y  diseña mapas para las tareas de tu servicio, sin preocuparte de cómo se verán en diferentes ciudades.



Un agradecimiento especial a Lesha Fedosov por la publicación. Lyokha, ¡hola!



All Articles