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).

Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites      



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:
	            //faire quelque chose pour la gestion du timeout
	        break;
	    }
	}
	function successfunction(position){
	    if (position.timestamp < freshness_threshold && position.coords.accuracy < accuracy_threshold) {
	        // la position est relativement fraiche et précise.
	    } else {
	        // la position est ancienne ou imprécise.
	    }
	}
	
	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:
	            //faire quelque chose pour la gestion du 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

Merci à Clément BEAUFILS pour sa relecture.




               Version PDF (Miroir)   Version hors-ligne (Miroir)

Valid XHTML 1.0 TransitionalValid CSS!

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.

 
 
 
 
Partenaires

Hébergement Web