From 9ea1b17dbda87c631b7026b565a3b6811a937aae Mon Sep 17 00:00:00 2001 From: Colas Geier Date: Mon, 26 Feb 2024 15:32:10 +0100 Subject: [PATCH] view zh v3 --- 3_AZALEE/create_view_zh3.py | 594 ++++++++++++++++++++++++++++++++++++ 1 file changed, 594 insertions(+) create mode 100644 3_AZALEE/create_view_zh3.py diff --git a/3_AZALEE/create_view_zh3.py b/3_AZALEE/create_view_zh3.py new file mode 100644 index 0000000..253f81d --- /dev/null +++ b/3_AZALEE/create_view_zh3.py @@ -0,0 +1,594 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*-. + +from sqlalchemy import text +from datetime import datetime as dt +import geopandas as gpd +from pycen import con + +drop_v_zh = 'DROP VIEW IF EXISTS zones_humides.v_zoneshumides CASCADE;' +with con.begin() as cnx: + cnx.execute(drop_v_zh) + + +v_zh_hab = """ +DROP VIEW IF EXISTS zones_humides.v_zh_hab; +CREATE OR REPLACE VIEW zones_humides.v_zh_hab +AS +WITH auteur AS ( + SELECT DISTINCT ON (id_sitehab) + c.id_sitehab, + string_agg(c1.auteur,';' ORDER BY c1.auteur) auteur + FROM zones_humides.r_rsitehab_auteur c + JOIN personnes.v_personne c1 ON c1.id = c.id_auteur + GROUP BY c.id_sitehab + ORDER BY 1 +) +SELECT DISTINCT ON (a.id_site) + --a.id_geom_site, + a.id_site, + c.auteur, + --MAX(a."date") "date", + a."date", + string_agg(a.id_cb,';' order by a.id_cb) code_cb, + string_agg(b.lb_hab_fr,';' order by a.id_cb) lib_cb +FROM zones_humides.r_site_habitat a + JOIN ref_habitats.corine_biotope b ON a.id_cb = b.id + JOIN auteur c ON c.id_sitehab = a.id +WHERE a."valid" +GROUP BY 1,2,3 +ORDER BY a.id_site, a."date" desc,row_number() OVER (ORDER BY a.id_site) desc +;""" +grant = """ +GRANT ALL ON TABLE zones_humides.v_zh_hab TO grp_admin; +GRANT SELECT ON TABLE zones_humides.v_zh_hab TO grp_consult; +""" +with con.begin() as cnx: + cnx.execute(text(v_zh_hab)) + cnx.execute(grant) + + +v_zh_usgprocess = """ +DROP VIEW IF EXISTS zones_humides.v_zh_usgprocess; +CREATE OR REPLACE VIEW zones_humides.v_zh_usgprocess +AS +WITH auteur AS ( + SELECT DISTINCT ON (id_siteusage) + c.id_siteusage, + string_agg(c1.auteur,';' ORDER BY c1.auteur) auteur + FROM zones_humides.r_rsiteusage_auteur c + JOIN personnes.v_personne c1 ON c1.id = c.id_auteur + GROUP BY c.id_siteusage + ORDER BY 1 +), usgprocess as ( + SELECT distinct on (a.id_site,a1.nom,a2.nom) + --a.id_geom_site, + a.id_site, + c.auteur, + a."date", + a1.nom activ_hum, + a.activ_hum_autre, + a2.nom impact, + a3.nom "position", + a.remarques rmq_activ_hum + FROM zones_humides.r_site_usageprocess a + JOIN zones_humides.param_activ_hum a1 ON a.id_activ_hum = a1.id + JOIN zones_humides.param_impact a2 ON a.id_impact = a2.id + JOIN zones_humides.param_position a3 ON a.id_position = a3.id + JOIN auteur c ON c.id_siteusage = a.id + WHERE a."valid" + --AND date = a.date + --GROUP BY a.id_geom_site,c.auteur,a1.nom,a.activ_hum_autre,a2.nom,a3.nom,a.remarques + --GROUP BY a.id_site,c.auteur,a1.nom,a.activ_hum_autre,a2.nom,a3.nom,a.remarques + ORDER BY a.id_site,a1.nom,a2.nom, a."date" desc,row_number() OVER (ORDER BY a.id_site) desc + ) +SELECT DISTINCT ON (id_site) + --id_geom_site, + id_site, + auteur, + "date", + string_agg( + CASE WHEN activ_hum = 'Autre (préciser dans l''encart réservé aux remarques)' THEN activ_hum_autre + ELSE activ_hum END,';') activ_hum, + string_agg( + CASE WHEN impact = 'Autre (préciser dans l''encart réservé aux remarques)' THEN rmq_activ_hum + ELSE impact END,';') impact, + string_agg("position",';') "position", + string_agg( + CASE WHEN impact = 'Autre (préciser dans l''encart réservé aux remarques)' THEN NULL + ELSE rmq_activ_hum END,';') rmq_activ_hum +FROM usgprocess +GROUP BY 1,2,3 +ORDER BY id_site, "date" desc,row_number() OVER (ORDER BY id_site) desc +;""" +grant = """ +GRANT ALL ON TABLE zones_humides.v_zh_usgprocess TO grp_admin; +GRANT SELECT ON TABLE zones_humides.v_zh_usgprocess TO grp_consult; +""" +with con.begin() as cnx: + cnx.execute(v_zh_usgprocess) + cnx.execute(grant) + + +v_zh_connex = """ +DROP VIEW IF EXISTS zones_humides.v_zh_connex; +CREATE OR REPLACE VIEW zones_humides.v_zh_connex +AS +WITH auteur AS ( + SELECT DISTINCT ON (id_siteconnect) + c.id_siteconnect, + string_agg(c1.auteur,';' ORDER BY c1.auteur) auteur + FROM zones_humides.r_rsiteconnect_auteur c + JOIN personnes.v_personne c1 ON c1.id = c.id_auteur + GROUP BY c.id_siteconnect + ORDER BY 1 +) +SELECT DISTINCT ON (id_site) + --a.id_geom_site, + a.id_site, + c.auteur, + a."date", + b.nom connexion +FROM zones_humides.r_site_type_connect a + JOIN zones_humides.param_type_connect b ON a.id_param_connect = b.id + JOIN auteur c ON c.id_siteconnect = a.id +WHERE a."valid" + --AND a.date = (SELECT MAX(date) FROM zones_humides.r_site_type_connect WHERE id_site = a.id_site) +ORDER BY a.id_site,"date" desc,row_number() OVER (ORDER BY a.id_site) desc +;""" +grant = """ +GRANT ALL ON TABLE zones_humides.v_zh_connex TO grp_admin; +GRANT SELECT ON TABLE zones_humides.v_zh_connex TO grp_consult; +""" +with con.begin() as cnx: + cnx.execute(v_zh_connex) + cnx.execute(grant) + + +v_zh_submertion = """ +DROP VIEW IF EXISTS zones_humides.v_zh_submertion; +CREATE OR REPLACE VIEW zones_humides.v_zh_submertion +AS +WITH auteur AS ( + SELECT DISTINCT ON (id_sitesub) + c.id_sitesub, + string_agg(c1.auteur,';' ORDER BY c1.auteur) auteur + FROM zones_humides.r_rsitesub_auteur c + JOIN personnes.v_personne c1 ON c1.id = c.id_auteur + GROUP BY c.id_sitesub + ORDER BY 1 +) +SELECT DISTINCT ON (a.id_site) + --a.id_geom_site, + a.id_site, + c.auteur, + a."date", + a1.nom subm_freq, + a2.nom subm_etend, + a.id_origsub subm_orig +FROM zones_humides.r_site_sub a + JOIN (zones_humides.param_sub a1 JOIN zones_humides.type_param_sub s6411 ON s6411.id = a1.id_type) ON a.id_freqsub = a1.id + JOIN (zones_humides.param_sub a2 JOIN zones_humides.type_param_sub s6421 ON s6421.id = a2.id_type) ON a.id_etendsub = a2.id + JOIN auteur c ON c.id_sitesub = a.id +WHERE a."valid" + --AND a.date = (SELECT MAX(date) FROM zones_humides.r_site_sub WHERE id_site = a.id_site) + AND s6411.nom = 'Submersion fréquente' + AND s6421.nom = 'Submersion étendue' +ORDER BY a.id_site,"date" desc,row_number() OVER (ORDER BY a.id_site) desc +;""" +grant = """ +GRANT ALL ON TABLE zones_humides.v_zh_submertion TO grp_admin; +GRANT SELECT ON TABLE zones_humides.v_zh_submertion TO grp_consult; +""" +with con.begin() as cnx: + cnx.execute(v_zh_submertion) + cnx.execute(grant) + + +v_zh_fctecosociopatri_cross = """ +DROP VIEW IF EXISTS zones_humides.v_zh_fctecosociopatri_cross; +CREATE OR REPLACE VIEW zones_humides.v_zh_fctecosociopatri_cross +AS +SELECT DISTINCT ON (id_site) + --id_geom_site, + id_site, + auteur, + "date", + fct_bio, + fct_hydro, + int_patri, + "val_socioEco" +FROM crosstab( + $$ WITH auteur AS ( + SELECT DISTINCT ON (id_sitefct) + c.id_sitefct, + string_agg(c1.auteur,';' ORDER BY c1.auteur) auteur + FROM zones_humides.r_rsitefct_auteur c + JOIN personnes.v_personne c1 ON c1.id = c.id_auteur + GROUP BY c.id_sitefct + ORDER BY 1 + ), tmp_select as ( + SELECT + id_site, + (SELECT regexp_split_to_table(auth,',') FROM (values (string_agg(d.auteur,',' order by ROW()))) AS value(auth) Limit 1) auteur, + MAX(a.date) date, + c.nom_court type_param, + b.nom, + string_agg(DISTINCT a.description,'\n') remark + FROM zones_humides.r_site_fctecosociopatri a + JOIN (zones_humides.param_fct_eco_socio_patri b + JOIN zones_humides.type_param_fct c ON b.id_type = c.id + ) ON a.id_fct = b.id + JOIN auteur d ON d.id_sitefct = a.id + WHERE a."valid" + GROUP BY a.id_site,c.nom_court,b.nom + ORDER BY a.id_site,c.nom_court DESC,b.nom + ) + SELECT + id_site, + + string_agg( + DISTINCT CASE WHEN extract(year from date)>'1' + THEN auteur||'-'|| extract(year from date) + ELSE auteur END, + '; ') auteur, + MAX(date) date, + type_param, + string_agg(distinct + CASE WHEN remark IS NULL THEN nom + WHEN remark = '' THEN nom + ELSE CONCAT(nom,' (',remark,')') END, + ';') fct + FROM tmp_select + GROUP BY 1,4 + ORDER BY 1,4,3;$$, + $$SELECT DISTINCT nom_court FROM zones_humides.type_param_fct ORDER BY 1 ASC;$$ +) AS ct ( + "id_site" text, + "auteur" text, + "date" date, + "fct_bio" text, + "fct_hydro" text, + "int_patri" text, + "val_socioEco" text) +--GROUP BY id_site,auteur,fct_bio,fct_hydro,int_patri,"val_socioEco" +ORDER BY id_site,"date" desc,row_number() OVER (ORDER BY id_site) desc +;""" +grant = """ +GRANT ALL ON TABLE zones_humides.v_zh_fctecosociopatri_cross TO grp_admin; +GRANT SELECT ON TABLE zones_humides.v_zh_fctecosociopatri_cross TO grp_consult; +""" +with con.begin() as cnx: + cnx.execute(v_zh_fctecosociopatri_cross) + cnx.execute(grant) + + +v_zh_critdelim_cross = """ +DROP VIEW IF EXISTS zones_humides.v_zh_critdelim_cross; +CREATE OR REPLACE VIEW zones_humides.v_zh_critdelim_cross +AS +SELECT DISTINCT ON (id_site) + --id_geom_site, + id_site, + auteur, + "date", + crit_delim, + crit_def_esp +FROM crosstab( + $$WITH auteur AS ( + SELECT DISTINCT ON (id_sitedelim) + c.id_sitedelim, + string_agg(c1.auteur,';' ORDER BY c1.auteur) auteur + FROM zones_humides.r_rsitedelim_auteur c + JOIN personnes.v_personne c1 ON c1.id = c.id_auteur + GROUP BY c.id_sitedelim + ORDER BY 1 + ) + SELECT + --a.id_geom_site::bigint, + id_site, + string_agg( + DISTINCT CASE WHEN extract(year from a.date)>'1' + THEN d.auteur||'-'|| extract(year from a.date) + ELSE d.auteur END, + '; ') auteur, + MAX(a.date) date, + c.nom_court type_param, + string_agg( DISTINCT + CASE WHEN a.description IS NULL THEN b.nom + WHEN a.description = '' THEN b.nom + ELSE CONCAT(b.nom,' (',a.description,')') END, + '; ') fct + FROM zones_humides.r_site_critdelim a + JOIN (zones_humides.param_delim_fct b + JOIN zones_humides.type_param_delim_fct c ON b.id_type = c.id + ) ON a.id_crit_delim = b.id + JOIN auteur d ON d.id_sitedelim = a.id + WHERE a."valid" + GROUP BY 1,4 + ORDER BY 3,1,2$$, + $$SELECT DISTINCT nom_court FROM zones_humides.type_param_delim_fct ORDER BY 1 DESC;$$ +) AS ct ( + "id_site" text, + "auteur" text, + "date" date, + "crit_delim" text, + "crit_def_esp" text) +--GROUP BY id_site,auteur,crit_delim,crit_def_esp +ORDER BY id_site,"date" desc,row_number() OVER (ORDER BY id_site) desc +;""" +grant = """ +GRANT ALL ON TABLE zones_humides.v_zh_critdelim_cross TO grp_admin; +GRANT SELECT ON TABLE zones_humides.v_zh_critdelim_cross TO grp_consult; +""" +with con.begin() as cnx: + cnx.execute(v_zh_critdelim_cross) + cnx.execute(grant) + + +v_zh_reghydro_cross = """ +DROP VIEW IF EXISTS zones_humides.v_zh_reghydro_cross; +CREATE OR REPLACE VIEW zones_humides.v_zh_reghydro_cross +AS +SELECT DISTINCT ON (id_site) + --id_geom_site, + id_site, + auteur, + "date", + (string_to_array(ct.entree_eau,'//'))[1] entree_eau_reg, + (string_to_array(ct.entree_eau,'//'))[2] entree_eau_perm, + (string_to_array(ct.entree_eau,'//'))[3] entree_eau_topo, + (string_to_array(ct.sortie_eau,'//'))[1] sortie_eau_reg, + (string_to_array(ct.sortie_eau,'//'))[2] sortie_eau_perm, + (string_to_array(ct.sortie_eau,'//'))[3] sortie_eau_topo +FROM crosstab( + $$WITH auteur AS ( + SELECT DISTINCT ON (id_sitehydro) + c.id_sitehydro, + string_agg(c1.auteur,';' ORDER BY c1.auteur) auteur + FROM zones_humides.r_rsitehydro_auteur c + JOIN personnes.v_personne c1 ON c1.id = c.id_auteur + GROUP BY c.id_sitehydro + ORDER BY 1 + ) + SELECT + --a.id_geom_site, + id_site, + d.auteur, + MAX(a.date) date, + a.in_out, + CONCAT( + string_agg(a1.nom,';'),'//', -- reg_hydro + string_agg(a2.nom,';'),'//', -- permanence + string_agg(a.rmq_toponymie,';') -- rmq_toponymie + ) hydro + FROM zones_humides.r_site_reghydro a + LEFT JOIN zones_humides.param_reg_hydro a1 ON a.id_reg_hydro = a1.id + LEFT JOIN zones_humides.param_permanence a2 ON a.id_permanence = a2.id + JOIN auteur d ON d.id_sitehydro = a.id + WHERE a."valid" + GROUP BY a.id_site,d.auteur,a.in_out + ORDER BY 1,2$$, + $$SELECT DISTINCT in_out FROM zones_humides.r_site_reghydro ORDER BY 1 DESC;$$ +) AS ct ( + "id_site" text, + "auteur" text, + "date" date, + "entree_eau" text, + "sortie_eau" text) +--GROUP BY id_site,auteur,entree_eau,sortie_eau +ORDER BY id_site,"date" desc,row_number() OVER (ORDER BY id_site) desc +;""" +grant = """ +GRANT ALL ON TABLE zones_humides.v_zh_reghydro_cross TO grp_admin; +GRANT SELECT ON TABLE zones_humides.v_zh_reghydro_cross TO grp_consult; +""" +with con.begin() as cnx: + cnx.execute(v_zh_reghydro_cross) + cnx.execute(grant) + + +v_zoneshumides = """ +DROP VIEW IF EXISTS zones_humides.v_zoneshumides CASCADE; +CREATE OR REPLACE VIEW zones_humides.v_zoneshumides +AS +WITH tmp_auteur_site as ( + SELECT + s0.id, + string_agg(s11.auteur,';' ORDER BY s11.auteur) AS auteur_site + FROM sites.sites s0 + JOIN sites.type_milieu s3 ON s0.id_type_milieu = s3.id + LEFT JOIN (sites.r_sites_auteur s1 + JOIN personnes.v_personne s11 ON s1.id_auteur = s11.id + ) ON s0.id::text = s1.id_site::text + WHERE s0.date_fin IS NULL + AND s3.nom_court::text = 'Milieux humides'::text + GROUP BY s0.id + ORDER BY s0.id +), tmp_auteur_geom as ( + SELECT + s6.id, + string_agg(s611.auteur,';' ORDER BY s611.auteur) AS auteur_geom + FROM sites.sites s0 + JOIN sites.type_milieu s3 ON s0.id_type_milieu = s3.id + LEFT JOIN (sites.r_sites_geom s6 + LEFT JOIN (sites.r_geomsites_auteur s61 + JOIN personnes.v_personne s611 ON s61.id_auteur = s611.id + ) ON s6.id = s61.id_geom_site + ) ON s0.id = s6.id_site + WHERE s0.date_fin IS NULL + AND s3.nom_court::text = 'Milieux humides'::text + GROUP BY s6.id + ORDER BY s6.id +), +tmp_other_name as ( + SELECT + id_site_new, + ARRAY_AGG(id_site_old) id_site_old + FROM sites.r_site_maj + WHERE id_site_old IS NOT NULL + GROUP BY id_site_new +) +SELECT + s0.id AS site_code, + s7.id_site_old old_code, + s0.nom, + s2.autre_nom, + s1.auteur_site, + s6.auteur_geom, + ( + SELECT DISTINCT ON (date) auteur + FROM (values (s6.date,s6.auteur_geom),(s62.date,s62.auteur),(s63.date,s63.auteur),(s64.date,s64.auteur),(s65.date,s65.auteur), + (s66.date,s66.auteur),(s67.date,s67.auteur),(s68.date,s68.auteur)) AS value(date,auteur) + WHERE date = (SELECT MAX(date) FROM (values (s6.date),(s62.date),(s63.date),(s64.date),(s65.date),(s66.date),(s67.date),(s68.date)) AS value(date)) + ) as auteur_last_maj, + s0.date_deb AS date_site, + s6.date AS date_geom, + (SELECT MAX(date) FROM (values (s6.date),(s62.date),(s63.date),(s64.date),(s65.date),(s66.date),(s67.date),(s68.date)) AS value(date)) as date_last_maj, + s3.nom_court AS type_milieu, + s4.nom AS type_site, + s5.id||' - '||s5.nom AS typo_sdage, + s5.mnemo mnemo_sdage, + s0.remarques AS rmq_site, + s6.rmq_fct_majeur, + s6.rmq_interet_patri, + s6.rmq_bilan_menace, + s6.rmq_orient_act, + s6.rmq_usage_process, + s62.code_cb, + s62.lib_cb, + s63.activ_hum, + s63.impact, + s63."position", + s63.rmq_activ_hum, + s64.connexion, + s65.subm_orig, + s65.subm_freq, + s65.subm_etend, + s66.fct_bio, + s66.fct_hydro, + s66.int_patri, + s66."val_socioEco", + s67.crit_delim, + s67.crit_def_esp, + s68.entree_eau_reg, + s68.entree_eau_perm, + s68.entree_eau_topo, + s68.sortie_eau_reg, + s68.sortie_eau_perm, + s68.sortie_eau_topo, + s6.id_origine, + s6.geom +FROM sites.sites s0 + LEFT JOIN tmp_auteur_site s1 ON s0.id = s1.id + LEFT JOIN sites.autre_nom s2 ON s0.id = s2.id_site + LEFT JOIN sites.type_milieu s3 ON s0.id_type_milieu = s3.id + LEFT JOIN sites.type_site s4 ON s0.id_type_site::text = s4.id::text + LEFT JOIN sites.typo_sdage s5 ON s0.id_typo_sdage::text = s5.id::text + LEFT JOIN (SELECT DISTINCT ON (sg.id_site) * + FROM sites.r_sites_geom sg + LEFT JOIN tmp_auteur_geom s61 USING (id) --ON s6.id = s61.id + ORDER BY sg.id_site, "date" DESC, date_insert DESC + ) s6 ON s0.id::text = s6.id_site::text + LEFT JOIN zones_humides.v_zh_hab s62 ON s0.id = s62.id_site + LEFT JOIN zones_humides.v_zh_usgprocess s63 ON s0.id = s63.id_site + LEFT JOIN zones_humides.v_zh_connex s64 ON s0.id = s64.id_site + LEFT JOIN zones_humides.v_zh_submertion s65 ON s0.id = s65.id_site + LEFT JOIN zones_humides.v_zh_fctecosociopatri_cross s66 ON s0.id = s66.id_site + LEFT JOIN zones_humides.v_zh_critdelim_cross s67 ON s0.id = s67.id_site + LEFT JOIN zones_humides.v_zh_reghydro_cross s68 ON s0.id = s68.id_site + LEFT JOIN tmp_other_name s7 ON s0.id = s7.id_site_new +WHERE s0.date_fin IS NULL + AND s3.nom_court::text = 'Milieux humides'::text + AND s6.date = (SELECT MAX(date) FROM sites.r_sites_geom WHERE r_sites_geom.id_site = s0.id) +ORDER BY s0.id ASC NULLS FIRST; +""" +grant = """ +GRANT ALL ON TABLE zones_humides.v_zoneshumides TO grp_admin; +GRANT SELECT ON TABLE zones_humides.v_zoneshumides TO grp_consult; +""" +comment = """ +COMMENT ON COLUMN zones_humides.v_zoneshumides.site_code IS 'Identifiant de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.old_code IS 'Ancien identifiant de la zone humide pouvant se retrouver dans des données historiques.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.nom IS 'Nom de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.autre_nom IS 'Autre nom de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.auteur_site IS 'Auteur ayant caractérisé la zone humide pour la première fois.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.auteur_geom IS 'Auteur ayant définis la géometrie actuelle de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.auteur_last_maj IS 'Auteur le plus récent ayant défini les attributs de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.date_site IS 'Date de la première description de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.date_geom IS 'Date de la géométrie.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.date_last_maj IS 'Date des attributs les plus récents.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.type_milieu IS 'Caractérisation du milieu.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.type_site IS ''; +COMMENT ON COLUMN zones_humides.v_zoneshumides.typo_sdage IS 'Typologie sdage de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.rmq_site IS 'Remarques générale concernant la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.rmq_fct_majeur IS 'Remarques sur les fonctions majeurs de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.rmq_interet_patri IS 'Remarques sur les intérêts patrimoniaux de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.rmq_bilan_menace IS 'Remarques globales sur les menaces qui concernent la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.rmq_orient_act IS 'Remarques sur les orientations et les actes de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.rmq_usage_process IS 'Remarques concernant les usages et les processus naturels de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.code_cb IS 'Liste des codes CORINE Biotopes identifiés sur la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.lib_cb IS 'Liste des habitats CORINE Biotopes identifiés sur la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.activ_hum IS 'Liste des activités humaines identifiées sur la zone humide. Chaque élément de la liste est séparé par un '';'' et est lié à la colonne ''impacts'' et ''position''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.impact IS 'Liste des impacts identifiés et engendrés par les activités humaine sur la zone humide. Chaque élément de la liste est séparé par un '';'' et est lié à la colonne ''activ_hum'' et ''position''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides."position" IS 'Liste des potionnements des différentes activités humaines sur la zone humide. Chaque élément de la liste est séparé par un '';'' et est lié à la colonne ''activ_hum'' et ''impact''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.rmq_activ_hum IS 'Remarques concernant activités humaines identifiées sur la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.connexion IS 'Connexion de la zone humide dans son environnement.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.subm_orig IS 'Origine de l''eau submerssive.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.subm_freq IS 'Fréquence de la submersion de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.subm_etend IS 'Etendue de la submersion de la zone humide.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.fct_bio IS 'Liste des fonctions biologiques de la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.fct_hydro IS 'Liste des fonctions hydrologiques de la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.int_patri IS 'Liste des interêts patrimoniaux de la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides."val_socioEco" IS 'Liste des valeurs socio-economiques de la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.crit_delim IS 'Liste des critères de délimitation de la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.crit_def_esp IS 'Liste des critères de l''espace de fonctionnalité de la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.entree_eau_reg IS 'Liste des entrées d''eau du régime hydrique de la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.entree_eau_perm IS 'Liste des permanances respectivement de chaque entrée d''eau de la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.entree_eau_topo IS 'Liste de la toponymie respectivement de chaque entrée d''eau de la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.sortie_eau_reg IS 'Liste des sorties d''eau du régime hydrique de la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.sortie_eau_perm IS 'Liste des permanances respectivement de chaque sortie d''eau de la zone humide. Chaque élément de la liste est séparé par un '';''.'; +COMMENT ON COLUMN zones_humides.v_zoneshumides.sortie_eau_topo IS 'Liste de la toponymie respectivement de chaque sortie d''eau de la zone humide. Chaque élément de la liste est séparé par un '';''.'; +""" +with con.begin() as cnx: + cnx.execute(text(v_zoneshumides)) + cnx.execute(grant) + cnx.execute(comment) + + +v_rhomeosite = """ +DROP VIEW IF EXISTS zones_humides.v_rhomeosite; +CREATE OR REPLACE VIEW zones_humides.v_rhomeosite +AS +SELECT + v.site_code||' - '||v.nom "NAME", + SPLIT_PART(v.auteur_geom,' (',1) "REFERENT", + REPLACE(SPLIT_PART(v.auteur_geom,' (',2),')','') "ORG", + SPLIT_PART(v.typo_sdage,' - ',1) "TYPE", + CASE WHEN r.nom::text = 'alpin' THEN '1' + WHEN r.nom::text = 'continental' THEN '2' + WHEN r.nom::text = 'mediterraneen' THEN '4' + END "ODONATE", + v.geom +FROM zones_humides.v_zoneshumides v, ref_territoire.ref_biogeo r +WHERE st_intersects(v.geom, r.geom) +""" +grant = """ +GRANT ALL ON TABLE zones_humides.v_rhomeosite TO grp_admin; +GRANT SELECT ON TABLE zones_humides.v_rhomeosite TO grp_consult; +""" +with con.begin() as cnx: + cnx.execute(text(v_rhomeosite)) + cnx.execute(grant) + + +test = """ +SELECT * FROM zones_humides.v_zoneshumides; +""" +data = gpd.pd.read_sql_query( + sql = text(test), + con = con) + + +data[~data.index.isin(data.drop_duplicates(subset='site_code',keep=False).index)] +data[data.duplicated(subset='site_code',keep=False)] \ No newline at end of file