6 Import requalification
nobohan edited this page 5 months ago

Import / requalification de données externes

Introduction

Pour certains programmes, il est possible d'importer des données externes à GeoNature et de pouvoir les requalifier dans l'application GeoNature-citizen. L'intérêt est que cela permet de profiter d'un encodage déjà existant et qu'une partie des propriétés peuvent être directement importées, sans qu'il soit nécessaire de les mesurer/observer. Par exemple, nous avons importé des données issues du géoportail wallon indiquant les arbres remarquables dans le programme "Arbres" de Biommap. Des propriétés telles que la hauteur de l'arbre et la circonférence ont pu être importées. Nous avons également investigué l'import de données OpenStreetMap (arbres et haies).

A terme, cela permettrait d'améliorer des jeux de données existants, d'une part en ajoutant de nouveaux éléments et d'autre part en mettant à jour ou ajoutant des propriétés manquantes d'un élément existant. Biommap permet aussi de qualifier de manière plus riche ces données, notamment en permettant d'y adjoindre des photographies.

Cet import est possible par un script d'import qui génére des instructions SQL à affecter à la base de données, ou bien via l'interface d'administration. Historiquement, le script d'import a été développé en premier (en 2021), mais actuellement, la méthode via l'interface d'administration est à préferer.

Via l'interface admin

Une page spécifique a été mise en place dans l'interface d'admin (page "Téléversement"). Cette page permet de charger un fichier geojson de sites et de les importer dans la table des sites du programme voulu. Des informations peuvent être importées aussi dans la table des visites.

Pour utiliser cette page, suivre les instructions à l'écran. En particulier:

  • il faut disposer d'un fichier geojson valide, et surtout dans le système de projection WGS84 (EPSG:4326).
  • il est possible, mais non obligatoire, de spécifier un nom d'utilisateur pour cet import
  • il est possible, mais non obligatoire, d'ajouter un rapport de visite pour chaque site importé et d'y stocker des informations présentes dans le fichier geojson, via le bouton "Ajouter une correspondance".

Voici un exemple de cette page remplie, avec 3 champs à ajouter dans un rapport de visite:

Exemple de téléversement

Via un script d'import

Fonctionnement du script d'import

La documentation technique pour utiliser le script d'import est écrite dans le dépôt (dossier utils). Le script d'import est un script Python qui doit tourner dans un environnement virtuel. La commande est:

(venv) python3 geojson2sql.py

Ce script doit être adapté pour chaque source de données externes! Le script prend en entrée un fichier géographique de données externes au format geoJSON en WGS84 (EPSG:4326).

Le script génère des instructions SQL pour alimenter deux tables différentes: la table des sites et la table des visites.

Correspondance entre propriétés

Pour chaque propriété intéressante dans la donnée externe que l'on veut importer dans un programme GeoNature-citizen, il faut obligatoirement 1) que cette propriété existe dans le formulaire d'encodage et 2) réaliser une correspondance (mapping) entre le nom de cette propriété dans la couche externe et le nom de la propriété dans le formulaire d'encodage.

Le script d'importation crée des entrées dans la base de données en ne remplissant pas tous les champs de la table. Seuls les champs obligatoires (non-nullables) et les champs informatifs sont remplis.

Certains champs doivent être obligatoirement remplis, comme:

  • les champs id_program et id_type DOIVENT correspondre aux bonnes valeurs ! Le premier champ décidera à quel programme les sites seront rattachés.
  • le champ id_site dans la table sites et visit
  • le champ timestamp_create dans la table sites et visit
  • le champ geom dans la table sites et contient la géométrie.
  • le champ uuid_sinp dans la table sites qui doit être un identifiant unique uuid

D'autres champs non obligatoires mais utiles sont:

  • le champ name qui donnera le nom de l'élément.
  • le champ obs_txt qui donnera le nom de l'utilisateur.

Certaines valeurs dans le script seront converties automatiquement:

  • la valeur "ID" sera convertie en un identifiant unique pour le site qui sera créé en ajoutant 1000000 à l'index de la table geojson.
  • La valeur "UUID" sera convertie en une formule qui crée une valeur uuid.
  • la valeur "POINT" ou "LINESTRING" sera convertie en une formule PostGIS ST_GeomFromText basée sur les coordonnées du fichier geojson
  • la valeur "NOW" sera convertie en une formule qui crée un horodatage (pour les champs timestamp).

Enfin, si les valeurs commencent par properties., elles seront mises en correspondance avec une propriété dans le geojson. Par exemple, properties.COMMENTAIR.

Pour remplir la table des visites, la même fonction est appliquée. Mais il y a une autre convention spéciale qui s'applique pour construire les détails json de la visite : la valeur "JSON" sera convertie en une formule dédiée qui construira l'objet json dans la base de données.

Import des arbres & haies remarquables de Wallonie

La donnée a été téléchargée via la page http://geoportail.wallonie.be/catalogue/d594f5a3-34ac-4cc2-a357-aae5d5263f35.html et convertie au format geoJSON en WGS84 via QGIS.

Pour mémoire, voici la liste des colonnes et la liste des valeurs correspondantes pour la table des sites:

\scriptsize

column_list = ['id_site', 'uuid_sinp', 'id_program', 'name', 'geom', 'timestamp_create', 'id_type', 'obs_txt']
values_list = ['__ID__', '__UUID__', '2', 'properties.SPFR', '__POINT__', '__NOW__', '1', 'géoportail wallon' ]

\normalsize

Voici la liste des colonnes et la liste des valeurs correspondantes pour la table des visites:

\scriptsize

column_list = ['id_site', 'json_data', 'timestamp_create', 'obs_txt']
values_list = ['__ID__', '__JSON__', '__NOW__', 'import']

\normalsize