La plateforme adresse.data.gouv.fr est le point d’accès vers :
- la Base Adresse Nationale (BAN), seule base nationale de référence sur l’adresse à faire partie du socle de souveraineté de l’État. Elle est administrée par la Direction du numérique de l’État.
- les outils et services permettant aux communes de mettre à jour leurs adresses et de publier leur Base Adresse Locale.
La documentation de l’API se trouve à cette adresse. https://adresse.data.gouv.fr/api-doc/adresse
Le code se trouve dans : https://github.com/Fangorne/CSharpLibrary/tree/master/GeoServices
Le Modèle
Maintenant, créons une classe de modèle GeoAddress qui recevra l’objet retourné pars notre API Web.
public class GeoAddress { public string type { get; set; } public string version { get; set; } public List<Feature> features { get; set; } public string attribution { get; set; } public string licence { get; set; } public string query { get; set; } public int limit { get; set; } }
La localisation se retrouvera dans la liste des Feature qui est un geojson respectant la spec GeoCodeJSON:
L’attribut type contiendra toujours “Feature”.
public class Feature { public string type { get; set; } public AddressGeometry geometry { get; set; } public Properties properties { get; set; } }
Dans AddressGeometry on a la liste des coordonnées GPS (liste car on peut avoir plusieurs résultats en fonction de l’adresse spécifiée et/ou du paramètre limit).
public class AddressGeometry { public string type { get; set; } public List<double> coordinates { get; set; } }
Dans Properties on a les spécification de l’adresse retournée:
public class Properties { public string label { get; set; } public double score { get; set; } public string housenumber { get; set; } public string id { get; set; } public string type { get; set; } public string name { get; set; } public string postcode { get; set; } public string citycode { get; set; } public double x { get; set; } public double y { get; set; } public string city { get; set; } public string context { get; set; } public double importance { get; set; } public string street { get; set; } }
Les attributs retournés sont :
- id : identifiant de l’adresse (clef d’interopérabilité)
- type : type de résultat trouvé
- housenumber : numéro « à la plaque »
- street : position « à la voie », placé approximativement au centre de celle-ci
- locality : lieu-dit
- municipality : numéro « à la commune »
- score : valeur de 0 à 1 indiquant la pertinence du résultat
- housenumber : numéro avec indice de répétition éventuel (bis, ter, A, B)
- street : nom de la voie
- name : numéro éventuel et nom de voie ou lieu dit
- postcode : code postal
- citycode : code INSEE de la commune
- city : nom de la commune
- district : nom de l’arrondissement (Paris/Lyon/Marseille)
- oldcitycode : code INSEE de la commune ancienne (le cas échéant)
- oldcity : nom de la commune ancienne (le cas échéant)
- context : n° de département, nom de département et de région
- label : libellé complet de l’adresse
- x : coordonnées géographique en projection légale
- y : coordonnées géographique en projection légale
- importance : indicateur d’importance (champ technique)
Appel de l’API
L’adresse de l’API se trouve dans https://api-adresse.data.gouv.fr/search/
public async Task<GeoAddress?> GeoLocalizeAsync(string address, int maxAddress = 1, bool autoCompletion = true) { using var httpSocketHandler = new SocketsHttpHandler(); using var httpClient = new HttpClient(httpSocketHandler); var addressEncoded = HttpUtility.UrlEncode(address); using (var request = new HttpRequestMessage(new HttpMethod("GET"), $"https://api-adresse.data.gouv.fr/search/?q={addressEncoded}&limit={maxAddress}&autocomplete={Convert.ToInt32(autoCompletion)}")) { var response = await httpClient.SendAsync(request); var responseInJson = await response.Content.ReadAsStringAsync(); var root = JsonConvert.DeserializeObject<GeoAddress>(responseInJson); return root; } }