Open jpm-cbna opened 3 years ago
Voici un fichier avec les champs que l'export et téléchargement de données d'observation doit contenir. L'objectif est:
Ceci est d'autant plus important si l'utilisateur est contraint par l'interface (carto et liste) dans l'accès à l'information.
Dans ce fichier Excel:
En vert: les colonnes à ajouter qui sont disponibles. En rouge: des infos à ajouter mais qui ne semblent pas être dans la liste, ou que je n’ai pas identifié dedans. Pour la plupart, ces informations ont été jugées indispensables par les utilisateurs. A concerter.
J’ai essayé de faire le parallèle avec la liste des champs disponibles.
Concernant les champs disponibles dans les téléchargements de la Synthse (= Observations), je propose pour le départ de ne proposer que le stricte nécessaire. Les performances risquant de ne pas être au rendez vous, je propose de mettre dans un premier temps ceci:
EXPORT_COLUMNS = [
"uuid_perm_sinp",
"uuid_perm_grp_sinp",
"jdd_nom",
"jdd_uuid",
"niveau_validation",
"validateur",
"observateurs",
"cd_nom",
"nom_cite",
"nombre_min",
"nombre_max",
"date_debut",
"heure_debut",
"date_fin",
"heure_fin",
"geojson_4326",
"precision_geographique",
"niveau_precision_diffusion",
]
· Préférer le nom valide et le cd_ref à la place de "cd_nom", "nom_cite",
Dans prochaine mise à jour, ajouter + renommer certains champs. A discuter tous ensemble car certains champs disponibles aujourd'hui sont peu clairs et il manque beaucoup de champs très utilisés pour la faune (ça doit être le cas pour la flore aussi j'imagine).
Au 22 juillet 2021, les champs utilisés pour l'export sont:
EXPORT_COLUMNS = [
"uuid_perm_sinp",
"uuid_perm_grp_sinp",
"ca_nom",
"jdd_nom",
"jdd_uuid",
"niveau_validation",
"validateur",
"observateurs",
"cd_ref",
"nom_valide",
"nombre_min",
"nombre_max",
"date_debut",
"date_fin",
"geojson_4326",
"precision_geographique",
"niveau_precision_diffusion",
]
À tester avec la nouvelle config ci-dessous et la suppression du champ "communes
" dans la vue d'export:
EXPORT_COLUMNS = [
"uuid_perm_sinp",
"uuid_perm_grp_sinp",
"ca_nom", --> SUPPRIMER
"jdd_nom",
"jdd_uuid",
"niveau_validation",
"validateur",
"observateurs",
"determinateurs", --> AJOUTER
"cd_ref",
"nom_valide",
"nom_vernaculaire", --> AJOUTER
"regne", --> AJOUTER (supprimable pour gagner en perf)
"classe", --> AJOUTER (supprimable pour gagner en perf)
"ordre", --> AJOUTER (supprimable pour gagner en perf)
"famille", --> AJOUTER (supprimable pour gagner en perf)
"nombre_min",
"nombre_max", --> GARDER
"date_debut",
"date_fin", --> SUPPRIMER
"geojson_4326",
"x_centroid_4326", --> AJOUTER (si pas de problème avec le floutage)
"y_centroid_4326", --> AJOUTER (si pas de problème avec le floutage)
"precision_geographique",
"niveau_precision_diffusion", --> SUPPRIMER
"nature_objet_geo", --> AJOUTER
"alti_min", --> AJOUTER
"technique_observation", --> AJOUTER (supprimable pour gagner en perf)
"stade_vie", --> AJOUTER (supprimable pour gagner en perf)
"biologique_statut", --> AJOUTER (supprimable pour gagner en perf)
"sexe", --> AJOUTER (supprimable pour gagner en perf)
"comportement", --> AJOUTER (supprimable pour gagner en perf)
"statut_source", --> AJOUTER (supprimable pour gagner en perf)
"reference_biblio", --> AJOUTER (supprimable pour gagner en perf)
]
Ordre de préférence de suppression des champs si problème perf ci-dessous. Supprimer les champs nomenclature en tenant compte du niveau de remplissage du champ dans la base:
communes
" et "nom_lieu
" ne peuvent pas être affichés pour les données sensibles car ils peuvent apporter des informations de localisation. Il est nécessaire de réaliser des développements pour rendre conditionnel leur affichage en fonction des permissions d'accès de l'utilisateur... geojson_4326
" car nous devons gérer des polygones (maille de floutage) et des points. Nous essayerons d'ajouter les champs "x_centroid_4326
" et "y_centroid_4326
" si cela ne pose pas de problème avec le floutage.comment_releve
" et "comment_occurrence
" pouvant indiquer des informations de localisation, nous ne les affichons pas. Leur affichage doit être rendu conditionnel comme pour les champs "communes
" et "nom_lieu
".gn_synthese.v_synthese_for_export
. Comme nous n'affichons pas le champ "communes
" dans l'export, nous devrions le supprimer de la vue pour gagner en performance !Bilan des échanges derniers : "date_fin", --> A garder
Pourquoi le champ commune ne peux pas être indiqué? On a pas de floutage au département donc cette info peut être renseignée.
A quoi correspond : "x_centroid_4326", et "y_centroid_4326", Si cela peut renvoyer à une donnée précise, est-ce qu'on aura pas le même souci qu'avec l'info sur le Lieu-dit / comment_occurrence ou comment_releve
precision_localisation : est-il possible de pourvoir avoir des correspondances et d'indiquer en toutes lettre "Commune" Lieu-dit" ou "Précis"?
Besoin de la réponse sur le changement de nom des champs
A suivre
Pourquoi le champ commune ne peux pas être indiqué? On a pas de floutage au département donc cette info peut être renseignée.
Ok, si nous pouvons l'indiqué systématiquement, je peux faire un test pour le récupérer. Mais je crains que cela ralentisse fortement le téléchargement. Je vais faire un test.
A quoi correspond : "x_centroid_4326", et "y_centroid_4326", Si cela peut renvoyer à une donnée précise, est-ce qu'on aura pas le même souci qu'avec l'info sur le Lieu-dit / comment_occurrence ou comment_releve
Cela correspond au X et au Y du centroïde de la géométrie du champ "geojson_4326". J'ai déjà codé la possibilité de récupérer cette info en tenant compte du floutage. Mais il faut que je teste que cela fonctionne bien. Je ne garantie donc pas que cela fonctionne bien et surtout de façon performante. Cela risque de ralentir le téléchargement. Je vais faire un test.
precision_localisation : est-il possible de pourvoir avoir des correspondances et d'indiquer en toutes lettre "Commune" Lieu-dit" ou "Précis"?
Le champ "precision_localisation" contient un nombre de mètre correspondant normalement au rayon moyen en mètre de la géométrie de l'observation (si c'est un polygone) ou à la précision moyenne de l'outil utilisé pour déterminer le point de l'observation (carte, GPS). Du coup, je peux envisager d'établir une correspondance. Par exemple, de 0 à 10m => "précis", de 11m à 100m => "lieudit", 101m et plus => "Commune"... Dans ce cas là, il faut me fournir les correspondances pour tester.
Besoin de la réponse sur le changement de nom des champs
Camille me confirme que le changement de nom est possible: http://docs.geonature.fr/admin-manual.html#module-synthese Merci de me transmettre la correspondance. Je vais poster ci-dessous la nouvelle config et le SQL de la vue d'export correspondant à tous ces changements. Vous pouvez vous baser sur les noms des champs du paramètre "EXPORT_COLUMNS" pour m'indiquer la correspondance avec le nouveau nom des champs à fournir. Notez bien que si le nom fait plus de 10 caractères, il sera tronqués dans le fichier shapefile.
Voici le code de la vue de l'export et le paramètre de config actuellement utilisé (au 30 juillet 2021):
Le script SQL de mise à jour de la vue:
BEGIN;
DROP VIEW gn_synthese.v_synthese_for_export ;
CREATE OR REPLACE VIEW gn_synthese.v_synthese_for_export
AS SELECT s.id_synthese,
s.unique_id_sinp AS uuid_perm_sinp,
s.unique_id_sinp_grp AS uuid_perm_grp_sinp,
af.acquisition_framework_name AS ca_nom,
d.id_dataset AS jdd_id,
d.unique_dataset_id AS jdd_uuid,
d.dataset_name AS jdd_nom,
n21.label_default AS niveau_validation,
s.validator AS validateur,
s.observers AS observateurs,
t.cd_ref,
t.nom_valide,
s.count_min AS nombre_min,
s.count_max AS nombre_max,
s.date_min::date AS date_debut,
s.date_max::date AS date_fin,
st_asgeojson(s.the_geom_4326) AS geojson_4326,
st_asgeojson(s.the_geom_local) AS geojson_local,
s."precision" AS precision_geographique,
n9.label_default AS niveau_precision_diffusion,
s.id_digitiser,
s.id_nomenclature_sensitivity,
s.id_nomenclature_diffusion_level
FROM gn_synthese.synthese s
JOIN taxonomie.taxref t ON t.cd_nom = s.cd_nom
JOIN gn_meta.t_datasets d ON d.id_dataset = s.id_dataset
JOIN gn_meta.t_acquisition_frameworks af ON d.id_acquisition_framework = af.id_acquisition_framework
LEFT JOIN ref_nomenclatures.t_nomenclatures n9 ON s.id_nomenclature_diffusion_level = n9.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures n21 ON s.id_nomenclature_valid_status = n21.id_nomenclature;
COMMIT;
Le paramètre de config:
EXPORT_COLUMNS = [
"uuid_perm_sinp",
"uuid_perm_grp_sinp",
"ca_nom",
"jdd_nom",
"jdd_uuid",
"niveau_validation",
"validateur",
"observateurs",
"cd_ref",
"nom_valide",
"nombre_min",
"nombre_max",
"date_debut",
"date_fin",
"geojson_4326",
"precision_geographique",
"niveau_precision_diffusion",
]
La vue et le paramètre correspondant pour les futures modifications envisagées sur les téléchargements de la Synthese:
Le script SQL de mise à jour de la vue:
BEGIN;
DROP VIEW gn_synthese.v_synthese_for_export ;
CREATE OR REPLACE VIEW gn_synthese.v_synthese_for_export AS
SELECT s.id_synthese,
s.unique_id_sinp AS uuid_perm_sinp,
s.unique_id_sinp_grp AS uuid_perm_grp_sinp,
d.dataset_name AS jdd_nom,
d.unique_dataset_id AS jdd_uuid,
n21.label_default AS niveau_validation,
s.validator AS validateur,
s.observers AS observateurs,
s.determiner AS determinateur,
t.cd_ref,
t.nom_valide,
t.nom_vern as nom_vernaculaire,
t.regne AS regne,
t.classe AS classe,
t.ordre AS ordre,
t.famille AS famille,
s.count_min AS nombre_min,
s.count_max AS nombre_max,
s.date_min::date AS date_debut,
s.date_max::date AS date_fin,
public.st_asgeojson(s.the_geom_4326) AS geojson_4326,-- Use for SHP export and data blurring
st_x(st_transform(st_centroid(s.the_geom_point), 4326)) AS x_centroid_4326,
st_y(st_transform(st_centroid(s.the_geom_point), 4326)) AS y_centroid_4326,
s."precision" AS precision_geographique,
n1.label_default AS nature_objet_geo,
communes AS communes,
s.altitude_min AS alti_min,
n3.label_default AS technique_observation,
n10.label_default AS stade_vie,
n5.label_default AS biologique_statut,
n11.label_default AS sexe,
n20.label_default AS comportement,
n17.label_default AS statut_source,
s.reference_biblio AS reference_biblio,
-- Fields use in internal
d.id_dataset AS jdd_id, -- Use for CRUVED
s.id_digitiser AS id_digitiser, -- Use for CRUVED
public.ST_asgeojson(s.the_geom_local) AS geojson_local,-- Use for SHP export
s.id_nomenclature_sensitivity, -- Use for data blurring
s.id_nomenclature_diffusion_level -- Use for data blurring
FROM gn_synthese.synthese AS s
JOIN taxonomie.taxref AS t ON t.cd_nom = s.cd_nom
JOIN gn_meta.t_datasets AS d ON d.id_dataset = s.id_dataset
LEFT JOIN LATERAL (
SELECT id_synthese, string_agg(DISTINCT concat(a_1.area_name, ' (', a_1.area_code, ')'), ', '::text) AS communes
FROM gn_synthese.cor_area_synthese cas
JOIN ref_geo.l_areas a_1 ON cas.id_area = a_1.id_area
JOIN ref_geo.bib_areas_types ta ON ta.id_type = a_1.id_type AND ta.type_code ='COM'
WHERE cas.id_synthese = s.id_synthese
GROUP BY id_synthese
) sa ON true
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n1 ON s.id_nomenclature_geo_object_nature = n1.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n3 ON s.id_nomenclature_obs_technique = n3.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n5 ON s.id_nomenclature_bio_status = n5.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n10 ON s.id_nomenclature_life_stage = n10.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n11 ON s.id_nomenclature_sex = n11.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n17 ON s.id_nomenclature_source_status = n17.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n20 ON s.id_nomenclature_behaviour = n20.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n21 ON s.id_nomenclature_valid_status = n21.id_nomenclature ;
COMMIT;
Le paramètre de config:
EXPORT_COLUMNS = [
"uuid_perm_sinp",
"uuid_perm_grp_sinp",
"jdd_nom",
"jdd_uuid",
"niveau_validation",
"validateur",
"observateurs",
"determinateur",
"cd_ref",
"nom_valide",
"nom_vernaculaire",
"regne",
"classe",
"ordre",
"famille",
"nombre_min",
"nombre_max",
"date_debut",
"date_fin",
"geojson_4326",
"x_centroid_4326",
"y_centroid_4326",
"precision_geographique",
"nature_objet_geo",
"communes",
"alti_min",
"technique_observation",
"stade_vie",
"biologique_statut",
"sexe",
"comportement",
"statut_sourcestatut_source",
"reference_biblio",
]
Afin de pouvoir prendre en compte les champs "x_centroid_4326
" et "y_centroid_4326
" dans l'export, il est nécessaire de mettre à jour le code du fichier geonature/backend/geonature/core/gn_synthese/routes.py
en ajoutant les entrées ci-dessous au paramètre geom_fields
de la classe DataBlurring
:
{
"output_field": 'x_centroid_4326',
"compute": "x",
},
{
"output_field": 'y_centroid_4326',
"compute": "y",
},
WARNING : vérifier si pour X et Y nous devons utiliser the_geom_point
ou the_geom_4326
.
Test en local sur copie de la base de production du 27 juillet. Machine hébergeant la base de données Postgresql 12 sur un disque SSD NVME.
Utilisateur n'ayant aucune permission, Quercus pubescens sur toute la région.
Utilisateur n'ayant aucune permission, Quercus pubescens + Vanessa cardui sur toute la région.
Utilisateur n'ayant aucune permission, communes de Gap + Vallouise-Pelvoux.
Je me suis penchée sur ces questions la semaine dernière mais je me suis heurtée en l’absence de Géraldine au fait de ne pas revenir sur des choix déjà réalisés, j’attends donc son retour pour vous faire un point précis.
Concernant la mention des communes dans les exports et téléchargement, est-ce que la solution pourrait être de mettre cette information en base de données pour que ce champs ne soit pas calculé ?
Je pose cette question car c’est ainsi que nous traitons les données dans silene_Admin avec des tests de cohérence qui script l’info envoyée par le producteur (commune/x_occurence/y_occurence) donc le travail est fait de notre côté.
Voici une proposition commencée (nous avons indiqué les champs non prioritaires pour la faune à ce stade, les éléments à modifier et les propositions de champs à ajouter).
DROP VIEW gn_synthese.v_synthese_for_export ;
CREATE OR REPLACE VIEW gn_synthese.v_synthese_for_export AS SELECT s.id_synthese,
s.unique_id_sinp AS uuid_perm_sinp,
s.unique_id_sinp_grp AS uuid_perm_grp_sinp,
d.dataset_name AS jdd_nom,
d.unique_dataset_id AS jdd_uuid,
n21.label_default AS niveau_validation **Non prioritaire pour le moment (pour la faune en tous cas)**
s.validator AS validateur **Non prioritaire pour le moment (pour la faune en tous cas)**
s.observers AS observateurs,
s.determiner AS determinateur **Non prioritaire pour le moment**
t.cd_ref,
t.nom_valide,
t.nom_vern as nom_vernaculaire,
t.regne AS regne **Non prioritaire pour le moment**
t.classe AS classe,
t.ordre AS ordre,
t.famille AS famille, **Non prioritaire pour le moment**
s.count_min AS nombre_min,
s.count_max AS nombre_max,
s.date_min::date AS date_debut,
s.date_max::date AS date_fin,
public.st_asgeojson(s.the_geom_4326) AS geojson_4326,-- Use for SHP export and data blurring **Inexpoitable pour les personnes qui utilisent le csv. Pour les utilisateurs du .shp peuvent obtenir le X et Y dans un tableur par ajout de colonne et calcul.**
s."precision" AS precision_geographique **Pour la Faune : 25 = précis ; 250 = Lieu-dit ; rien = communal ; Il faudra prévoir le cas pour futur mailles INPN (5x5 et 10x10)… Pour la flore ?**
n1.label_default AS nature_objet_geo **Pour la faune = Non prioritaire, à supprimer ? D’ailleurs, erreurs à corriger dans la future mise à jour : Donnée précise = St ; le reste = In**
s.altitude_min AS alti_min,
n3.label_default AS technique_observation,
n10.label_default AS stade_vie,
n5.label_default AS biologique_statut **remplacer par statut_biologique**
n11.label_default AS sexe,
n20.label_default AS comportement,
n17.label_default AS statut_source **remplacer par type_source**
s.reference_biblio AS reference_biblio **Non prioritaire pour le moment **
AJOUTER : code_source ou id_source AS Fournisseur (référentiel à faire)
**Il faudrait ajouter les champs suivants : ils seront vidés par les administrateurs de données avant transfert vers GN tant que les DS ne sont pas traitées. AJOUTER : « Commentaire_relevé » AJOUTER : « Commentaire_taxon » AJOUTER : Place name AS « nom_lieu » Pour « nom_lieu » : l’administrateur de données renseignera le nom de la commune à minima ou « commune – lieu-dit » si le lieu-dit est précisé : Cela permet d’avoir aussi la commune renseignée manuellement (et plus calculée).
QUID des deux champs X et Y : peut-on les remplir automatiquement lors des MAJ ?
Les champs suivants ne sont pas indispensables aujourd’hui mais à prévoir quand les données publiques et sensibles seront traitées. Niveau_precision_diffusion à venir : pour le moment il est indiqué « Maille ». A terme il faudra faire figurer « flouté » ou « non flouté » Niveau_sensibilité : à venir**
Champs à supprimer:
niveau_validation
validateur
determinateur
regne
famille
reference_biblio
Changement de nom:
biologique_statut
devient statut_biologique
statut_source
devient type_source
Ajouter les champs (voir commentaire précédent):
fournisseur
Ajouter les champs suivant uniquement lorsque le traitement des données et la mise à jour faite dans la base (voir commentaire précédent):
commentaire_releve
commentaire_occurence
nom_lieu
niveau_sensibilite
niveau_precision_diffusion
Discussion nécessaire sur les champs:
geojson_4326
x_centroid_4326
y_centroid_4326
precision_geographique
nature_objet_geo
Deux points à trancher :
Petit retour d'expérience concernant l'utilisation du X Y : lors des formations Végétal local que nous pouvons donner, les personnes nous demandent souvent comment récupérer les coordonnées X Y.
Il s'agit d'un public qui n'est pas forcément utilisateur des SIG type MapInfo mais qui utilise plus facilement les plateformes des SINP régionaux. Ces personnes n'ont donc pas toujours la possibilité de passer par les SIG pour récupérer les X Y et les cherchent directement sur Silene.
Par contre, je ne saurais pas dire si cela concerne des dizaines ou des centaines de personnes. Mais ce retour est fréquent.
Merci Lucile pour ce retour. J'avais eu les mêmes échos mais sans comprendre réellement comment ils utilisent le X Y (pour le rentrer directement dans un GPS de terrain?) Sais-tu comment ils l'utilisent ?
Oui, je pense qu'ils doivent rentrer les coordonnées dans un GPS ou peut-être sur des outils comme Géoportail. La question a été posée suffisamment souvent pour ne pas être anodine je pense.
Oui effectivement, je pense que le X et Y est utile en direct pour plusieurs utilisations et éviter de passer par un SIG (pour ceux qui savent le faire…)
j’en oublie sans doute…
Idem en faune
Deux points à trancher :
* le X Y est-il indispensable sachant qu'il est possible d'importer un csv ou un shp dans un SIG et d'ouvrir la couche en se basant sur le champ geojson ? Dans quel cas l'utilisateur utilise-t-il directement le X Y depuis le csv ?
Donc oui :) voir échanges ci-avant.
* Précision : les champs precision_geographique et nature_objet_geo (à condition qu'il soit bien rempli) renseignent de manière pertinente sur la précision de la donnée. **Nous proposons de les conserver** et d'améliorer leur remplissage pour les prochaines mises à jour. Pour les données flore du CBNA, precision_geographique correspond à la précision du GPS pour un pointage précis ou au rayon moyen de la commune quand la donnée est à la commune (et une estimation de la précision basée sur les infos de localisation quand on a une précision infra communale, pas de précision pré-définie comme c'est le cas pour la faune)
Ok pour nature_objet_geo (on comprend que ce soit plus important pour la flore !) Pour precision_geographique nous souhaitons que les chiffres soient remplacés par Précis/Lieu-dit/Commune via un tableau de correspondance (qui pourra reprendre vos calculs si vous voulez) si le format peut être du texte.
On propose de mettre en production le nouveau format d'export incluant le X Y. Pour le champ precision_geographique, on vous propose d'en reparler rapidement entre les 3 administrateurs de données et de le faire évoluer dans un 2nd temps. Est-ce que c'est ok pour vous ?
Bonjour,
Oui, ok si ça se fait vite après coup, ça marche 😊 On est bon pour le reste au niveau de l’export ?
Je suis toujours en attente pour ces histoires de statut (surtout pour l’aspect articles à prendre en compte).
Donc si j’ai bien compris :
Oui sur le reste de l'export, c'est ok. je reprends et mets à jour les éléments listés plus haut par JPM :
Champs à supprimer:
niveau_validation
validateur
determinateur
regne
famille
reference_biblio
Changement de nom:
biologique_statut
devientstatut_biologique
statut_source
devienttype_source
Ajouter les champs (voir commentaire précédent):
fournisseur
Ajouter les champs suivant uniquement lorsque le traitement des données et la mise à jour faite dans la base (voir commentaire précédent):
commentaire_releve
commentaire_occurence
nom_lieu
niveau_sensibilite
niveau_precision_diffusion
Après discussion, on conserve les champs:
geojson_4326
x_centroid_4326
y_centroid_4326
precision_geographique
(discussion à prévoir rapidement entre les deux CBN et le CEN)nature_objet_geo
(discussion à prévoir rapidement entre les deux CBN et le CEN)
Pour la MAJ des données : on attend votre feu vert suite au rapport de corrections envoyé par Jean-Pascal à Paul
La vue et le paramètre correspondant aux modifications proposées dans le commentaire précédent:
the_geom_point
ou the_geom_4326
. => the_geom_point
peut être utilisé pour la vue car le code du web service d'export (classe DataBlurring
) se charge de remplacer le contenu des champs x_centroid_4326
et y_centroid_4326
par leur équivalant flouté.x_centroid_4326
et y_centroid_4326
sont bien floutés correctement.Le script SQL de mise à jour de la vue:
BEGIN;
DROP VIEW gn_synthese.v_synthese_for_export ;
CREATE OR REPLACE VIEW gn_synthese.v_synthese_for_export AS
SELECT s.id_synthese,
s.unique_id_sinp AS uuid_perm_sinp,
s.unique_id_sinp_grp AS uuid_perm_grp_sinp,
sd.dataset_name AS jdd_nom,
sd.unique_dataset_id AS jdd_uuid,
sd.organisms AS fournisseur,
s.observers AS observateurs,
t.cd_ref,
t.nom_valide,
t.nom_vern as nom_vernaculaire,
t.classe AS classe,
t.ordre AS ordre,
s.count_min AS nombre_min,
s.count_max AS nombre_max,
s.date_min::date AS date_debut,
s.date_max::date AS date_fin,
public.st_asgeojson(s.the_geom_4326) AS geojson_4326,-- Use for SHP export and data blurring
st_x(st_transform(st_centroid(s.the_geom_point), 4326)) AS x_centroid_4326,
st_y(st_transform(st_centroid(s.the_geom_point), 4326)) AS y_centroid_4326,
s."precision" AS precision_geographique,
n1.label_default AS nature_objet_geo,
communes AS communes,
s.altitude_min AS alti_min,
n3.label_default AS technique_observation,
n10.label_default AS stade_vie,
n5.label_default AS statut_biologique,
n11.label_default AS sexe,
n20.label_default AS comportement,
n17.label_default AS type_source,
-- Fields use in internal
sd.id_dataset AS jdd_id, -- Use for CRUVED
s.id_digitiser AS id_digitiser, -- Use for CRUVED
public.ST_asgeojson(s.the_geom_local) AS geojson_local,-- Use for SHP export
s.id_nomenclature_sensitivity, -- Use for data blurring
s.id_nomenclature_diffusion_level -- Use for data blurring
FROM gn_synthese.synthese AS s
JOIN taxonomie.taxref AS t ON t.cd_nom = s.cd_nom
LEFT JOIN LATERAL (
SELECT
id_synthese,
string_agg(DISTINCT concat(a_1.area_name, ' (', a_1.area_code, ')'), ', '::text) AS communes
FROM gn_synthese.cor_area_synthese AS cas
JOIN ref_geo.l_areas AS a_1
ON cas.id_area = a_1.id_area
JOIN ref_geo.bib_areas_types AS ta
ON ta.id_type = a_1.id_type AND ta.type_code ='COM'
WHERE cas.id_synthese = s.id_synthese
GROUP BY id_synthese
) AS sa ON true
LEFT JOIN LATERAL (
SELECT
td.id_dataset,
td.dataset_name,
td.unique_dataset_id,
string_agg(DISTINCT bo.nom_organisme, ', '::text) AS organisms
FROM gn_meta.t_datasets AS td
LEFT JOIN gn_meta.cor_dataset_actor AS cad
ON (
cad.id_dataset = td.id_dataset
AND (
cad.id_nomenclature_actor_role = ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR'::character varying, '5'::character varying)
OR cad.id_nomenclature_actor_role = ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR'::character varying, '6'::character varying)
)
)
LEFT JOIN utilisateurs.bib_organismes bo
ON bo.id_organisme = cad.id_organism
WHERE td.id_dataset = s.id_dataset
GROUP BY td.id_dataset
) AS sd ON true
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n1 ON s.id_nomenclature_geo_object_nature = n1.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n3 ON s.id_nomenclature_obs_technique = n3.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n5 ON s.id_nomenclature_bio_status = n5.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n10 ON s.id_nomenclature_life_stage = n10.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n11 ON s.id_nomenclature_sex = n11.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n17 ON s.id_nomenclature_source_status = n17.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n20 ON s.id_nomenclature_behaviour = n20.id_nomenclature ;
COMMIT;
Le paramètre de config:
EXPORT_COLUMNS = [
"uuid_perm_sinp",
"uuid_perm_grp_sinp",
"jdd_nom",
"jdd_uuid",
"fournisseur",
"observateurs",
"cd_ref",
"nom_valide",
"nom_vernaculaire",
"classe",
"ordre",
"nombre_min",
"nombre_max",
"date_debut",
"date_fin",
"geojson_4326",
"x_centroid_4326",
"y_centroid_4326",
"precision_geographique",
"nature_objet_geo",
"communes",
"alti_min",
"technique_observation",
"stade_vie",
"statut_biologique",
"sexe",
"comportement",
"type_source",
]
Afin de pouvoir prendre en compte les champs "x_centroid_4326
" et "y_centroid_4326
" dans l'export, il est nécessaire de mettre à jour le code du fichier geonature/backend/geonature/core/gn_synthese/routes.py
en ajoutant les entrées ci-dessous au paramètre geom_fields
de la classe DataBlurring
:
{
"output_field": 'x_centroid_4326',
"compute": "x",
},
{
"output_field": 'y_centroid_4326',
"compute": "y",
},
Évolutions à prévoir pour les informations relatives à la précision de l'information :
Suite à échanges avec utilisateurs entomologistes, il sera nécessaire d'ajouter la colonne Famille... Pour les ordres avec beaucoup de familles : impossible de faire des tris pour classer les espèces Passer par les paramètres avancés = impossible aussi car trop de familles...
Validé en réunion technique du 27/01 : Ajouter un champ "additionnal_data" pouvant prendre les valeurs "donnée confidentielle" / "donnée non confidentielle" Donnée confidentielle = donnée privée dont niveau diffusion est différent de 5 ou donnée sensible dont valeur de sensibilité est différent de 0. Champ confidential, nommé confidentialité dans les exports Ajouter (JPM) ce format dans le WIKI sur le modèle de ce qui a été fait pour "communeInseeCode" et "departementInseeCode" Ajouter ce champ dans les exports Ajouter également dans les exports le champ niveau_sensibilite
suite à notreé change de cet aprem, j'ajoute le besoin du champ statut_observation
pour détecter les données d'absence
Note : l'ordre d'affichage des colonnes dans le fichier CSV dépend de l'ordre des colonnes dans la vue et non de l'ordre des champ dans le paramètre de config...
Le script SQL de mise à jour de la vue:
BEGIN;
DROP VIEW gn_synthese.v_synthese_for_export ;
CREATE OR REPLACE VIEW gn_synthese.v_synthese_for_export AS
SELECT s.id_synthese,
s.unique_id_sinp AS uuid_perm_sinp,
s.unique_id_sinp_grp AS uuid_perm_grp_sinp,
sd.dataset_name AS jdd_nom,
sd.unique_dataset_id AS jdd_uuid,
sd.organisms AS fournisseur,
s.observers AS observateurs,
t.cd_ref,
t.nom_valide,
t.nom_vern AS nom_vernaculaire,
t.classe AS classe,
t.famille AS famille,
t.ordre AS ordre,
s.count_min AS nombre_min,
s.count_max AS nombre_max,
s.date_min::date AS date_debut,
s.date_max::date AS date_fin,
st_asgeojson(s.the_geom_4326) AS geojson_4326, -- Use for SHP export and data blurring
st_x(st_transform(st_centroid(s.the_geom_point), 4326)) AS x_centroid_4326,
st_y(st_transform(st_centroid(s.the_geom_point), 4326)) AS y_centroid_4326,
s."precision" AS precision_geographique,
sa.communes,
s.altitude_min AS alti_min,
n3.label_default AS technique_observation,
n10.label_default AS stade_vie,
n5.label_default AS statut_biologique,
n11.label_default AS sexe,
n20.label_default AS comportement,
n17.label_default AS type_source,
s.additional_data ->> 'precisionLabel' AS type_precision,
CASE
WHEN ns.cd_nomenclature = '0' THEN 'donnée non sensible'
WHEN s.id_nomenclature_sensitivity IS NULL THEN ''
ELSE 'donnée sensible'
END AS sensibilite,
CASE
WHEN s.additional_data ->> 'confidential' = 'true' THEN 'donnée confidentielle'
ELSE 'donnée non confidentielle'
END AS confidentialite,
-- Fields use in internal
sd.id_dataset AS jdd_id, -- Use for CRUVED
s.id_digitiser AS id_digitiser, -- Use for CRUVED
st_asgeojson(s.the_geom_local) AS geojson_local, -- Use for SHP export
s.id_nomenclature_sensitivity, -- Use for data blurring
s.id_nomenclature_diffusion_level -- Use for data blurring
FROM gn_synthese.synthese AS s
JOIN taxonomie.taxref t ON t.cd_nom = s.cd_nom
LEFT JOIN LATERAL (
SELECT
cas.id_synthese,
string_agg(DISTINCT concat(a_1.area_name, ' (', a_1.area_code, ')'), ', '::text) AS communes
FROM gn_synthese.cor_area_synthese AS cas
JOIN ref_geo.l_areas AS a_1
ON cas.id_area = a_1.id_area
JOIN ref_geo.bib_areas_types AS ta
ON ta.id_type = a_1.id_type AND ta.type_code::text = 'COM'::text
WHERE cas.id_synthese = s.id_synthese
GROUP BY cas.id_synthese
) AS sa ON true
LEFT JOIN LATERAL (
SELECT
td.id_dataset,
td.dataset_name,
td.unique_dataset_id,
string_agg(DISTINCT bo.nom_organisme::text, ', '::text) AS organisms
FROM gn_meta.t_datasets AS td
LEFT JOIN gn_meta.cor_dataset_actor cad
ON (
cad.id_dataset = td.id_dataset
AND (
cad.id_nomenclature_actor_role = ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR'::character varying, '5'::character varying)
OR cad.id_nomenclature_actor_role = ref_nomenclatures.get_id_nomenclature('ROLE_ACTEUR'::character varying, '6'::character varying)
)
)
LEFT JOIN utilisateurs.bib_organismes bo
ON bo.id_organisme = cad.id_organism
WHERE td.id_dataset = s.id_dataset
GROUP BY td.id_dataset
) sd ON true
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n3 ON s.id_nomenclature_obs_technique = n3.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n5 ON s.id_nomenclature_bio_status = n5.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n10 ON s.id_nomenclature_life_stage = n10.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n11 ON s.id_nomenclature_sex = n11.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n17 ON s.id_nomenclature_source_status = n17.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS n20 ON s.id_nomenclature_behaviour = n20.id_nomenclature
LEFT JOIN ref_nomenclatures.t_nomenclatures AS ns ON s.id_nomenclature_sensitivity = ns.id_nomenclature ;
COMMIT;
Le paramètre de config:
EXPORT_COLUMNS = [
"uuid_perm_sinp",
"uuid_perm_grp_sinp",
"jdd_nom",
"jdd_uuid",
"fournisseur",
"observateurs",
"cd_ref",
"nom_valide",
"nom_vernaculaire",
"classe",
"famille",
"ordre",
"nombre_min",
"nombre_max",
"date_debut",
"date_fin",
"geojson_4326",
"x_centroid_4326",
"y_centroid_4326",
"precision_geographique",
"communes",
"alti_min",
"technique_observation",
"stade_vie",
"statut_biologique",
"sexe",
"comportement",
"type_source",
"type_precision",
"sensibilite",
"confidentialite",
]
Je relance le sujet à propos de 2 champs exportés : commune et observateurs. A quel point cela impacterait le temps d'export si on scindait la commune du code insee qui sont actuellement concaténés. Idem pour les observateurs.
Difficile à dire avant de tester. Pour les communes cela devrait aller car je concatène les valeurs. Pour les observateurs, cela va engendrer un ralentissement supplémentaire car le champ observateur n'est pas divisé à l'origine. Il faut donc ajouter un traitement supplémentaire. En outre, cela risque de rajouter beaucoup de colonnes vide si une observations à plusieurs observateurs et les autres noms... Je ne comprends pas bien l'intérêt de séparer les observateurs dans des colonnes. Quel type de traitement est effectué dessus ?
Ok, on peut laisser le champ observateurs tel quel alors (c'est juste que pour les intégrer dans Silene Admin on scinde les observateurs et d'après ce que je comprends, on les reconcatène quand on les envoie dans Silene. Donc, je vais voir pour ce point là en interne). Par contre, pour la commune ça serait très pratique de la scinder du code insee.
Demande formulée par un utilisateur (Jacques Bry) : ajouter le champ "nom_cité" dans les champs exportables pour permettre un recoupement plus aisé espèces/sous-espèces/cd_ref/nom_cité. Besoin : disposer d'un tableau qui reprend, pour chaque observation : UUID_perm et nom_cité. @helenechauvin as-tu déjà eu ce genre de demande ? Est-ce une demande isolée ?
@lvahe non je n'ai pas encore eu ce genre de demande. Du coup si c'est juste une demande isolée, je ne suis pas certaine de la pertinence de l'ajouter aux champs exportables?
La synthèse permet d'exporter les données liées aux observations. Le paramètre de config
[SYNTHESE] > EXPORT_COLUMNS
permet de lister les champs disponibles dans la vuegn_synthese.v_synthese_for_export
qui seront utilisés pour exporter les données correspondantes.Il faut à terme configurer l'export pour qu'il inclut tous les champs de la Synthese possédant des données.
Les champs actuellement exportés:
Les champs disponibles pour l'export :