20 septembre 2024

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;
    }
}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *