lunes, 25 de abril de 2011

Geolocalización (W3C API)

Uno de los temas que están "de moda" desde la explosión de uso de Internet en los móviles ha sido la geolocalización.

La distribución de direcciones IP no es como la de los números de teléfono, en los que mirando el antiguo prefijo (las 2 ó 3 primeras cifras) o incluso las siguientes, nos podemos hacer una idea de dónde está instalada la línea. La asignación de direcciones IP es bastante más arbitraria. No obstante, existen bases de datos que pretenden localizar un dispositivo a partir de su dirección IP (dependiendo de los países la localización será más o menos exacta).

Con los móviles la cosa cambia. Se puede conocer su posición a partir de tres elementos:

  • La red WiFi a la que esté conectado.
  • La celda móvil a la que esté conectado.
  • Su GPS interno.

Dependiendo de los métodos usados la precisión será mayor o menor.

En cualquier caso, la API de geolocalización enmascara todos estos procesos y nos da acceso asíncrono a la información de geolocalización del dispositivo a través del navegador. Esta característica no sólo está en los navegadores móviles, sino también en los de "sobremesa" (al menos en Chrome, Firefox y Opera).

La API para obtener la información consiste básicamente en un objeto, navigator.geolocation, que provee de un método, navigator.geolocation.getCurrentPosition(), que recibe como parámetros dos funciones callback: la primera de ellas para manejar el éxito de la geolocalización, y la segunda para manejo de errores.

La función de éxito recibirá un objeto position que tiene una propiedad coords con valores interesantes (creo que los nombres son autoexplicativos):

  • latitude
  • longitude
  • altitude
  • accuracy
  • altitudeAccuracy
  • heading
  • speed

A partir de dichos valores, es sencillo representar nuestra posición en un mapa, usando la API Javascript de Google Maps. Se pueden ver un par de ejemplos en Labs:


En el ejemplo, se pretende usar un timeout para actualizar la posición, pero leyendo más a fondo la documentación hay un método watchPosition() que permite hacer lo propio. También existe el método clearWatch() que se emplea para concluir el seguimiento.

Enlaces relacionados:

No hay comentarios:

Publicar un comentario