BaseAdresseNationale / api-geocode

API haute performance de géocodage CSV
MIT License
10 stars 3 forks source link

Le format de réponse de l'API Adresse ne respecte pas la spec GeocodeJSON #17

Closed p-j closed 1 year ago

p-j commented 2 years ago

Bonjour,

Dans la documentation de l'API il est fait mention du format de réponse respectant la spec GeocodeJSON.

Pourtant il apparait que ça n'est pas le cas:

{
  "type": "FeatureCollection",
  "version": "draft",
  "features": [/* ... */],
  "attribution": "BAN",
  "licence": "ETALAB-2.0",
  "query": "20 avenue de Ségur, Paris",
  "limit": 5
}

Les propriétés version attribution licence & query devraient être placé sous geocoding que la spec indique comme "REQUIRED":

{
  "type": "FeatureCollection",
  // REQUIRED. Namespace.
  "geocoding": {

    // REQUIRED. A semver.org compliant version number. Describes the version of
    // the GeocodeJSON spec that is implemented by this instance.
    "version": "0.1.0",

    // OPTIONAL. Default: null. The licence of the data. In case of multiple sources,
    // and then multiple licences, can be an object with one key by source.
    "licence": "ETALAB-2.0",

    // OPTIONAL. Default: null. The attribution of the data. In case of multiple sources,
    // and then multiple attributions, can be an object with one key by source.
    "attribution": "BAN",

    // OPTIONAL. Default: null. The query that has been issued to trigger the
    // search.
    "query": "20 avenue de Ségur, Paris",
  },

  features: [/* ... */]
}

il en va de même pour les features dont les properties devraient également être nesté sous un namespace geocoding que la spec indique comme "REQUIRED": Actuellement on reçoit

{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [
      2.308628,
      48.850699
    ]
  },
  "properties": {
    "label": "20 Avenue de Ségur 75007 Paris",
    "score": 0.9720354545454545,
    "housenumber": "20",
    "id": "75107_8909_00020",
    "name": "20 Avenue de Ségur",
    "postcode": "75007",
    "citycode": "75107",
    "x": 649266.35,
    "y": 6861406.23,
    "city": "Paris",
    "district": "Paris 7e Arrondissement",
    "context": "75, Paris, Île-de-France",
    "type": "housenumber",
    "importance": 0.69239,
    "street": "Avenue de Ségur"
  }
}

on devrait avoir:

{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [
      2.308628,
      48.850699
    ]
  },
  "properties": {
    "geocoding": {
      "label": "20 Avenue de Ségur 75007 Paris",
      "score": 0.9720354545454545,
      "housenumber": "20",
      "id": "75107_8909_00020",
      "name": "20 Avenue de Ségur",
      "postcode": "75007",
      "citycode": "75107",
      "x": 649266.35,
      "y": 6861406.23,
      "city": "Paris",
      "district": "Paris 7e Arrondissement",
      "context": "75, Paris, Île-de-France",
      "type": "housenumber",
      "importance": 0.69239,
      "street": "Avenue de Ségur"
    }
  }
}

En l'état, la réponse est compatible GeoJSON mais ne respecte pas la spec GeocodeJSON.

Est-ce qu'il y a une option particulière à passer pour recevoir le format GeocodeJSON ou est-ce que l'API ne répond pas à ce format et cette information est erronée ?

p-j commented 2 years ago

A toutes fins utiles, je viens de publier un adapteur qui permet de convertir la réponse de l'API au format GeocodeJSON: @p-j/geocodejson-ban.

jdesboeufs commented 1 year ago

La spec GeocodeJSON a été conçue en parallèle de cet outil, il y a plusieurs années. Il avait été décidé d'abandonner le noeud geocoding qui compliquait la réutilisation des données. Malheureusement personne n'a mis à jour le DRAFT.

p-j commented 1 year ago

Certes, mais force est de constater que la doc pointe vers une (version) de spec qui ne correspond pas à ce qui est implémenté. Donc si comme moi on implémente la spec tel qu'elle existe, l'API n'est pas compatible contrairement à ce qui est mis en avant.

L'issue est close sans correction, et donc le problème demeure. Deux voies de résolutions possible: