Closed camillemonchicourt closed 4 years ago
@amandine-sahl a avancé sur le mécanisme de calcul automatique de la sensibilité d'une observation : https://github.com/PnX-SI/GeoNature/blob/sensitivity/data/core/sensitivity.sql
Et sa prise en compte au niveau de GeoNature-atlas : https://github.com/PnEcrins/GeoNature-atlas/commit/37b2c4ddf142d58bd202a3461f8147b227544301
Pour la sensibilité il faut importer les données dans la BDD de GeoNature.
Les données national + LR et le script d'import de ces données : http://geonature.fr/data/inpn/sensitivity/
Puis lancer le calcul manuellement :
----- MAJ des données de la synthese
UPDATE gn_synthese.synthese SET id_nomenclature_sensitivity = r
FROM (
SELECT id_synthese as id, gn_synthese.get_id_nomenclature_sensitivity(id_synthese::varchar, date_min::date, cd_ref, the_geom_local, NULL::varchar[]) r
FROM gn_synthese.synthese s
JOIN taxonomie.taxref t
ON s.cd_nom = t.cd_nom
WHERE id_nomenclature_sensitivity IS NULL
) a
WHERE a.id = id_synthese;
WITH niv_prec AS (
SELECT ref_nomenclatures.get_id_nomenclature('NIV_PRECIS', t.cd_nomenclature) as id_diff_l, t.id_nomenclature
FROM ref_nomenclatures.t_nomenclatures t
WHERE id_type = ref_nomenclatures.get_id_nomenclature_type('SENSIBILITE')
)
UPDATE gn_synthese.synthese SET id_nomenclature_diffusion_level = id_diff_l
FROM niv_prec
WHERE id_nomenclature = id_nomenclature_sensitivity;
Pour le moment, ce qui a été fait écrit la sensibilité dans la Synthèse. C'est une solution temporaire pour tester. En effet, on ne doit pas stocker d'info uniquement dans la Synthèse.
Il est donc prévu une solution similaire à celle utilisée pour la Validation, c'est-à-dire stocker la sensibilité des occurrences dans une table transversale dans le schéma gn_commons
.
Le SINP vient de mettre à jour sa documentation sur la sensibilité, ainsi que la liste des espèces sensibles, intégrant la liste nationale + les listes régionales : http://www.naturefrance.fr/ressources/referentiels/referentiel-de-sensibilite
Intéressant. Pas d'avancée pour la région PACA ?
Non, pas de liste en PACA à ma connaissance. Et dans le tableau il n'y a rien qui concerne la région (INSEER93), donc c'est la liste nationale qui s'applique pour PACA.
Par défaut l'ensemble des règles du SINP sont importées mais par défaut seule les règles nationales sont activées
exemple :
SELECT gn_sensitivity.get_id_nomenclature_sensitivity(
date_min::date,
taxonomie.find_cdref(cd_nom),
the_geom_local,
('{"STATUT_BIO": ' || id_nomenclature_bio_status::text || '}')::jsonb
)
FROM gn_synthese.synthese
LIMIT 10
PB :
J'ai pas très bien compris l'exemple. Il correspond à quoi ?
Même si la nomenclature est bien "Niveau de précision", je renommerai bien la fonction get_sensitivity_level
.
Pour activer les règles SINP pour la région LR il y a un script qui permet de prendre en compte les périmètres de sensibilités spécifiques : https://geonature.fr/data/inpn/sensitivity/sensitivity_enable_lr.sql
Synthèse des premiers développements : https://github.com/PnX-SI/GeoNature/compare/d0773c5b954d79c31d3666ad6247a6a955165284...90d8709bad0c6b346e2ef287531f1058d2d38ca0
gn_sensitivity
gn_sensitivity.t_sensitivity_rules
contenant les règles de sensibilité par taxongn_sensitivity.cor_sensitivity_area
gn_sensitivity.cor_sensitivity_criteria
gn_sensitivity.cor_sensitivity_area_type
gn_sensitivity.get_id_nomenclature_sensitivity
permet de calculer la sensibilité d'une observation en passant la date, la géométrie, le cd_ref et les nomenclatures de l'observationgn_sensitivity.cor_sensitivity_synthese
permet de stocker l'éventuelle sensibilité d'une occurrence présente dans la Synthèse, en lien avec son UUIDgn_sensitivity.t_sensitivity_rules
, mais seules les règles nationales sont activées par défaut. Chacun peut choisir d'activer les règles de sa région en passant leur champs active
à TRUE
Pour le moment, la structure des tables et l'intégration des règles nationales (+ départementales désactivées par défaut) ainsi que la fonction permettant de calculer la sensibilité d'une occurrence de taxon sont intégrées dans la version 2.1.0.
Par contre, le calcul n'est pas automatisé car la méthode pour cela est à définir.
! Lors de l'installation ou de la mise à jour de la version 2.1.0, l'import des données des règles nationales et régionales ne fonctionne pas pour des raisons de chemins
Ce n'est pas le problème identifié et corrigé ici : https://github.com/PnX-SI/GeoNature/commit/bab3dba6e2259933719de5d0e67dbfd579aa38ae ?
Effectivement désolée. Par contre ce serait bien d'essayer passer des variables via pgsql -v De façon à éviter de copier les fichiers de faire une commande sed https://docs.postgresql.fr/11/app-psql.html
La partie BDD permettant de stocker les règle et de calculer la sensibilité d'une observation est fonctionnelle depuis la version 2.1.0. Reste à traiter l'automatisation du calcul, le stockage de la géométrie floutée et le floutage des données sensibles en fonction des droits de l'utilisateur. Traités dans des tickets dédiés.
Utilisation de la fonction, à affiner (avec la temporalité notamment) :
-- Désactiver trigger de date car sinon cela laisse penser que la donnée a été modifiée
ALTER TABLE gn_synthese.synthese DISABLE TRIGGER tri_meta_dates_change_synthese;
-- On remplit gn_sensitivity.cor_sensitivity_synthese quand on a un UUID (un trigger renseigne ensuite la synthèse à plat)
-- A ne pas faire finalement
-- Car on a retenu le fait de ne pas utiliser ni remplir cette table cor_sensitivity_synthese, mais seulement le champs dans la synthèse. C'est le niveau de diffusion qui peut être modifié manuellement, pas le niveau de sensibilité
WITH data AS (
SELECT DISTINCT s.unique_id_sinp,s.date_min::date,
taxonomie.find_cdref(s.cd_nom) cd_ref,
the_geom_local,
('{"STATUT_BIO": ' || id_nomenclature_bio_status::text || '}')::jsonb as cr
FROM gn_synthese.synthese s
LEFT OUTER JOIN gn_sensitivity.cor_sensitivity_synthese cs
ON cs.uuid_attached_row = s.unique_id_sinp
WHERE cs.uuid_attached_row IS NULL
AND NOT unique_id_sinp IS NULL
AND s.id_nomenclature_sensitivity IS NULL
)
INSERT INTO gn_sensitivity.cor_sensitivity_synthese (uuid_attached_row, id_nomenclature_sensitivity)
SELECT DISTINCT unique_id_sinp , gn_sensitivity.get_id_nomenclature_sensitivity(
date_min::date,
cd_ref,
the_geom_local,
cr
)
FROM data s;
-- Si on n'a pas de UUID on remplit directement dans le champs à plat dans la Synthèse
-- On a retenu de ne faire que cette méthode, pour toutes les données
UPDATE gn_synthese.synthese SET id_nomenclature_sensitivity = gn_sensitivity.get_id_nomenclature_sensitivity(
date_min::date,
taxonomie.find_cdref(cd_nom),
the_geom_local,
('{"STATUT_BIO": ' || id_nomenclature_bio_status::text || '}')::jsonb
)
WHERE id_nomenclature_sensitivity IS NULL AND unique_id_sinp IS NULL;
-- Calculer les niveaux de diffusion en fonction de la sensibilité
-- Attention, vérifier les id_nomenclature
-- Et il ne faudrait le faire que si il n'ont pas été renseigné/modifié manuellement
-- Donc que si la valeur automatique est supérieure à la valeur existante
UPDATE gn_synthese.synthese SET id_nomenclature_diffusion_level = 140 WHERE id_nomenclature_sensitivity = 67 AND id_nomenclature_diffusion_level IS NULL;
UPDATE gn_synthese.synthese SET id_nomenclature_diffusion_level = 141 WHERE id_nomenclature_sensitivity = 68 AND id_nomenclature_diffusion_level IS NULL;
UPDATE gn_synthese.synthese SET id_nomenclature_diffusion_level = 142 WHERE id_nomenclature_sensitivity = 69 AND id_nomenclature_diffusion_level IS NULL;
UPDATE gn_synthese.synthese SET id_nomenclature_diffusion_level = 143 WHERE id_nomenclature_sensitivity = 70 AND id_nomenclature_diffusion_level IS NULL;
UPDATE gn_synthese.synthese SET id_nomenclature_diffusion_level = 144 WHERE id_nomenclature_sensitivity = 71 AND id_nomenclature_diffusion_level IS NULL;
-- Réactiver trigger date après calcul
ALTER TABLE gn_synthese.synthese ENABLE TRIGGER tri_meta_dates_change_synthese;
La définition de la sensibilité des données est défini par un Groupe de travail du SINP qui a travaillé sur un guide méthodologique : http://www.naturefrance.fr/actions/groupe-de-travail-donnees-sensibles
Celui-ci a aussi abouti à la mise en place d'une liste des espèces sensibles au niveau national, de leur contexte de sensibilité et de leur niveau de diffusion (disponible sur la même page).
Cette liste nationale peut être complétée au niveau régional comme c'est le cas en Languedoc-Roussillon : http://www.naturefrance.fr/languedoc-roussillon/referentiel-des-donnees-sensibles
Nous prévoyons donc d'intégrer un mécanisme qui permettra de qualifier la sensibilité d'une observation automatiquement dans la BDD. Par défaut les critères seront basés sur la liste nationale, mais chaque structure pourra y intégrer aussi les critères régionaux ainsi que d'éventuels critères locaux/spécifiques.
PREMIÈRE RÉFLEXION/PROPOSITION DE DÉCLINAISON TECHNIQUE :
Chaque taxon a un ou plusieurs jeux de règles =1-n enregistrement(s) dans une table des règles de sensibilité (la règle générale sera 1 règle par taxon mais si plusieurs périodes peuvent concerner un même taxon, il faudra créer autant de règles que de périodes pour ce taxon). Chaque règle est représentée par un ou plusieurs champs dans cette table. A chaque règle correspond un niveau. Chaque règle peut tourner indépendamment.
Les règles temporelles et spatiales sont totalement automatisables à la création de l’occurrence. La règle temporelle de durée doit être relancée régulièrement sur les données sensibles pour voir si la sensibilité a expiré. Les règles attributaires peuvent ou non êtres rattachées à une ou des nomenclatures. De ce fait leur définition n’est pas totalement automatisable. Si plusieurs règles concernent un même taxon (plusieurs périodes par exemple), il faudra définir un ordre d’exécution pour ne pas qu’elles s’annulent mutuellement…
Pour gérer les interventions manuelles à opérer sur les occurrences, en plus du niveau de sensibilité, il y a lieu de stocker si l’attribution de la sensibilité s’est fait manuellement ou automatiquement ainsi que le statut de la sensibilité (sensibilité valide = on n’y revient pas, sensibilité à valider = nécessite une intervention humaine).
############################################################################
Ci-dessous une proposition d'intégration des règles de sensibilité dans la BDD. Il est branché sur :
ref_nomenclatures
etref_geo
pour la définition des règles de sensibilitéPour le moment, je n'ai pas géré les critères car c'est encore flou et j’attends d'avoir le modèle de la "nouvelle synthèse" finalisée.
Fonction :
Permet de calculer le niveau de sensibilité d’une donnée.
PB :