Projet

Général

Profil

Development #48377

source de donnée geojson: l'id n'est pas forcémetn dans les properties

Ajouté par Thomas Noël il y a plus de 3 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
06 novembre 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Révision c57507d9 (diff)
Ajouté par Frédéric Péters il y a plus de 3 ans

data sources: allow identifier directly inside geojson feature (#48377)

Historique

#1

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

#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.

#3

Mis à jour par Frédéric Péters il y a plus de 3 ans

#4

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 ?

#5

Mis à jour par Frédéric Péters il y a plus de 3 ans

Oui, j'ai modifié ma branche en ce sens.

#6

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.

#7

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)

#8

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.

#10

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

Formats disponibles : Atom PDF