Filtrer les résultats du géocodeur à l'aide de components

API Google Geocoding exemples et tutoriels en Français

Cartographie et webmapping

Partager ce tutoriel sur les réseaux sociaux
Signaler une erreur dans cet article

L'API de géolocalisation Google Geocoding API peut retourner des adresses limitées à une zone spécifique. La restriction est spécifiée en utilisant le filtre components.
Un filtre se compose d'une liste de paires : component:value, séparées par une barre verticale appelée pipe (|).
Seuls les résultats correspondant à tous les filtres seront retournés.
Les valeurs de filtrage soutiennent les mêmes méthodes de correction orthographique et de correspondance partielle tout comme les autres requêtes de géocodage.
Si un résultat du géocodage est une correspondance partielle pour un composant du filtrage, il contiendra alors un champ partial_match dans la réponse.

Les components pouvant être filtrés sont :

  • route: correspond au nom long ou court d'une route,
  • locality: correspond aux deux types locality et sublocality,
  • administrative_area: correspond à tous les niveaux de administrative_area,
  • postal_code: correspond à postal_code et postal_code_prefix
  • country: correspond à un nom de pays ou au code à deux lettres d'un pays au format ISO 3166-1.

Ainsi, si l'on souhaite géocoder la ville de Vienne ( Isère, Rhône-Alpes ) en limitant les résultats du géocodeur à la France FR il faut utiliser :

address=vienne&components=country:FR

L'URL ci-dessous permet de rechercher la ville de Vienne en France FR :

http://maps.google.com/maps/api/geocode/json?address=vienne&components=country:FR&sensor=false

Elle retournera :

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Vienne",
               "short_name" : "Vienne",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Isère",
               "short_name" : "38",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Rhône-Alpes",
               "short_name" : "RA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "France",
               "short_name" : "FR",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Vienne, France",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 45.557463,
                  "lng" : 4.923409899999999
               },
               "southwest" : {
                  "lat" : 45.4867009,
                  "lng" : 4.837251999999999
               }
            },
            "location" : {
               "lat" : 45.525587,
               "lng" : 4.874339
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 45.557463,
                  "lng" : 4.923409899999999
               },
               "southwest" : {
                  "lat" : 45.4867009,
                  "lng" : 4.837251999999999
               }
            }
         },
         "types" : [ "locality", "political" ]
      }
   ],
   "status" : "OK"
}

Par contre, pour géocoder la ville de Vienne en limitant les résultats du géocodeur à l'Autriche il faudra utiliser :

address=vienne&components=country:AT

Ainsi l'URL ci-dessous permet de rechercher Vienne en Autriche :

http://maps.google.com/maps/api/geocode/json?address=vienne&components=country:AT&sensor=false

Elle retournera :

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Vienne",
               "short_name" : "Vienne",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Vienne",
               "short_name" : "Vienne",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Autriche",
               "short_name" : "AT",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Vienne, Autriche",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 48.3230999,
                  "lng" : 16.5774999
               },
               "southwest" : {
                  "lat" : 48.1182699,
                  "lng" : 16.1826199
               }
            },
            "location" : {
               "lat" : 48.2081743,
               "lng" : 16.3738189
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 48.3230999,
                  "lng" : 16.5774999
               },
               "southwest" : {
                  "lat" : 48.1182699,
                  "lng" : 16.1826199
               }
            }
         },
         "types" : [ "locality", "political" ]
      }
   ],
   "status" : "OK"
}

Une requête contenant un filtre components renvoie uniquement les résultats correspondant au filtre. Si aucune correspondance n'est trouvée, le géocodeur retournera un résultat qui correspond au filtre lui-même.

Ainsi, l'URL ci-dessous qui permet de rechercher la ville de Moscou située en région Rhône-Alpes" en France FR (qui n'existe pas bien entendu) :

http://maps.google.com/maps/api/geocode/json?address=moscou&components=administrative_area:rhone-alpes|country:FR&sensor=false

retournera :

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Rhône-Alpes",
               "short_name" : "RA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "France",
               "short_name" : "FR",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Rhône-Alpes, France",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 46.519953,
                  "lng" : 7.1855661
               },
               "southwest" : {
                  "lat" : 44.115493,
                  "lng" : 3.6889129
               }
            },
            "location" : {
               "lat" : 45.1695797,
               "lng" : 5.4502821
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 46.519953,
                  "lng" : 7.1855661
               },
               "southwest" : {
                  "lat" : 44.115493,
                  "lng" : 3.6889129
               }
            }
         },
         "partial_match" : true,
         "types" : [ "administrative_area_level_1", "political" ]
      }
   ],
   "status" : "OK"
}

Note : Le filtrage par composants retourne une réponse ZERO_RESULTS uniquement si vous fournissez des filtres qui s'excluent les uns des autres.

Ainsi, l'URL ci-dessous qui permet de rechercher la région administrative Rhône-Alpes située en Autriche AT" (qui n'existe pas bien entendu) :

http://maps.google.com/maps/api/geocode/json?components=administrative_area::rhone-alpes|country:AT&sensor=false

retournera :

{
   "results" : [],
   "status" : "ZERO_RESULTS"
}

En utilisant le filtre components il est possible de faire une requête sans préciser le paramètre address, mais vous ne pouvez pas spécifier un composant sans valeur.

Ainsi, l'URL ci-dessous qui permet de rechercher l'autoroute A10 en région Centre en France FR :

http://maps.google.com/maps/api/geocode/json?components=route:A10|administrative_area:centre|country:FR&sensor=false

retournera :

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "A10",
               "short_name" : "A10",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Centre",
               "short_name" : "Centre",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "France",
               "short_name" : "FR",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "A10, France",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 48.4071305,
                  "lng" : 1.8953069
               },
               "southwest" : {
                  "lat" : 46.959656,
                  "lng" : 0.546488
               }
            },
            "location" : {
               "lat" : 47.6194393,
               "lng" : 1.2306918
            },
            "location_type" : "GEOMETRIC_CENTER",
            "viewport" : {
               "northeast" : {
                  "lat" : 48.4071305,
                  "lng" : 1.8953069
               },
               "southwest" : {
                  "lat" : 46.959656,
                  "lng" : 0.546488
               }
            }
         },
         "types" : [ "route" ]
      }
   ],
   "status" : "OK"
}