Géocodage inversé ou Reverse geocoding avec l'API Google Geocoding
Le terme géocodage se réfère généralement à la transformation d'une adresse postale en ses coordonnées géographiques sur une carte (Latitude, Longitude).
Le processus permettant de faire l'inverse, c'est à dire de transformer des coordonnées géographiques (Latitude, Longitude) en une adresse postale, est nommé géocodage inversé ou reverse geocoding.
L'API Google Géocoding supporte le géocodage inversé grâce à l'utilisation directe du paramètre latlng
.
Le géocodeur Google fournit une réponse au format JSON ou XML.
Géocodage inverse : Réponse au format JSON
Par exemple, la requête suivante contient les valeurs de latitude/longitude correspondant à un emplacement situé à Tours :
http://maps.googleapis.com/maps/api/geocode/json?latlng
=47.393654,0.680525&sensor
=true_OU_false
Important :
dans la requête ci-dessus le paramètre sensor
a été laissé volontairement avec la variable true_OU_false afin de souligner que vous devez définir impérativement cette valeur de façon explicite sur true ou sur false.
Assurez-vous également qu'aucun espace existe entre les latitude et longitude passées dans le paramètre latlng
.
Voici la réponse au format JSON :
/** * Requête envoyée aux serveurs de Google : */ http://maps.googleapis.com/maps/api/geocode/json?latlng
=47.393654,0.680525&sensor
=false /** * Ci-dessous la réponse retournée au format json : */ { "results" : [ { "address_components" : [ { "long_name" : "25", "short_name" : "25", "types" : [ "street_number" ] }, { "long_name" : "Place du Grand Marché", "short_name" : "Place du Grand Marché", "types" : [ "route" ] }, { "long_name" : "Tours", "short_name" : "Tours", "types" : [ "locality", "political" ] }, { "long_name" : "Indre-et-Loire", "short_name" : "37", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "Centre", "short_name" : "Centre", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "France", "short_name" : "FR", "types" : [ "country", "political" ] }, { "long_name" : "37000", "short_name" : "37000", "types" : [ "postal_code" ] } ], "formatted_address" : "25 Place du Grand Marché, 37000 Tours, France", "geometry" : { "location" : { "lat" : 47.39367390, "lng" : 0.6804578999999999 }, "location_type" : "ROOFTOP" }, "types" : [ "street_address" ] }, { "address_components" : [ { "long_name" : "37000", "short_name" : "37000", "types" : [ "postal_code" ] }, { "long_name" : "Tours", "short_name" : "Tours", "types" : [ "locality", "political" ] }, { "long_name" : "Indre-et-Loire", "short_name" : "37", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "Centre", "short_name" : "Centre", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "France", "short_name" : "FR", "types" : [ "country", "political" ] } ], "formatted_address" : "37000 Tours, France", "geometry" : { "bounds" : { "northeast" : { "lat" : 47.40392650, "lng" : 0.7373837999999999 }, "southwest" : { "lat" : 47.37170470, "lng" : 0.66163560 } }, "location" : { "lat" : 47.38327450, "lng" : 0.68979660 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 47.40392650, "lng" : 0.7373837999999999 }, "southwest" : { "lat" : 47.37170470, "lng" : 0.66163560 } } }, "types" : [ "postal_code" ] }, { "address_components" : [ { "long_name" : "Tours", "short_name" : "Tours", "types" : [ "locality", "political" ] }, { "long_name" : "Indre-et-Loire", "short_name" : "37", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "Centre", "short_name" : "Centre", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "France", "short_name" : "FR", "types" : [ "country", "political" ] } ], "formatted_address" : "Tours, France", "geometry" : { "bounds" : { "northeast" : { "lat" : 47.4395930, "lng" : 0.73709490 }, "southwest" : { "lat" : 47.3489420, "lng" : 0.65278490 } }, "location" : { "lat" : 47.3941440, "lng" : 0.684840 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 47.4395930, "lng" : 0.73709490 }, "southwest" : { "lat" : 47.3489420, "lng" : 0.65278490 } } }, "types" : [ "locality", "political" ] }, { "address_components" : [ { "long_name" : "Indre-et-Loire", "short_name" : "37", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "Centre", "short_name" : "Centre", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "France", "short_name" : "FR", "types" : [ "country", "political" ] } ], "formatted_address" : "Indre-et-Loire, France", "geometry" : { "bounds" : { "northeast" : { "lat" : 47.7098680, "lng" : 1.3660490 }, "southwest" : { "lat" : 46.7367140, "lng" : 0.0527370 } }, "location" : { "lat" : 47.28949249999999, "lng" : 0.8160970 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 47.7098680, "lng" : 1.3660490 }, "southwest" : { "lat" : 46.7367140, "lng" : 0.0527370 } } }, "types" : [ "administrative_area_level_2", "political" ] }, { "address_components" : [ { "long_name" : "Centre", "short_name" : "Centre", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "France", "short_name" : "FR", "types" : [ "country", "political" ] } ], "formatted_address" : "Centre, France", "geometry" : { "bounds" : { "northeast" : { "lat" : 48.9410290, "lng" : 3.128410 }, "southwest" : { "lat" : 46.3469060, "lng" : 0.0527370 } }, "location" : { "lat" : 47.75156860, "lng" : 1.67506310 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 48.9410290, "lng" : 3.128410 }, "southwest" : { "lat" : 46.3469060, "lng" : 0.0527370 } } }, "types" : [ "administrative_area_level_1", "political" ] }, { "address_components" : [ { "long_name" : "France", "short_name" : "FR", "types" : [ "country", "political" ] } ], "formatted_address" : "France", "geometry" : { "bounds" : { "northeast" : { "lat" : 51.12420, "lng" : 9.66250 }, "southwest" : { "lat" : 41.32530000000001, "lng" : -5.55910 } }, "location" : { "lat" : 46.2276380, "lng" : 2.2137490 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 51.12420, "lng" : 9.66250 }, "southwest" : { "lat" : 41.32530000000001, "lng" : -5.55910 } } }, "types" : [ "country", "political" ] } ], "status" : "OK" }
Cliquez sur le lien ci-desssous pour voir le résultat directement dans votre navigateur :
http://maps.googleapis.com/maps/api/geocode/json?latlng
=47.393654,0.680525&sensor
=false
Notez que la réponse du géocodage inversé contient plusieurs résultats.
Les résultats formatted_addresses
ne correspondent pas uniquement à une adresse postale, mais également à toutes les possibilités de nommer géographiquement un emplacement.
Par exemple, lors du géocodage inverse d'un point situé dans la ville de Tours, le point géocodé peut être désigné de plusieurs façons :
- adresse postale complète,
- code postal ville, pays,
- ville, pays,
- département, pays,
- région, pays,
- pays.
Toutes ces désignations sont des "adresses" valides retournées par le géocodeur.
La liste complète des valeurs formatted_address
renvoyées par la requête précédente est affichée ci-dessous :
"formatted_address
" : "25 Place du Grand Marché, 37000 Tours, France", "formatted_address
" : "37000 Tours, France", "formatted_address
" : "Tours, France", "formatted_address
" : "Indre-et-Loire, France", "formatted_address
" : "Centre, France", "formatted_address
" : "France",
Généralement, les adresses sont retournées dans l'ordre suivant : de la plus précise à la moins précise.
L'adresse la plus précise est le résultat le plus important, comme dans notre exemple.
Notez que Google retourne différents types d'adresses, de l'adresse de rue la plus précise, aux entités politiques spécifiques telles que les quartiers, villes, départements, régions, pays, etc.
Si vous souhaitez faire correspondre une adresse plus générale, vous pouvez inspecter les types
des Placemark
retournés. (Voir : les types de composants adresse.)
Remarque :
Le géocodage inversé fourni une estimation.
Le géocodeur tentera de trouver, avec une certaine tolérance, l'adresse postale la plus proche des coordonnées GPS fournies (Latitude, Longitude).
Si aucune correspondance n'est trouvée, le géocodeur retournera aucun résultat.
Géocodage inverse : Réponse au format XML
La requête suivante est identique à la précédente, la seule différence se situe au niveau du format de la réponse demandée (ici XML) :
http://maps.googleapis.com/maps/api/geocode/xml?latlng
=47.393654,0.680525&sensor
=true_OU_false
Important :
dans la requête ci-dessus le paramètre sensor
a été laissé volontairement avec la variable true_OU_false afin de souligner que vous devez définir impérativement cette valeur de façon explicite sur true ou sur false. Assurez-vous également qu'aucun espace existe entre les latitude et longitude passées dans le paramètre latlng
.
Voici la réponse au format XML :
/** * Requête envoyée aux serveurs de Google : */ http://maps.googleapis.com/maps/api/geocode/xml?latlng
=47.393654,0.680525&sensor
=false /** * Ci-dessous la réponse retournée au format XML : */ <?xml version="1.0" encoding="UTF-8"?> <GeocodeResponse> <status>OK</status> <result> <type>street_address</type> <formatted_address>25 Place du Grand Marché, 37000 Tours, France</formatted_address> <address_component> <long_name>25</long_name> <short_name>25</short_name> <type>street_number</type> </address_component> <address_component> <long_name>Place du Grand Marché</long_name> <short_name>Place du Grand Marché</short_name> <type>route</type> </address_component> <address_component> <long_name>Tours</long_name> <short_name>Tours</short_name> <type>locality</type> <type>political</type> </address_component> <address_component> <long_name>Indre-et-Loire</long_name> <short_name>37</short_name> <type>administrative_area_level_2</type> <type>political</type> </address_component> <address_component> <long_name>Centre</long_name> <short_name>Centre</short_name> <type>administrative_area_level_1</type> <type>political</type> </address_component> <address_component> <long_name>France</long_name> <short_name>FR</short_name> <type>country</type> <type>political</type> </address_component> <address_component> <long_name>37000</long_name> <short_name>37000</short_name> <type>postal_code</type> </address_component> <geometry> <location> <lat>47.3936739</lat> <lng>0.6804579</lng> </location> <location_type>ROOFTOP</location_type> <viewport> <southwest> <lat>47.3923249</lat> <lng>0.6791089</lng> </southwest> <northeast> <lat>47.3950229</lat> <lng>0.6818069</lng> </northeast> </viewport> </geometry> </result> <result> <type>postal_code</type> <formatted_address>37000 Tours, France</formatted_address> <address_component> <long_name>37000</long_name> <short_name>37000</short_name> <type>postal_code</type> </address_component> <address_component> <long_name>Tours</long_name> <short_name>Tours</short_name> <type>locality</type> <type>political</type> </address_component> <address_component> <long_name>Indre-et-Loire</long_name> <short_name>37</short_name> <type>administrative_area_level_2</type> <type>political</type> </address_component> <address_component> <long_name>Centre</long_name> <short_name>Centre</short_name> <type>administrative_area_level_1</type> <type>political</type> </address_component> <address_component> <long_name>France</long_name> <short_name>FR</short_name> <type>country</type> <type>political</type> </address_component> <geometry> <location> <lat>47.3832745</lat> <lng>0.6897966</lng> </location> <location_type>APPROXIMATE</location_type> <viewport> <southwest> <lat>47.3717047</lat> <lng>0.6616356</lng> </southwest> <northeast> <lat>47.4039265</lat> <lng>0.7373838</lng> </northeast> </viewport> <bounds> <southwest> <lat>47.3717047</lat> <lng>0.6616356</lng> </southwest> <northeast> <lat>47.4039265</lat> <lng>0.7373838</lng> </northeast> </bounds> </geometry> </result> <result> <type>locality</type> <type>political</type> <formatted_address>Tours, France</formatted_address> <address_component> <long_name>Tours</long_name> <short_name>Tours</short_name> <type>locality</type> <type>political</type> </address_component> <address_component> <long_name>Indre-et-Loire</long_name> <short_name>37</short_name> <type>administrative_area_level_2</type> <type>political</type> </address_component> <address_component> <long_name>Centre</long_name> <short_name>Centre</short_name> <type>administrative_area_level_1</type> <type>political</type> </address_component> <address_component> <long_name>France</long_name> <short_name>FR</short_name> <type>country</type> <type>political</type> </address_component> <geometry> <location> <lat>47.3941440</lat> <lng>0.6848400</lng> </location> <location_type>APPROXIMATE</location_type> <viewport> <southwest> <lat>47.3489420</lat> <lng>0.6527849</lng> </southwest> <northeast> <lat>47.4395930</lat> <lng>0.7370949</lng> </northeast> </viewport> <bounds> <southwest> <lat>47.3489420</lat> <lng>0.6527849</lng> </southwest> <northeast> <lat>47.4395930</lat> <lng>0.7370949</lng> </northeast> </bounds> </geometry> </result> <result> <type>administrative_area_level_2</type> <type>political</type> <formatted_address>Indre-et-Loire, France</formatted_address> <address_component> <long_name>Indre-et-Loire</long_name> <short_name>37</short_name> <type>administrative_area_level_2</type> <type>political</type> </address_component> <address_component> <long_name>Centre</long_name> <short_name>Centre</short_name> <type>administrative_area_level_1</type> <type>political</type> </address_component> <address_component> <long_name>France</long_name> <short_name>FR</short_name> <type>country</type> <type>political</type> </address_component> <geometry> <location> <lat>47.2894925</lat> <lng>0.8160970</lng> </location> <location_type>APPROXIMATE</location_type> <viewport> <southwest> <lat>46.7367140</lat> <lng>0.0527370</lng> </southwest> <northeast> <lat>47.7098680</lat> <lng>1.3660490</lng> </northeast> </viewport> <bounds> <southwest> <lat>46.7367140</lat> <lng>0.0527370</lng> </southwest> <northeast> <lat>47.7098680</lat> <lng>1.3660490</lng> </northeast> </bounds> </geometry> </result> <result> <type>administrative_area_level_1</type> <type>political</type> <formatted_address>Centre, France</formatted_address> <address_component> <long_name>Centre</long_name> <short_name>Centre</short_name> <type>administrative_area_level_1</type> <type>political</type> </address_component> <address_component> <long_name>France</long_name> <short_name>FR</short_name> <type>country</type> <type>political</type> </address_component> <geometry> <location> <lat>47.7515686</lat> <lng>1.6750631</lng> </location> <location_type>APPROXIMATE</location_type> <viewport> <southwest> <lat>46.3469060</lat> <lng>0.0527370</lng> </southwest> <northeast> <lat>48.9410290</lat> <lng>3.1284100</lng> </northeast> </viewport> <bounds> <southwest> <lat>46.3469060</lat> <lng>0.0527370</lng> </southwest> <northeast> <lat>48.9410290</lat> <lng>3.1284100</lng> </northeast> </bounds> </geometry> </result> </GeocodeResponse>
Cliquez sur le lien ci-desssous pour voir le résultat directement dans votre navigateur :
http://maps.googleapis.com/maps/api/geocode/xml?latlng
=47.393654,0.680525&sensor
=false
Géocodage inversé structure globale de la réponse
results[x] results[x].address_components[y]
results[x].address_components[y]
.long_name
results[x].address_components[y]
.short_name
results[x].address_components[y]
.types
results[x].formatted_address
results[x].geometry
results[x].geometry
.bounds
results[x].geometry
.bounds
.northeast
results[x].geometry
.bounds
.northeast
.lat results[x].geometry
.bounds
.northeast
.lng results[x].geometry
.bounds
.southwest
results[x].geometry
.bounds
.southwest
.lat results[x].geometry
.bounds
.southwest
.lng results[x].geometry
.location
results[x].geometry
.location
.lat results[x].geometry
.location
.lng results[x].geometry
.location_type
results[x].geometry
.viewport
results[x].geometry
.viewport
.northeast
results[x].geometry
.viewport
.northeast
.lat results[x].geometry
.viewport
.northeast
.lng results[x].geometry
.viewport
.southwest
results[x].geometry
.viewport
.southwest
.lat results[x].geometry
.viewport
.southwest
.lng results[x].types[z]
status