From 300bfb9876b18060fd8acef286e774d44cc812e5 Mon Sep 17 00:00:00 2001 From: juminet Date: Wed, 22 Sep 2021 08:34:41 +0000 Subject: [PATCH] =?UTF-8?q?Ajouter=20'Import=20de=20donn=C3=A9es=20externe?= =?UTF-8?q?s=20(requalification)'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...%C3%A9es-externes-%28requalification%29.md | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Import-de-donn%C3%A9es-externes-%28requalification%29.md diff --git a/Import-de-donn%C3%A9es-externes-%28requalification%29.md b/Import-de-donn%C3%A9es-externes-%28requalification%29.md new file mode 100644 index 0000000..e3a6a96 --- /dev/null +++ b/Import-de-donn%C3%A9es-externes-%28requalification%29.md @@ -0,0 +1,71 @@ + +## 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és, 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](http://geoportail.wallonie.be/catalogue/d594f5a3-34ac-4cc2-a357-aae5d5263f35.html) 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 ajoindre des photographies. + +## 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: + +```bash +(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 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: + +``` + 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' ] +``` + + +Voici la liste des colonnes et la liste des valeurs correspondantes pour la table des visites: + +``` + column_list = ['id_site', 'json_data', 'timestamp_create', 'obs_txt'] + values_list = ['__ID__', '__JSON__', '__NOW__', 'import'] + +``` + +