L'API geolocalisation en HTML5
Par
debray jerome (Dji programmation web2 et design) (Blog)
Une des nouveautés introduites par HTML5 est la géolocalisation utilisable via une API d'un navigateur. Cela permet aux pages web d'interroger le navigateur sur la position géographique de l'utilisateur.
L'API de base permet d'obtenir les coordonnées en latitude et en longitude ainsi que l'altitude.
Celles-ci peuvent alors être exploitées par le biais d'une carte (de type Google Map).
I. Compatibilité
II. Utilisation de l'API
III. Les options
IV. L'objet position
V. Fonction d'error : PositionError
VI. Les fonctions watchPosition() et clearWatch()
VII. Exemple concret avec Google Map
VIII. Conclusion
IX. Remerciements
I. Compatibilité
Chrome, Safari, Opera, Firefox.
II. Utilisation de l'API
Comment obtenir la position courante de l'utilisateur ? Voici la marche à suivre :
Tout d'abord, on vérifie que l'API est disponible ;
if(navigator.geolocation){
...
}
|
Ensuite, on cherche la position (attention le navigateur vous demandera la permission, il faut l'accepter).
Il faut noter que l'altitude n'est disponible que sous Firefox.
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(function(position){
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var altitude = position.coords.altitude;
document.getElementById('geolocation').innerHTML = 'latitude : ' + latitude + '<br />' + 'longitude : ' + longitude + '<br />' + 'altitude : ' + altitude + '<br />';
});
}
|
La fonction navigator.geolocation.getCurrentPosition() prend en argument une fonction dans laquelle on peut utiliser la variable position qui renvoie les coordonnées.
navigator.geolocation.getCurrentPosition() peut également prendre en argument une fonction de gestion d'erreur et des options (dans un objet).
Exemple :
navigator.geolocation.getCurrentPosition(
successfunction, errorfunction, {options}
);
|
III. Les options
Les options peuvent être les suivantes (si elles sont implémentées dans le navigateur utilisé) :
-
enableHighAccuracy : (true ou false), position précise ou non ;
-
timeout : (type long), temps de réponse, durée avant renvoi vers la fonction d'erreur ;
-
maximumAge : (type long ou Infinity) durée de la mise en cache de la position courante, si maximumAge:0 alors la position ne viendra jamais du cache, elle sera toujours renouvelée.
function errorfunction(error){
switch(error.code) {
case error.TIMEOUT:
break;
}
}
function successfunction(position){
if (position.timestamp < freshness_threshold && position.coords.accuracy < accuracy_threshold) {
} else {
}
}
navigator.geolocation.getCurrentPosition(
successfunction, errorfunction, {maximumAge:5000, timeout:2000}
);
|
IV. L'objet position
position retourne les coordonnées mais également d'autres valeurs :
-
coords, retourne les coordonnées ainsi que la précision (entre autres) ;
-
timestamp, représente le moment où la position a été acquise.
coords retourne plusieurs valeurs :
-
latitude, la latitude de la position ;
-
longitude, la longitude de la position ;
-
altitude, l'altitude de la position ;
-
accuracy, niveau de précision de la longitude et de la latitude (en mètre) ;
-
altitudeAccuracy: niveau de précision de l'altitude (en mètre) ;
-
heading, donne la position en degré par rapport au nord ;
-
latitude, affiche la vitesse actuelle de déplacement de la position (en mètre).
Bien entendu toutes ces valeurs ne sont pas encore toutes présentes dans les navigateurs
Les plus répandues sont : latitude, longitude et altitude (unique à Firefox pour l'instant). Si une valeur n'est pas existante, elle retournera null.
V. Fonction d'error : PositionError
Lorsque la fonction de callback d'erreur est appelée, elle a pour argument un objet de type PositionError
Voici la liste des propriétés de l'objet :
-
UNKNOW_ERROR, erreur inconnue ;
-
PERMISSION_DENIED, l'application n'a pas l'autorisation d'utiliser l'API Geolocalisation ;
-
POSITION_UNVAILABLE, la position n'existe pas ;
-
TIMEOUT, erreur de timeout ;
-
code, renvoi le code d'erreur courant ;
-
message, renvoi le message.
function errorfunction(error){
switch(error.code) {
case error.TIMEOUT:
break;
case error.PERMISSION_DENIED:
alert(error.message);
break;
}
}
function successfunction(position){
...
}
navigator.geolocation.getCurrentPosition(
successfunction, errorfunction, {maximumAge:5000, timeout:2000}
);
|
VI. Les fonctions watchPosition() et clearWatch()
watchPosition() est une fonction asynchrone qui retourne une position immédiatement et entame un processus de veille. Si la position de l'utilisateur change (sur un mobile par exemple), cette fonction retournera immédiatement une valeur de position.
Cela ressemble un peu à un setInterval (très grossièrement), mais sur une position.
Enfin pour supprimer ce processus de veille entamé par watchPosition(), on utilisera clearWatch() qui prend en argument l'adresse de watchPosition().
Voici un exemple pour illustrer ce propos :
var watchId = navigator.geolocation.watchPosition(
successfunction, errorfunction, {maximumAge:5000, timeout:2000}
);
function cancelButton(){
clearWatch(watchId);
}
|
VII. Exemple concret avec Google Map
VIII. Conclusion
En conclusion, on remarquera que la localisation n'est pas toujours très fiable car elle se base sur l'adresse IP des machines (ou des proxys !). On peut donc penser que cette API sera plus utilisée pour les applications web orientées mobile.
IX. Remerciements


Copyright © debray jerome. Aucune reproduction, même partielle, ne peut être faite
de ce site et de l'ensemble de son contenu : textes, documents, images, etc.
sans l'autorisation expresse de l'auteur.
Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 €
de dommages et intérêts.
Cette page est déposée.