Usar la geolocalización

Firefox 3.5 y versiones posteriores admiten la API de Geolocalización, lo que permite que el usuario indique su ubicación a las aplicaciones web si así lo desea.Por cuestiones de privacidad y seguridad, se le pide al usuario que confirme el permiso para que indicar la información sobre su ubicación.

Firefox 3.5 incluye la compatibilidad para la localización basada en la información de su WiFi a través de Google Servicios de Localización. En la transacción entre Firefox 3.5 y Google, se intercambian datos, como conexión WiFi de datos de Access Point, un token de acceso (similar a una cookie de 2 semanas) y la dirección IP del usuario.  Para obtener más información, por favor, echa un vistazo a la Política de privacidad de Mozilla y Política de privacidad de Google que tratan sobre cómo estos datos pueden ser utilizados.  Consulta también el código fuente , si sientes curiosidad por saber cómo se lleva a cabo este servicio.

Nota: si tu interés se centra en escribir a un proveedor de geolocalización, un servicio que se puede consultar según la ubicación del usuario, por favor, consulta nsIGeolocationProvider.  También te puede resultar de interés el servicio de supervisión de puntos de acceso WiFi.

Firefox 3.6 (Gecko 1.9.2) agregó la compatibilidad para el uso del servicio GPSD (GPS daemon) para la geolocalización en Linux.

El objeto geolocalización

La API de geolocalización se publica a través de un objeto secundario geolocation dentro del objeto navigator.  Si el objeto existe, los servicios de geolocalización estarán disponibles.  Puedes probar la presencia de geolocalización de esta manera:

if (navigator.geolocation) {
  /* geolocalización está disponible */
} else {
  alerta("Disculpa, pero los servicios de geolocalización no son compatibles con tu navegador".);
}

A partir de Gecko 1.9.2 (Firefox 3.6), los complementos pueden obtener el objeto de geolocalización mediante la obtención de una referencia al servicio de geolocalización de esta manera:

var geolocation = Components.classes["@mozilla.org/geolocation;1"]
                            .getService(Components.interfaces.nsIDOMGeoGeolocation);

Obtención de la posición actual

Para obtener la ubicación actual del usuario, puedes llamar al método getCurrentPosition().  Esto inicia una solicitud asincrónica para detectar la posición del usuario y consulta al hardware de posicionamiento para obtener una información actualizada.  Cuando se determina la posición , se ejecuta una rutina de devolución de llamada especificada.  Si lo deseas, puedes proporcionar una segunda devolución de llamada que se ejecutará si se produce un error.  Un tercer parámetro opcional, es una interfaz de opciones donde se puede establecer la edad máxima de la solicitud y el tiempo de espera para una solicitud.

Utiliza getCurrentPosition() si deseas una solución única de posición lo antes posible, independientemente de la exactitud. Los dispositivos con un GPS, por ejemplo, pueden tardar un minuto o más para conseguir una posición de GPS, de forma que datos menos precisos (localización de IP o wifi) pueden ser devueltos a getCurrentPosition() para empezar.

navigator.geolocation.getCurrentPosition(function(position) {
  do_something(position.coords.latitude, position.coords.longitude);
});

El ejemplo anterior hará que la función do_something() se ejecute al obtenerse la ubicación.

Visualización de la posición actual

Si los datos de posición cambian (ya sea por el movimiento del dispositivo o por la recepción de información geográfica más precisa), puedes configurar un devolución de llamada que se realiza con la información de la posición actualizada.  Esto se hace utilizando la función watchPosition(), que tiene los mismos parámetros de entrada que getCurrentPosition() .  La devolución de llamada se realiza varias veces, permitiendo que el navegador bien actualice su ubicación mientras te mueves, bien proporcione una localización más precisa mientras se utilizan otras técnicas para geolocalizarte.  La devolución de llamada de error, que es opcional, al igual que lo es para getCurrentPosition() , se realiza sólo una vez, si no hubiera una devolución de resultados válidos.

Puedes utilizar watchPosition() sin una llamada getCurrentPosition() initial.

var watchID = navigator.geolocation.watchPosition(function(position) {
  do_something(position.coords.latitude, position.coords.longitude);
}
);

El método watchPosition() devuelve un número de identificación que se puede utilizar para identificar la posición de observador solicitada. Utiliza este valor junto al método clearWatch() para dejar de ver la ubicación del usuario.

navigator.geolocation.clearWatch (watchID);

watchPosition() acepta una devolución de llamada de éxito y una devolución de llamada de error (como getCurrentPosition ) y un objeto positionObjects opcional, que puede tener tres propiedades:

  • enableHighAccuracy: una booleana que indica al dispositivo que deseas obtener el mayor número de lecturas precisas (este parámetro puede o no hacer una diferencia, dependiendo de tu hardware)
  • maximumAge: la edad máxima (en milisegundos) de la lectura (esto es apropiado ya que el dispositivo puede almacenar lecturas en caché para ahorrar energía o ancho de banda)
  • timeout: el tiempo máximo (en milisegundos) durante el que cual estás dispuesto a permitir que el dispositivo intente obtener una localización geográfica

Una llamada a watchPosition podría ser así:

var wpid = navigator.geolocation.watchPosition(geo_success, geo_error, {enableHighAccuracy:true, maximumAge:30000, timeout:27000});

Una demostración de watchPosition: http://www.thedotproduct.org/experiments/geo/


Descripción de una posición

La ubicación del usuario se describe mediante un objeto de posición que tiene los siguientes campos:

timestamp (marca de hora)
La hora a la que se tomó la lectura, como DOMTimeStamp .
coords (coordenadas)
Un objeto nsIDOMGeoPositionCoords que indica la ubicación.
address (dirección)
Un objeto nsIDOMGeoPositionAddress que especifica la dirección correspondiente, si está disponible.

Gestión de errores

La devolución de llamada de error, si se proporciona cuando se llama a getCurrentPosition() o watchPosition() , tiene la siguiente firma:

errorCallback función (PositionError error);

La estructura PositionError tiene los siguientes campos:

Compatibilidad de navegadores

code (código)
Un código de error numérico que puede ser uno de los siguientes:
UNKNOWN_ERROR (valor numérico 0)
El proceso de adquisición de localización falló debido a un error no cubierto por la definición de cualquier otro código de error de esta interfaz.
PERMISSION_DENIED (valor numérico 1)
El proceso de adquisición de localización falló porque el origen de la aplicación no tiene permiso para utilizar la API de geolocalización.
POSITION_UNAVAILABLE (valor numérico 2)
La posición del dispositivo no se pudo determinar. Uno o más de los proveedores de ubicación utilizados en el proceso de adquisición reportó un error interno que causó el fallo del proceso.
TIMEOUT (valor numérico 3)
La longitud máxima de tiempo ha transcurrido antes de que la implementación pudiera adquirir con éxito un objeto de posición nuevo.
Navegador Compatibilidad básica Nivel 2 de geolocalización
Internet Explorer (ninguna,  IE9 pp7) ---
Firefox (Gecko) 3.5 (1.9.1) ---
Opera 10.60 ---
Safari | Chrome | WebKit 5 | 5 | 533 ---
message (mensaje)
Un mensaje de error humano legible, adecuado para su uso en registros y depuración, pero no para mostrar al usuario.

Consulta también

Etiquetas y colaboradores del documento

Colaboradores de esta página: codigoreal, ethertank, inma_610
Última actualización por: ethertank,