Aller au contenu principal

GET /v1/geocode

Vue d'ensemble​

Le géocodage direct convertit une adresse postale, un nom de lieu ou une requête de recherche en coordonnées géographiques. L'API renvoie jusqu'à 50 résultats classés par pertinence, basés sur les données OpenStreetMap.

Requête​

GET https://api.geocodeme.net/v1/geocode

Header requis : X-Api-Key: gm_YOUR_API_KEY

Paramètres​

ParamètreTypeRequisDéfautDescription
qstringOuiaucunAdresse ou nom de lieu à géocoder
limitintegerNon5Nombre maximal de résultats à renvoyer (1 à 50). Des valeurs élevées augmentent la taille de la réponse. Il n'y a pas de pagination : tous les résultats sont renvoyés dans une seule réponse.
countrycodesstringNonaucunCodes ISO 3166-1 alpha-2 séparés par des virgules, restreignant les résultats à l'intérieur de la zone couverte (par ex. de, es,pt). Les alias de région (gp, mq, gf, yt, re, eu) choisissent quel index régional est interrogé ; tout autre code s'applique par-dessus comme filtre pays. Les deux se composent, et les mélanger ne fait jamais que restreindre (eu,de rend les mêmes résultats que de en n'interrogeant qu'une instance au lieu de six), alors qu'un second code de même nature élargit, comme une liste doit le faire (de,es, gp,mq). fr est un code pays, pas un alias : il désigne toute la donnée française, métropole et outre-mer. Les codes hors zone couverte ne renvoient aucun résultat. Voir Alias de région et filtres pays.
formatstringNonjsonFormat de la réponse : json ou geojson

Alias de région et filtres pays​

countrycodes porte deux décisions indépendantes, et elles se combinent :

  • où chercher. Les alias de région gp (Guadeloupe), mq (Martinique), gf (Guyane), yt (Mayotte), re (La Réunion) et eu (Europe continentale) sélectionnent chacun un index régional. Ils sont résolus par notre routeur et ne sont jamais transmis au moteur de recherche. Sans aucun alias dans la liste, les six instances régionales sont interrogées.
  • quoi garder. Tout autre code (de, es, pt, fr…) est transmis comme filtre pays, lu comme un OU logique, et appliqué à l'intérieur des instances sélectionnées ci-dessus.

Mélanger les deux natures restreint toujours. Ajoutez un code pays à un alias : vous gardez la même zone, filtrée. Ajoutez un alias à un code pays : vous gardez le même filtre sur une zone plus petite. Ni l'un ni l'autre ne peut élargir la réponse.

Ajouter un code de même nature élargit, exactement comme une liste doit le faire : plusieurs alias interrogent plusieurs régions (gp,mq couvre les deux îles), et plusieurs codes pays se lisent comme un OU logique (de,es rend les résultats allemands et espagnols).

countrycodesInstances interrogéesFiltre paysCe que vous obtenez
(absent)les sixaucuntoute la zone couverte
deles sixdeles résultats allemands (seul l'index continental en contient)
eucontinentale seuleaucuntout ce qui est en Europe continentale
eu,decontinentale seuledeles mêmes résultats que de, depuis une instance au lieu de six
frles sixfrtoute la donnée française : métropole et les cinq DROM
fr,eucontinentale seulefrla métropole seule, un sous-ensemble strict de fr
gpGuadeloupe seuleaucuntout ce qui est en Guadeloupe
gp,mqGuadeloupe + Martiniqueaucuntout ce qui est sur ces deux îles
gp,deGuadeloupe seuledevide : vous avez demandé des adresses allemandes en Guadeloupe
eu,zzcontinentale seulezzvide : zz n'est pas un pays couvert

Les codes sont insensibles à la casse, les espaces autour sont ignorés, les doublons sont supprimés et le filtre transmis est trié : eu,de, de,eu et EU, DE sont une seule et même requête.

Un code inconnu ou hors couverture n'est jamais écarté en silence : il reste un filtre et produit une liste vide honnête, jamais une réponse plus large.

Astuce de latence. Si vous savez déjà que le pays est en Europe continentale, préfixer l'alias (eu,de plutôt que de) ramène la diffusion de six instances à une, pour un résultat identique.

/v1/autocomplete sélectionne, mais ne peut pas filtrer

/v1/autocomplete lit les mêmes alias et suit la même règle de sélection : un alias choisit l'index interrogé, et un code ne peut apporter que l'index qu'il désigne ; mélanger les natures n'y élargit pas davantage, tandis qu'un second alias, lui, élargit (gp,mq). gp,fr y restreint à la Guadeloupe exactement comme ici, et fr,eu y interroge l'index continental comme ici.

Ce qui lui manque, c'est la moitié filtre de la composition : son moteur de suggestions n'a aucun filtre pays à transmettre, donc un code qui n'est pas un alias ne sélectionne rien au lieu de restreindre quoi que ce soit. Deux conséquences si vous partagez des valeurs countrycodes entre les endpoints :

  • eu,de y rend toute l'Europe continentale ; ici, l'Allemagne seule.
  • une valeur qui ne contient aucun alias n'y rend aucune suggestion : de comme fr,de reviennent vides, là où ici de rend les résultats allemands et fr,de les résultats français ou allemands.

Filtrez les suggestions côté client sur address.country_code.

Exemples de code​

curl -H "X-Api-Key: gm_YOUR_API_KEY" \
"https://api.geocodeme.net/v1/geocode?q=10%20Rue%20de%20Rivoli%2C%20Paris&limit=3"

Réponse​

info

Toutes les réponses incluent les headers de limitation de débit (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Monthly-Remaining, etc.).

Réponse JSON​

{
"results": [
{
"lat": 48.8566,
"lon": 2.3522,
"name": null,
"display_name": "10, Rue de Rivoli, 4e Arrondissement, Paris, Île-de-France, 75004, France",
"type": "house",
"importance": 0.62,
"address": {
"house_number": "10",
"road": "Rue de Rivoli",
"city": "Paris",
"state": "Île-de-France",
"postcode": "75004",
"country": "France",
"country_code": "fr"
}
}
],
"attribution": "© OpenStreetMap contributors",
"meta": {
"took_ms": 45,
"cache_hit": false
}
}

Réponse GeoJSON​

Avec format=geojson, la réponse est une FeatureCollection GeoJSON standard :

{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [2.3522, 48.8566]
},
"properties": {
"name": null,
"display_name": "10, Rue de Rivoli, 4e Arrondissement, Paris, Île-de-France, 75004, France",
"type": "house",
"importance": 0.62,
"address": {
"house_number": "10",
"road": "Rue de Rivoli",
"city": "Paris",
"state": "Île-de-France",
"postcode": "75004",
"country": "France",
"country_code": "fr"
}
}
}
],
"attribution": "© OpenStreetMap contributors",
"meta": {
"took_ms": 45,
"cache_hit": false
}
}

Schéma​

Réponse de premier niveau​

ChampTypeDescription
resultsarrayTableau d'objets GeocodingResult
attributionstringToujours "© OpenStreetMap contributors"
metaobjectMétadonnées de la requête
meta.took_msintegerTemps de traitement serveur en millisecondes
meta.cache_hitbooleanIndique si la réponse a été servie depuis le cache

GeocodingResult​

ChampTypeDescription
latfloatLatitude du résultat
lonfloatLongitude du résultat
namestring | nullNom propre du lieu, issu du tag OpenStreetMap name (null quand l'objet n'a pas de nom). Voir Le champ name
display_namestringAdresse complète lisible
typestringType de lieu OSM (par ex. house, road, city, building), peut être null
importancefloatScore de pertinence entre 0 et 1, peut être null
addressobjectComposants structurés de l'adresse, peut être null

Le champ name​

name est un champ de premier niveau qui porte le tag OpenStreetMap name de l'objet : "Musée du Louvre", "École élémentaire Jules Ferry", "Boulangerie Chez Momo". Ce n'est pas une composante d'adresse et il n'apparaît jamais dans address.

{
"lat": 48.8606,
"lon": 2.3376,
"name": "Musée du Louvre",
"display_name": "Musée du Louvre, Rue de Rivoli, 1er Arrondissement, Paris, Île-de-France, 75001, France",
"type": "museum",
"importance": 0.83
}
  • null quand l'objet n'a pas de tag name : le cas courant d'une simple rue ou d'une adresse numérotée. Le champ est toujours présent dans la charge utile, avec la valeur JSON null, jamais une chaîne vide.
  • Différent de type, qui porte la catégorie OSM (museum, school, bakery, house) : les deux sont complémentaires, pas redondants.
  • Différent de la tête de display_name. Utilisez name comme titre d'un résultat et display_name comme ligne d'adresse en dessous ; ne découpez jamais display_name sur sa première virgule pour obtenir un titre ; sur 10, Rue de Rivoli, … cela donne 10.

Le même champ, avec le même contrat, est renvoyé par /v1/reverse et /v1/autocomplete. Avec format=geojson, il se trouve dans properties, juste avant display_name.

Address​

Tous les champs sont optionnels et dépendent du lieu :

ChampTypeDescription
house_numberstringNuméro de maison ou de bâtiment
roadstringNom de la rue
citystringNom de la ville
townstringNom de la commune (alternative à city pour les agglomérations plus petites)
villagestringNom du village (alternative à city pour les zones rurales)
countystringComté ou district
statestringÉtat ou région
postcodestringCode postal
countrystringNom du pays
country_codestringCode pays ISO 3166-1 alpha-2 (par ex. fr)

Réponses d'erreur​

Les erreurs les plus courantes pour cet endpoint :

Paramètre q manquant​

{
"error": {
"code": "MISSING_PARAMETER",
"message": "Required parameter 'q' is missing",
"field": "q"
}
}

Clé API invalide​

{
"error": {
"code": "INVALID_API_KEY",
"message": "API key missing or invalid"
}
}

Pour la référence complète des erreurs, consultez Codes d'erreur.