Le nombre quotidien autorisé de requêtes au geocoder est limité pour chaque site, et chaque requête (asynchrone...) prend de toute façon du temps : si vous affichez régulièrement les mêmes adresses il est donc fortement conseillé de mettre en cache les coordonnées GPS, autrement dit de les enregistrer en base dès que vous avez le renseignement.

Les données dépendent des services de cartographie, et sont donc plus ou moins fiables, mais l'erreur dépasse rarement quelques mètres.

Le geocoder peut être appelé en Javascript, ou en PHP.

Javascript

Chaque requête au geocoder est asynchrone. L'action d'affichage est donc définie dans l'appel, pour se faire lorsque le résultat est retourné.

geocoder.getLatLng(adresse, function(point) {

if (!point) { // alert(adresse+" introuvable"); } else {

                       var lat = point.lat() ;

var lng = point.lng() ;

                       (...) // créer un marqueur...
                    }
                   });

Pour enregistrer les données en base (côté serveur), il faudra faire un appel Ajax.

PHP

Autant donc tout faire côté serveur. Poru cela, envoyer une requête http avec le format suivant :

http://maps.google.com/maps/geo?q=adresse+recherchee&output=csv&key=abcdefg

où :

  • q= : est l'adresse recherchée au format URL. Exemple : place+concorde+paris+france. Le plus simple est d'utiliser urlencode(). Penser à faire des trim() autour des vos champs pour éliminer les espaces inutiles.
  • output= : est le format de la réponse. On peut indiquer xml, kml, json ou csv selon le besoin. Le format csv est le plus simple à traiter puisqu'il ne renvoie que quatre nombres séparées par des virgules.
  • key= : est votre clé Google Maps

Comme indiqué, le format CSV renvoie une réponse sous forme de quatre nombres correspondant au statut de la réponse (200 si tout va bien), le niveau de zoom, la latitude puis la longitude.

 global $_GOOGLE_KEY ;
 $output = array();
 $address = "15 rue de la Plaine, Paris, FRANCE";
 $google_add = urlencode($address);
 $google_query = "http://maps.google.com/maps/geo?q=$google_add&output=csv&key=$_GOOGLE_KEY" ;
 $res = file_get_contents($google_query);
 
 $res = explode(",", $res);
 $output'lat' = $res2;
 $output'long' = $res3 ;
 $output'zoom' = $res1;

Il ne reste plus qu'à enregistrer ces deux données dans votre base. Prévoyez également un flag de statut :

  • adresse jamais cherchée (à envoyer au geocoder)
  • adresse cherchée et trouvée (les coordonnées se trouvent dans la base)
  • adresse cherchée et pas trouvée (pas la peine de retenter à chaque fois)

Chaque fois que vous voudrez afficher cette adresse, il suffira d'aller chercher les coordonnées dans votre base.

Adresses invalides

Que faire des adresses non trouvées par le geocoder ? On peut les approximer, faute de mieux. On peut aussi les lister dans un back-office : charge à un humain de corriger ces adresses (il suffit d'une faute de frappe...), puis de retenter un geocodage.