lunes, 28 de enero de 2008

¿ Cómo funciona Google Maps ?

Probablemente ya has utilizado Google Maps en alguna ocasión. Si no lo has hecho todavía, te lo recomiendo, verás el mundo desde una nueva perspectiva.

A los que ya lo conocéis, probablemente os resultará increíble a la velocidad que sirve los mapas, incluso cuando realizamos zoom o nos desplazamos a distintas áreas con el ratón. Pues bien, para comprender mejor como funciona este potente servicio, vamos a intentar explicar cómo Google almacena y sirve los mapas, los parámetros que podemos utilizar para descargar mapas específicos, y como podemos definir nuestra propia url para enlazar con los mapas que más nos interesen.

Para representar el globo terráqueo en un mapa bidimensional se utilizan proyecciones, siendo una de las más utilizadas la Proyección de Mercator que se basa en el modelo ideal que trata a la tierra como un globo hinchable que se introduce en un cilindro y que empieza a inflarse ocupando el volumen del cilindro e imprimiendo el mapa en su interior. Este cilindro cortado longitudinalmente y ya desplegado sería el mapa.

Aunque Google Maps proporciona distintas vistas y proyecciones de mapas, vamos a utilizar para la explicación de nuestro ejemplo la vista normal de mapas con la proyección de mercator. Para esta proyección, Google proporciona 18 niveles de zoom distintos. Para el nivel más bajo ( zoom 0 ), el mapa se compone de 1x1 imágenes y para el nivel más alto ( zoom 17 ), el mapa completo del mundo se compone de 131.072x131.072 imágenes, y como cada imagen ocupa unos 10 Kb, el espacio total necesario que Google necesita para almacenar todas las imágenes del mapa con todos los niveles de zoom, es de aproximadamente 217.812 TB ( Terabytes ).

¿ Qué hace Google para mostrar tan rapidamente los mapas, si la cantidad de imágenes necesarias es, como hemos visto, gigantesca... ?. Pues como ya hemos comentado, divide el mapa completo en pequeñas imágenes cuadradas ( tiles ) con formato png y con un tamaño fijo de 256x256 pixels, y nos sirve únicamente aquellas que necesitamos para poder ver la región del mundo donde nos encontramos y el nivel de zoom que estamos empleando.

Los detalles internos de como se realiza este proceso, los veremos en otro post, ahora lo que nos interesa es ver como el acceso a estos mosaicos de imágenes, se puede hacer mediante una simple url con unos cuantos parámetros y un ingenioso sistema de codificación de los mismos.

Una url básica de google maps tiene el siguiente aspecto:

http://mt0.google.com/mt?x=0&y=0&zoom=17



Donde:

  • mt0 : Servidor desde donde se descargan las imágenes. Google utiliza cuatro servidores mt0 - mt3 para balancear la carga de la petición de imágenes.
  • x=0 : Coordenada X de la imagen.
  • y=0 : Coordenada Y de la imagen.
  • zoom=17 : Factor de zoom que queremos emplear.
Como ya hemos explicado anteriormente, el factor de zoom va desde el valor 0 ( máxima distancia ) hasta el valor 17 ( máxima definición ). Por ejemplo, para un factor de zoom de 17, el mapa de todo el mundo se compone de una sola imagen cuyas coordenas son x=0 e y=0. A un factor de zoom de 16, el mundo se divide en 2x2 imágenes cuyas coordenadas deben ser 0<=x<=1 e 0<=y<=1, a partir de ahí, y para cada nivel de zoom que vayamos ampliando iremos a su vez dividiendo cada imagen en otras 4 imágenes siempre del mismo tamaño 256x256 pixeles. De esta forma si queremos saber el número de imágenes que tenemos para cada nivel de zoom, solo tenemos que aplicar la fórmula: 2^(17-zoom). El problema que aparece ahora es que para localizar cualquier punto en la esfera terrestre, se utiliza un sistema conocido como Sistema de Coordenadas Geográficas.

El sistema de coordenadas geográficas expresa todas las posiciones sobre la tierra usando dos de las tres coordenadas de un sistema de Coordenadas Esféricas que está alineado con el eje de rotación de la tierra. Este define dos ángulos medidos desde el centro de la Tierra:

  • La latitud mide el ángulo entre cualquier punto y el ecuador. Las líneas de latitud se llaman paralelos y son círculos paralelos al ecuador en la superficie de la tierra.
  • La longitud mide el ángulo a lo largo del ecuador desde cualquier punto de la tierra. Se acepta que Greenwich en Londres es la longitud cero. Las líneas de longitud son círculos máximos que pasan por los polos y se llaman meridianos.
Combinando estos dos ángulos, se puede expresar la posición de cualquier punto de la superficie de la Tierra. El problema ahora es cómo podemos trasladar los valores de latitud y longitud que se emplean habitualmente para posicionar cualquier punto en el globo terráqueo, a las coordenas x e y que emplea google para identificar los grupos de imágenes que componen el mapa que deseamos ver.

Para ello podemos utilizar este sencillo algoritmo, que nos proporciona las coordenas x e y para la localización de las imágenes del mapa a componer a partir de la longitud, la latitud y el factor de zoom al que queremos ver dicho mapa:

// Ajustamos latitud al rango 0º (Norte) a 180º(Sur)
// en vez de el estándar 90º (Norte) a -90º(Sur)

latitud = 90 - latitud;


// Ajustamos longitud al rango 0º a 360
// en vez de el estándar 180º a -180º

longitud = 180 + longitud;


// Tamaño de la imagen a partir del factor de zoom

double tamañoImgLatitud = 180 / ( pow ( 2, ( 17 - zoom ) ) );
double tamañoImgLongitud = 360 / ( pow ( 2, ( 17 - zoom ) ) );


// Coordenadas que utiliza Google para imagen del mapa

int coordenadaX = ( int )( longitud / tamañoImgLongitud );
int coordenadaY = ( int )( latitud / tamañoImgLatitud );

En realidad este algoritmo no está completo ya que no cubre la totalidad del globo terráqueo. Debido a la proyección de mercator, el algoritmo que hemos visto debe ser modificado ya que el espacio entre dos paralelos no es constante, de forma que el ángulo descrito por una imagen del mapa depende de su posición vertical.

Si queréis tener el algoritmo completo, podéis encontrar un ejemplo con código fuente escrito en C# por Pascal Buirey.

Muy simplificada, esta es la forma en la que Google sirve las imágenes de sus mapas y uno de los motivos por los que lo hace de esa forma tan eficaz, lo que hace de Google Maps una de las herramientas más utilizadas para búsquedas con localización sobre mapas...

Si quieres conocer también la forma en la que se cargan los mapas vista satélite, puedes ponerme un comentario y publico otro post al respecto...

3 comentarios:

  1. interesante, saber como las tecnologias nos ayudan a nuestro diario vivir, sin embargo, tenemos que puntualizar el punto de la presicion y la actualizacion de las imagenes, ya que asi podremos generarnos nosostros mismos un valorde confianza en el sitio

    ResponderEliminar
  2. Buen aporte, estoy buscando algo similar a tu explicación para realizar un proyecto con la imagenes de Google Map Offline, para comenzar tu explicación es básica pero con gran valor teórico.
    Gracias

    ResponderEliminar
  3. quisiera saber como Google Map traduce las direcciones de las ubicaciones en latitud y longitud para luego darle una ubicacion en el mapa

    ResponderEliminar