Development #48377
source de donnée geojson: l'id n'est pas forcémetn dans les properties
0%
Description
Actuellement sur une source de donnée GeoJSON, on cherche l'id dans les properties. Mais je vois une source GeoJSON où l'id est à côté :
... 'features': [{'geometry': {'coordinates': [[[3.06497648, 50.62688313], [3.0649757, 50.626935], [3.0649671, 50.62693572], [3.06497648, 50.62688313]]], 'type': 'Polygon'}, 'geometry_name': 'GEOM', 'id': 'V_PARCELLE_ADRESSE.59350000LX0091', 'properties': {'ADRESSE': '19 PL JEANNE D ARC LILLE', 'ALIGNEMENT': 'Non Grevée', 'ASSAINISSEMENT': 'Assainissement Collectif', 'CODE_INSEE': '59350', 'COMMUNE': 'LILLE', 'DENOM_VOIRIE': 'PL JEANNE D ARC', 'NUM_VOIRIE': '19', 'PARCELLE': '91', 'SECTION': 'LX'}, 'type': 'Feature'}],
Ca vient d'un GeoServer donc je pense que c'est valide.
Donc il faudrait sans doute modifier ce bout dans wcs/data_sources.py :
if geojson: id_property = data_source.get('id_property') or 'id' for item in entries.get('features'): if not item.get('properties', {}).get(id_property): < continue < modifier ça item['id'] = item['properties'][id_property] < ...
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a plus de 3 ans
o If a Feature has a commonly used identifier, that identifier SHOULD be included as a member of the Feature object with the name "id", and the value of this member is either a JSON string or number.
— https://tools.ietf.org/html/rfc7946#section-3.2
Mis à jour par Frédéric Péters il y a plus de 3 ans
i.e. regarder à la racine de l'objet uniquement si le nom de la propriété est "id", pour ne pas permettre n'importe quoi.
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Fichier 0001-data-sources-allow-identifier-directly-inside-geojso.patch 0001-data-sources-allow-identifier-directly-inside-geojso.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a plus de 3 ans
J'ai écrit un peu le même patch mais j'en ai profité pour vérifier la présence de l'id et non pas juste un "get" qui élimine aussi le cas "0" (puisque la RFC parle de "number")... on sait jamais. Donc plutôt « 'id' in item » au lieu de « item.get('id') » et de mme avec id_property, c-à-d :
if id_property == 'id' and 'id' in item: # If a Feature has a commonly used identifier, that identifier # SHOULD be included as a member of the Feature object with the # name "id", and the value of this member is either a JSON string # or number. # -- https://tools.ietf.org/html/rfc7946#section-3.2 pass elif id_property in item.get('properties', {}): item['id'] = item['properties'][id_property]
Qu'en penses-tu ?
Mis à jour par Thomas Noël il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
Frédéric Péters a écrit :
Oui, j'ai modifié ma branche en ce sens.
Je pensais qu'on pourrait faire pareil au niveau du « if item.get('properties', {}).get(id_property): », c'est-à-dire le remplacer par « if id_property in item.get('properties', {}): » ? (y'a pas de soucis de "regression" sur l'existant, y'a pas vraiment encore d'existant ici).
Mais bon je valide, tu modifieras ou pas.
Mis à jour par Thomas Noël il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
Thomas Noël a écrit :
Je pensais qu'on pourrait faire pareil au niveau du « if item.get('properties', {}).get(id_property): », c'est-à-dire le remplacer par « if id_property in item.get('properties', {}): » ? (y'a pas de soucis de "regression" sur l'existant, y'a pas vraiment encore d'existant ici).
Et en relisant les tests, je vois qu'on veut éviter id:"" et id:None, donc ne modifions pas cette partie.
"Je pousse pour toi".
commit c57507d9a4e96311b7dbb5bbe6ffb0690bfa6048 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Sat Nov 7 23:42:15 2020 +0100 data sources: allow identifier directly inside geojson feature (#48377)
Mis à jour par Frédéric Péters il y a plus de 3 ans
Mon idée était d'attendre le cycle suivant vu qu'il ne me semblait pas y avoir d'urgence mais donc ok.
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
data sources: allow identifier directly inside geojson feature (#48377)