en Browser, Javascript

Cómo geoposicionar un dispositivo con el navegador

Geoposicionamiento

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.

Firefox geoposicionamiento

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?

Post Anterior
Post Siguiente

Política de Comentarios de pixelovers

Responsable » Juan Manuel Garrido
Finalidad » Moderación de los comentarios
Legitimación » Tu consentimiento expreso que te será requerido por Disqus.
Destinatarios » Los datos de tus comentarios los guardará Disqus, mi sistema de comentarios, que está acogido al acuerdo de seguridad EU-US Privacy Shield tal y como recoge su politica de privacidad
Derechos » Desde Disqus, por tanto, podrás acceder, rectificar, limitar y suprimir tus comentarios o tu cuenta
Tienes más detalles acerca del tratamiento de los datos relacionados con los comentarios en nuestra (Política de Privacidad)

  1. Se te olvida comentar que no todos los navegadores pueden contestar a estas llamadas, y que se necesitan últimas versiones o plugins. Por ejemplo, Firefox tiene el plugin Geode   desde hace mas de un año, pero las últimas versiones ya lo tienen integrado.

    http://mozillalabs.com/geode/

    Y para ver una web que hace uso de este sistema, pásate por Loki: http://loki.com

    A mi esto de la Geolocalización desde el navegador me parece alucinante.

    Un interesante artículo sobre el tema: http://veerasundar.com/blog/2009/06/coming-up-in-html5-geolocation-api-support-in-browsers/

  2. Muchas gracias por tu aporte Yon. Cierto es que solo lo amiten navegadores, considerados modernos, y en cierto modo es normal, porque la especificación es un borrador.

    Desde Pixelovers estamos preparando otro artículo sobre geoposicionamiento que esperemos te guste dado tu interés por la geolocalización desde el navegador.

    Como complemento a tu enlace geode te dejo este otro en el que te informan de su uso y  configuración en el Firefox 3.5 y siguientes.

    http://www.mozilla.com/es-ES/firefox/geolocation/