
Hace unos días, el 27 de noviembre de 2009, publicaron un nuevo borrador en el W3C titulado: Geolocation API Specification. Esta especificación define una API que proporciona secuencias de comandos de acceso a la información de localización geográfica asociada con el dispositivo de alojamiento. ¿Verdad que suena interesante?
El objeto Geolocation lo podemos encontrar en la instancia navigator y debe implementar estos 3 métodos:
- void getCurrentPosition (successCallback, errorCallback, options): Cuando se llama, de inmediato regresa y, a continuación, de forma asincrónica intenta obtener la ubicación actual del dispositivo.
- long watchPosition (successCallback, errorCallback, options): inmediatamente devuelve un valor long que identifica unívocamente a una operación watch y, a continuación de forma asincrónica inicia la operación de watch. Esta operación sigue controlando la posición del dispositivo e invocando la función callback adecuada cada vez que el dispositivo cambia de posición. La operación continúa hasta que se llama al método clearWatch con el identificador correspondiente.
- void clearWatch (watchId): el proceso identificado por el argumento watchId se interrumpe inmediatamente y dejan de invocarse los callbacks. Este identificador es el que devuelve la función watchPosition.
Nota: Estas funciones (getCurrentPosition y watchPosition) notificarán al usuario de nuestras intenciones y será él quién decida si permitir el acceso a esa información o no.

Estas funciones se encuentran implementadas por un objeto llamdo Geolocation que se pertenece a la interfaz NavigatorGeolocation y debería implementarse por el objeto Navigator. Así que, podemos acceder a la posición actual del visitante mediante:
navigator.geolocation.getCurrentPosition(successCallback, errorCallback, options)
¿Y qué significa: successCallback, errorCallback, options y watchId? Pues los dos primeros argumentos son obligatoriamente funciones y el tercero un objeto. En más detalle tenemos:
successCallback
Funcion que recibe por parámetro Position position que contiene los atributos Coordinates coords y DOMTimeStamp timestamp. El atributo coords contiene la siguiente información:
Position.Coordinates
- latitude: coordenadas geograficas especificadas en grados.
- longitude: coordenadas geograficas especificadas en grados.
- altitude: denota la altura especificada en metros.
- accuracy: denota el nivel de precisión de las coordenadas de latitud y longitud, en metros.
- altitudeAccuracy: denota el nivel de precisión de la altitud.
- heading: representa la dirección del desplazamiento, tomado en grados en sentido horario desde el norte verdadero.
- speed: indica la velocidad del dispositivo en metros por segundo.
La altitud, la precisión de la altitud, la dirección y la velocidad pueden existir o no dependiendiendo del dispositivo y en caso de no exisitir devolverán null
errorCallback
Función que recibe por parámetro PositionError error el cual contiene un short code y un DOMString message. El code puede tener un valor de 0 a 3 dependiendo de la causa, siendo:
- UNKNOWN_ERROR = 0
- PERMISSION_DENIED = 1
- POSITION_UNAVAILABLE = 2
- TIMEOUT = 3
options
Objeto que consta de los siguientes atributos:
- boolean enableHighAccuracy: proporciona un indicio de que la aplicación desea recibir los mejores resultados posibles. El valor por defecto es false.
- long timeout: indica la duración máxima de tiempo (expresado en milisegundos) que se permite para pasar de la llamada a getCurrentPosition() o watchPosition() hasta que se invoca el successCallback correspondiente.
- long maximumAge: indica que la aplicación está dispuesto a aceptar una posición en caché, cuya edad no sea mayor que el tiempo especificado en milisegundos.
¿Qué opinas de que un dispositivo pueda informar de la posición del mismo? ¿Se te ocurre alguna aplicación, o ya le estas dando uso y quieres compartirlo?