Géolocalisation API : PositionOptions

Objet Javascript PositionOptions

Définition

L'objet PositionOptions est le troisième argument passé à la fonction :
- Geolocation.getCurrentPosition( successCallback, errorCallback, PositionOptions)
- Geolocation.watchPosition( successCallback, errorCallback, PositionOptions).

L'objet PositionOptions a trois propriétés : enableHighAccuracy, timeout et maximumAge qui sont optionnelles.

Exemple de code :
/*
On omet la PositionOptions revient à mettre les valeurs par défaut soit {enableHighAccuracy:false, maximumAge:0, timeout: 'Infinity'}
*/
navigator.geolocation.getCurrentPosition( successCallback, errorCallback);
//On spécifie seulement la propriété maximumAge de PositionOptions
navigator.geolocation.getCurrentPosition( successCallback, errorCallback, {maximumAge:60000});


Exemples de paramétrage d'options

Position en cache disponible.

Si on met maximumAge a Infinity et timeout à 0, on ne devrait récupérer que les positions qui sont dans le cache.
Exemple de code :
var oPositionOptions = { enableHighAccuracy:false, maximumAge:"Infinity", timeout:0 };

Si il n'y a pas de Position dans le cache, selon les spécifications c'est l'errorCallback qui doit être déclenché avec un code 3 (PositionError.TIMEOUT).
Cependant certains navigateurs comme Firefox ou Internet Explorer vont chercher une nouvelle position pour la mettre dans le cache et déclenchent le successCallback au lieu de l'errorCallback.

Dans le fonctionnement spécifié dans spécifications W3C, vous devez faire un appel à getCurrentPosition() quand le code est PositionError.TIMEOUT afin de mettre une position en cache.
Exemple de code :
function PositionCallback(Position){
  alert(Position.coords.latitude);
}

function PositionErrorCallback(PositionError){
  switch(PositionError.code) {
    case PositionError.TIMEOUT:
      navigator.geolocation.getCurrentPosition( PositionCallback, PositionErrorCallbackB);
    break;
    case PositionError.PERMISSION_DENIED:
      //action
    break;
    case PositionError.POSITION_UNAVAILABLE:
      //action
    break;
    case PositionError.UNKNOWN_ERROR:
      //action
    break;
  }
}

function PositionErrorCallbackB(PositionError){
      //action
}

var PositionOptions = {enableHighAccuracy:false, maximumAge:"Infinity", timeout:0};

geolocation.getCurrentPosition( PositionCallback, PositionErrorCallback, PositionOptions );