Géocodage inverse pour convertir des coordonnées GPS en adresse

API Google Geocoding exemples et tutoriels en Français

Cartographie et webmapping

#PanamaPapers: En finir avec le secret, sanctionnons les banques !

Les Panama Papers ont révélé la façon dont certaines élites utilisent le secret pour cacher leurs activités financières. Ce secret permet à de riches individus de ne pas payer leur part normale d’impôts, mais il permet également à la grande criminalité de se financer, de l’esclavage humain à la vente d’armes illégales en passant par le financement du terrorisme.

Eva Joly - Députée européenne. Rejoignez-nous ! Signez la pétition et partagez-la !


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