El SDK de Maps para iOS utiliza los siguientes sistemas de coordenadas:
- Valores de latitud y longitud que hacen referencia a un punto del planeta de manera inequívoca. (Google utiliza el estándar World Geodetic System WGS84).
- Coordenadas mundiales que hacen referencia a un punto del mapa de manera inequívoca.
- Coordenadas de píxeles, las cuales hacen referencia a píxeles específicos en el mapa con un nivel de zoom específico.
- Coordenadas del mosaico, las cuales hacen referencia a un mosaico específico en el mapa con un nivel de zoom específico.
Coordenadas mundiales
Cada vez que la API necesite traducir una ubicación del mundo en una ubicación en un mapa, primero traducirá los valores de latitud y longitud a una coordenada mundial. La API usa la proyección de Mercator para realizar esta traducción.
Para aportar practicidad al cálculo de coordenadas de píxeles (consulta la imagen de abajo), se aplica la suposición de que un mapa con nivel 0 de zoom es un mosaico de tamaño básico. Luego se definen coordenadas mundiales relacionadas con las coordenadas de píxeles en el nivel 0 de zoom y se usa la proyección para convertir latitudes y longitudes en posiciones de píxeles en este mosaico básico. Estas coordenadas mundiales son valores de puntos flotantes medidos desde el origen de la proyección del mapa hasta la ubicación específica. Ten en cuenta que este es un valor de punto flotante. Puede tener una precisión mucho mayor que la resolución actual de la imagen del mapa que se muestra. En otras palabras, las coordenadas mundiales son independientes del nivel de zoom actual.
Las coordenadas mundiales de Google Maps se miden desde el origen de la proyección de Mercator (la esquina noroeste del mapa con una longitud de 180 grados y una latitud de 85 grados, aproximadamente) y aumentan en la dirección x
hacia el este (derecha) y en la dirección y
hacia el sur (abajo). Como el mosaico básico de Google Maps de Mercator es de 256 x 256 píxeles, el espacio de coordenadas mundiales que se puede usar es {0-256}, {0-256}
.
Ten en cuenta que las proyecciones de Mercator tienen un ancho limitado en sentido longitudinal, pero un alto ilimitado en sentido latitudinal. Las imágenes del Mapa base se “recortan” usando la proyección de Mercator a aproximadamente +/- 85° para que la forma del mapa resultante sea cuadrada, lo cual facilita la lógica de selección de mosaicos. Ten en cuenta que una proyección puede generar coordenadas mundiales fuera del espacio de coordenadas utilizable del Mapa base si la representación se realiza muy cerca de los polos, por ejemplo.
Coordenadas de píxeles
Las coordenadas de píxeles hacen referencia a píxeles específicos del mapa con un nivel de zoom específico, mientras que las coordenadas mundiales reflejan ubicaciones absolutas en una proyección determinada. Estas coordenadas de píxeles se calculan usando la siguiente fórmula:
pixelCoordinate = worldCoordinate * 2zoomLevel
A partir de la ecuación anterior, ten en cuenta que cada nivel de zoom que aumenta es el doble tanto en la dirección x
como y
. Por lo tanto, cada nivel de zoom superior da como resultado una resolución cuatro veces mayor que el nivel anterior. Por ejemplo, en el nivel de zoom 1, el mapa consta de 4 mosaicos de 256 x 256 píxeles. Esto da como resultado un área de 512 x 512 píxeles. En el nivel de zoom 19, se puede hacer referencia a cada píxel de x
y de y
en el mapa mediante un valor entre 0 y 256 * 219.
Debido a que las coordenadas mundiales se basan en el tamaño de los mosaicos del mapa, el efecto del valor entero de las coordenadas de un píxel es identificar el píxel exacto en dicha ubicación con el nivel de zoom actual. Ten en cuenta que en el nivel de zoom 0, las coordenadas de píxeles son iguales a las coordenadas mundiales.
Ahora tenemos una manera de indicar con precisión cada ubicación en el mapa, en cada nivel de zoom. El SDK de Maps para iOS construye un viewport
según el centro del mapa con el nivel de zoom (como un objeto LatLng
) y el
el tamaño del elemento DOM que lo contiene y
traduce este cuadro delimitador en coordenadas de píxeles. Luego, la API determina de manera lógica todos los mosaicos del mapa que caben dentro de los límites de píxeles determinados. Se hace referencia a cada uno de estos mosaicos del mapa mediante las coordenadas del mosaico, lo cual simplifica enormemente la visualización de imágenes de los mapas.
Coordenadas del mosaico
La API no puede cargar todas las imágenes de mapa a la vez para los niveles de zoom más altos. Lo que hace, en cambio, es dividir las imágenes de cada nivel de zoom en un conjunto de mosaicos del mapa, organizados de manera lógica en un orden que la aplicación comprenda. Cuando en un mapa se realiza un desplazamiento hacia una nueva ubicación, o un cambio en el nivel de zoom, la API determina los mosaicos necesarios mediante coordenadas de píxeles y convierte esos valores en un conjunto de mosaicos que se deben recuperar. Estas coordenadas de mosaicos se asignan usando un esquema que permite determinar fácilmente, desde la perspectiva lógica, el mosaico que contiene las imágenes de un punto determinado.
La numeración de los mosaicos de Google Maps se origina en el mismo punto que la de los píxeles. En la implementación de la proyección de Mercator en Google, el mosaico de origen siempre se encuentra en la esquina noroeste del mapa. Los valores de x
aumentan de oeste a este y los de y
aumentan de norte a sur. Los mosaicos se indexan utilizando las coordenadas x,y
a partir de ese origen. Por ejemplo, en el nivel de zoom 2, cuando la Tierra se divide en 16 mosaicos, se puede hacer referencia a cada uno de estos mosaicos mediante un par x,y
único:
Ten en cuenta que al dividir las coordenadas de píxeles por el tamaño de mosaico (256) y tomar la parte entera del resultado, se obtienen como subproducto las coordenadas del mosaico en el nivel de zoom actual.
Ejemplo
En el siguiente ejemplo, se muestran las coordenadas de Chicago, IL: valores de latitud y longitud, coordenadas mundiales, coordenadas de píxeles y coordenadas del mosaico. Usa el control de zoom para ver los valores de coordenadas en los diferentes niveles de zoom.
Para ver cómo se calcularon las coordenadas, consulta el código.