Python_scripts/3_AZALEE/create_view_ps.py
2025-02-25 16:52:00 +01:00

515 lines
26 KiB
Python

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-.
from sqlalchemy import create_engine, text
from sqlalchemy.engine import URL
from datetime import datetime as dt
import pandas as pd
import geopandas as gpd
from pycen import con
# Parametres bdd
user = 'cen_admin'
pwd = '#CEN38@venir'
adr = '91.134.194.221'
port = '5432'
base = 'azalee_20240731'
url = URL.create('postgresql+psycopg2',
username=user,
password=pwd,
host=adr,
database=base,
)
# con = create_engine(url)
drop_v_ps = '''
DROP VIEW IF EXISTS ps.v_pelouseseches_all CASCADE;
DROP VIEW IF EXISTS ps.v_termophile CASCADE;
'''
with con.begin() as cnx:
cnx.execute(drop_v_ps)
v_ps_habcb = """
DROP VIEW IF EXISTS ps.v_ps_habcb;
CREATE OR REPLACE VIEW ps.v_ps_habcb
AS
SELECT
b.id_sitehab,
string_agg(
CASE
WHEN b.suspect is not null AND b.sep is not null THEN CONCAT(b.code_hab,' (',b.suspect,')',b.sep)
WHEN b.suspect is not null AND b.sep is null THEN CONCAT(b.code_hab,' (',b.suspect,')')
WHEN b.suspect is null AND b.sep is not null THEN CONCAT(b.code_hab,b.sep)
WHEN b.suspect is null AND b.sep is null THEN b.code_hab
ELSE b.code_hab
END,'' ORDER BY b.ordre) code_hab,
string_agg(b1.lb_hab_fr,';') lb_hab_fr
FROM ps.r_hab_cb b JOIN ref_habitats.corine_biotope b1 ON b.code_hab = b1.id
GROUP BY 1
ORDER BY 1
;
"""
grant = """
GRANT ALL ON TABLE ps.v_ps_habcb TO grp_admin;
GRANT SELECT ON TABLE ps.v_ps_habcb TO grp_consult;
"""
with con.begin() as cnx:
cnx.execute(text(v_ps_habcb))
cnx.execute(grant)
v_ps_sitehab_cross = """
DROP VIEW IF EXISTS ps.v_ps_sitehab_cross;
CREATE OR REPLACE VIEW ps.v_ps_sitehab_cross
AS
SELECT
id_site,
id_geom_site,
auteur,
date,
date_max,
(string_to_array(hab1,'//'))[1] n_hab1,
(string_to_array(hab1,'//'))[2] cb_hab1,
(string_to_array(hab1,'//'))[3] lb_hab1,
(string_to_array(hab2,'//'))[1] n_hab2,
(string_to_array(hab2,'//'))[2] cb_hab2,
(string_to_array(hab2,'//'))[3] lb_hab2,
(string_to_array(hab3,'//'))[1] n_hab3,
(string_to_array(hab3,'//'))[2] cb_hab3,
(string_to_array(hab3,'//'))[3] lb_hab3,
(string_to_array(hab4,'//'))[1] n_hab4,
(string_to_array(hab4,'//'))[2] cb_hab4,
(string_to_array(hab4,'//'))[3] lb_hab4
FROM crosstab(
$$
WITH auteur AS (
SELECT DISTINCT ON (id_sitehab)
c.id_sitehab,
string_agg(c1.auteur,';' ORDER BY c1.auteur) auteur
FROM ps.r_sitehab_auteur c
JOIN personnes.v_personne c1 ON c1.id = c.id_auteur
GROUP BY c.id_sitehab
)
SELECT
a.id_site,
a.id_geom_site,
c.auteur,
a.date,
(SELECT MAX(date) FROM ps.r_site_habitat WHERE id_geom_site = a.id_geom_site ) date_max,
a.index,
CONCAT(a.n_hab,'//',
b.code_hab,'//',
b.lb_hab_fr
) hab
FROM ps.r_site_habitat a
LEFT JOIN ps.v_ps_habcb b ON a.id = b.id_sitehab
LEFT JOIN auteur c ON c.id_sitehab = a.id
WHERE
a.date = (SELECT MAX(date) FROM ps.r_site_habitat WHERE id_geom_site = a.id_geom_site)
ORDER BY a.id_site,a.id_geom_site,a.index
;$$,
'SELECT DISTINCT index FROM ps.r_site_habitat ORDER BY index LIMIT 4 ;'
) AS ct (
"id_site" varchar(10),
"id_geom_site" bigint,
"auteur" text,
"date" date,
"date_max" date,
"hab1" text,
"hab2" text,
"hab3" text,
"hab4" text)
ORDER BY 1,2
"""
grant = """
GRANT ALL ON TABLE ps.v_ps_sitehab_cross TO grp_admin;
GRANT SELECT ON TABLE ps.v_ps_sitehab_cross TO grp_consult;
"""
with con.begin() as cnx:
cnx.execute(text(v_ps_sitehab_cross))
cnx.execute(grant)
# PB a.id_geom_site in (52716)
v_ps_params_cross = """
DROP VIEW IF EXISTS ps.v_ps_params_cross;
CREATE OR REPLACE VIEW ps.v_ps_params_cross
AS
SELECT --ct.*
ct.id_site,
ct.id_geom_site,
ct.auteur,
ct.date,
ct.date_max,
ct.statut,
ct.pratique,
ct.recouvrement,
ct.embrouss,
ct.taux tx_embrouss
FROM crosstab(
$$
WITH auteur AS (
SELECT DISTINCT ON (id_siteparam)
c.id_siteparam,
string_agg(c1.auteur,';' ORDER BY c1.auteur) auteur
FROM ps.r_siteparam_auteur c
JOIN personnes.v_personne c1 ON c1.id = c.id_auteur
GROUP BY c.id_siteparam
)
SELECT DISTINCT ON (a.id_site,a.id_geom_site, a2.nom,a.date)
a.id_site,
a.id_geom_site::bigint,
a.date,
(SELECT MAX(date) FROM ps.r_site_param WHERE id_geom_site = a.id_geom_site ) date_max,
STRING_AGG(distinct c.auteur,', '),
a.taux,
a2.nom,
STRING_AGG(a1.description,', ')
FROM ps.r_site_param a
JOIN (ps.param a1
JOIN ps.type_param a2 ON a1.id_type = a2.id
) ON a.id_param = a1.id
JOIN auteur c ON c.id_siteparam = a.id
--WHERE
-- a.id_geom_site in (52716)
GROUP BY 1,2,7,3,6
ORDER BY 1,2,7,3 DESC
$$,
$$SELECT nom FROM ps.type_param ORDER BY nom;$$
) AS ct ("id_site" varchar(10),"id_geom_site" bigint, "date" date, "date_max" date, "auteur" text, "taux" text, "embrouss" text, "pratique" text, "recouvrement" text, "statut" text)
--GROUP BY 1,2,4,5,6,7,8
ORDER BY 1,2
"""
grant = """
GRANT ALL ON TABLE ps.v_ps_params_cross TO grp_admin;
GRANT SELECT ON TABLE ps.v_ps_params_cross TO grp_consult;
"""
with con.begin() as cnx:
cnx.execute(text(v_ps_params_cross))
cnx.execute(grant)
v_pelouseseches_all = drop_v_ps + """
CREATE OR REPLACE VIEW ps.v_pelouseseches_all
AS WITH tmp_auteur_site as (
SELECT
s.id,
string_agg(s11.auteur,';' ORDER BY s11.auteur) AS auteur_site
FROM sites.sites s
JOIN sites.type_milieu s3 ON s.id_type_milieu = s3.id
LEFT JOIN (sites.r_sites_auteur s1
JOIN personnes.v_personne s11 ON s1.id_auteur = s11.id
) ON s.id::text = s1.id_site::text
WHERE s.date_fin IS NULL
AND s3.nom_court::text = 'Pelouses sèches'::text
GROUP BY s.id
ORDER BY s.id
), tmp_auteur_geom as (
SELECT
s6.id,
string_agg(s611.auteur,';' ORDER BY s611.auteur) AS auteur_geom
FROM sites.sites s
JOIN sites.type_milieu s3 ON s.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 s.id = s6.id_site
WHERE s.date_fin IS NULL
AND s3.nom_court::text = 'Pelouses sèches'::text
GROUP BY s6.id
ORDER BY s6.id
)
SELECT DISTINCT ON (s.id)
s.id AS site_code,
s6.geom,
s.nom,
s5.nom district_nat,
s6.libelle source,
s6.id_origine,
s1.auteur_site,
s6.auteur_geom,
(
SELECT DISTINCT ON ("date") auteur
FROM (values (param.date_max,param.auteur),(hab.date_max,hab.auteur)) AS value("date",auteur)
WHERE "date" = (SELECT MAX("date") FROM (values (param.date_max),(hab.date_max)) AS value("date"))
) as auteur_attrs,
s.date_deb AS date_site,
s6."date" AS date_geom,
(
SELECT MAX("date") FROM (values (param.date_max),(hab.date_max)) AS value("date")
) as date_attrs,
s3.nom_court AS type_milieu,
s4.nom AS type_site,
s.remarques AS rmq_site,
s6.rmq_fct_majeur,
s6.rmq_interet_patri,
s6.rmq_bilan_menace,
s6.rmq_orient_act,
s6.rmq_usage_process,
param.statut,
param.pratique,
param.recouvrement,
param.embrouss,
param.tx_embrouss,
hab.n_hab1,
hab.cb_hab1,
hab.lb_hab1,
hab.n_hab2,
hab.cb_hab2,
hab.lb_hab2,
hab.n_hab3,
hab.cb_hab3,
hab.lb_hab3,
hab.n_hab4,
hab.cb_hab4,
hab.lb_hab4
FROM sites.sites s
JOIN tmp_auteur_site s1 ON s.id = s1.id
JOIN sites.type_milieu s3 ON s.id_type_milieu = s3.id
LEFT JOIN sites.type_site s4 ON s.id_type_site::text = s4.id::text
JOIN ref_territoire.districts_naturels s5 ON s.org = s5.abrev
JOIN ( SELECT DISTINCT ON (id_site) *
FROM sites.r_sites_geom sg
JOIN tmp_auteur_geom s61 ON sg.id = s61.id
LEFT JOIN sites.lots s62 USING (id_lot)
ORDER BY id_site, "date" DESC, date_insert DESC
) s6 ON s6.id_site = s.id
LEFT JOIN ps.v_ps_sitehab_cross hab ON s.id = hab.id_site
LEFT JOIN ps.v_ps_params_cross param ON s.id = param.id_site
----LEFT JOIN (sites.r_sites_geom s6
---- LEFT JOIN tmp_auteur_geom s61 ON s6.id = s61.id
---- LEFT JOIN ps.v_ps_sitehab_cross hab ON s6.id = hab.id_geom_site
---- LEFT JOIN ps.v_ps_params_cross param ON s6.id = param.id_geom_site
----) ON s6.id_site = s.id
--LEFT JOIN ps.r_infeq_1200m s7 ON s.id = s7.id_site
WHERE s.date_fin IS NULL
AND s3.nom_court::text = 'Pelouses sèches'::text
--AND s3.id = 2
--AND s6.date = (SELECT MAX(date) FROM sites.r_sites_geom WHERE id_site = s.id)
--AND s6.date_insert = (
-- SELECT MAX(date_insert) FROM sites.r_sites_geom WHERE id_site = s.id AND date = (
-- SELECT MAX(date) FROM sites.r_sites_geom WHERE id_site = s.id))
--AND s7.infeq_1200 IS True
ORDER BY s.id, s6."date" DESC NULLS LAST
;"""
grant = """
GRANT ALL ON TABLE ps.v_pelouseseches_all TO grp_admin;
GRANT SELECT ON TABLE ps.v_pelouseseches_all TO grp_consult;
"""
comment = """
COMMENT ON VIEW ps.v_pelouseseches_all IS 'Vue des sites à pelouses sèches et milieux thermophiles';
COMMENT ON COLUMN ps.v_pelouseseches_all.site_code IS 'Identifiant de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.nom IS 'Nom de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.district_nat IS 'District naturel sur lequel est positionner la majeur partie de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.source IS 'Nom de la couche source de la pelouse sèche au sein du CEN Isère.';
COMMENT ON COLUMN ps.v_pelouseseches_all.id_origine IS 'Identifiant d''origine de la pelouse sèche au sein de la couche source.';
COMMENT ON COLUMN ps.v_pelouseseches_all.auteur_site IS 'Auteur ayant caractérisé la pelouse sèche pour la première fois.';
COMMENT ON COLUMN ps.v_pelouseseches_all.auteur_geom IS 'Auteur ayant définis la géometrie actuelle de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.auteur_attrs IS 'Auteur le plus récent ayant défini les attributs de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.date_site IS 'Date de la première description de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.date_geom IS 'Date de la géométrie.';
COMMENT ON COLUMN ps.v_pelouseseches_all.date_attrs IS 'Date des attributs les plus récents.';
COMMENT ON COLUMN ps.v_pelouseseches_all.type_milieu IS 'Caractérisation du milieu.';
COMMENT ON COLUMN ps.v_pelouseseches_all.type_site IS '';
COMMENT ON COLUMN ps.v_pelouseseches_all.rmq_site IS 'Remarques générale concernant la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.rmq_fct_majeur IS 'Remarques sur les fonctions majeurs de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.rmq_interet_patri IS 'Remarques sur les intérêts patrimoniaux de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.rmq_bilan_menace IS 'Remarques globales sur les menaces qui concernent la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.rmq_orient_act IS 'Remarques sur les orientations et les actes de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.rmq_usage_process IS 'Remarques concernant les usages et les processus naturels de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.statut IS 'Statut (Communautaire, Prioritaire ou non défini) de la pelouse sèche définit suivant la Directive Habitat.';
COMMENT ON COLUMN ps.v_pelouseseches_all.pratique IS 'Pratique agricole réalisée sur la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.recouvrement IS 'Niveau de recouvrement du sol herbacé par rapport au sol nu.';
COMMENT ON COLUMN ps.v_pelouseseches_all.embrouss IS 'Niveau d''embroussaillement de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.tx_embrouss IS 'Taux d''embroussaillement de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.n_hab1 IS 'Pourcentage de présence de l''habitat 1 sur 4 de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.cb_hab1 IS 'Identifiants CORINE Biotopes constituant l''habitat 1 sur 4 de la pelouse sèche.\n- & : Entremêlement d''habitat\n- / : Habitat en transition dans le sens de lecture\n- (..) : Habitat suspecté.';
COMMENT ON COLUMN ps.v_pelouseseches_all.lb_hab1 IS 'Libellé(s) CORINE Biotopes constituant(s) l''habitat 1 sur 4 de la pelouse sèche. Chaque élément de la liste est séparé par un '';''.';
COMMENT ON COLUMN ps.v_pelouseseches_all.n_hab2 IS 'Pourcentage de présence de l''habitat 2 sur 4 de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.cb_hab2 IS 'Identifiants CORINE Biotopes constituant l''habitat 2 sur 4 de la pelouse sèche.\n- & : Entremêlement d''habitat\n- / : Habitat en transition dans le sens de lecture\n- (..) : Habitat suspecté.';
COMMENT ON COLUMN ps.v_pelouseseches_all.lb_hab2 IS 'Libellé(s) CORINE Biotopes constituant(s) l''habitat 2 sur 4 de la pelouse sèche. Chaque élément de la liste est séparé par un '';''.';
COMMENT ON COLUMN ps.v_pelouseseches_all.n_hab3 IS 'Pourcentage de présence de l''habitat tertiaire sur la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.cb_hab3 IS 'Identifiants CORINE Biotopes constituant l''habitat 3 sur 4 de la pelouse sèche.\n- & : Entremêlement d''habitat\n- / : Habitat en transition dans le sens de lecture\n- (..) : Habitat suspecté.';
COMMENT ON COLUMN ps.v_pelouseseches_all.lb_hab3 IS 'Libellé(s) CORINE Biotopes constituant(s) l''habitat 3 sur 4 de la pelouse sèche. Chaque élément de la liste est séparé par un '';''.';
COMMENT ON COLUMN ps.v_pelouseseches_all.n_hab4 IS 'Pourcentage de présence de l''habitat majoritaire sur la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_all.cb_hab4 IS 'Identifiants CORINE Biotopes constituant l''habitat 4 sur 4 de la pelouse sèche.\n- & : Entremêlement d''habitat\n- / : Habitat en transition dans le sens de lecture\n- (..) : Habitat suspecté.';
COMMENT ON COLUMN ps.v_pelouseseches_all.lb_hab4 IS 'Libellé(s) CORINE Biotopes constituant(s) l''habitat 4 sur 4 de la pelouse sèche. Chaque élément de la liste est séparé par un '';''.';
"""
with con.begin() as cnx:
cnx.execute(v_pelouseseches_all)
cnx.execute(grant)
cnx.execute(comment)
v_termophile = (v_pelouseseches_all
.replace('v_pelouseseches_all','v_termophile')
.replace('Pelouses sèches','Milieux thermophile'))
grant = grant.replace('v_pelouseseches_all','v_termophile')
comment = (comment
.replace('v_pelouseseches_all','v_termophile')
.replace('de la pelouse sèche','du milieux thermophile'))
with con.begin() as cnx:
cnx.execute(v_termophile)
cnx.execute(grant)
cnx.execute(comment)
v_pelouseseches = """
CREATE OR REPLACE VIEW ps.v_pelouseseches
AS
SELECT
*
FROM ps.v_pelouseseches_all s
LEFT JOIN ps.r_infeq_1200m s7 ON s.site_code = s7.id_site
WHERE
s7.infeq_1200 IS True
ORDER BY s.site_code DESC NULLS LAST
"""
grant = """
GRANT ALL ON TABLE ps.v_pelouseseches TO grp_admin;
GRANT SELECT ON TABLE ps.v_pelouseseches TO grp_consult;
"""
comment = """
COMMENT ON VIEW ps.v_pelouseseches IS 'Vue des sites à pelouses sèches strictes, situées à niveau ou sous 1200 mètre';
COMMENT ON COLUMN ps.v_pelouseseches.site_code IS 'Identifiant de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.nom IS 'Nom de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.district_nat IS 'District naturel sur lequel est positionner la majeur partie de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.source IS 'Nom de la couche source de la pelouse sèche au sein du CEN Isère.';
COMMENT ON COLUMN ps.v_pelouseseches.id_origine IS 'Identifiant d''origine de la pelouse sèche au sein de la couche source.';
COMMENT ON COLUMN ps.v_pelouseseches.auteur_site IS 'Auteur ayant caractérisé la pelouse sèche pour la première fois.';
COMMENT ON COLUMN ps.v_pelouseseches.auteur_geom IS 'Auteur ayant définis la géometrie actuelle de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.auteur_attrs IS 'Auteur le plus récent ayant défini les attributs de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.date_site IS 'Date de la première description de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.date_geom IS 'Date de la géométrie.';
COMMENT ON COLUMN ps.v_pelouseseches.date_attrs IS 'Date des attributs les plus récents.';
COMMENT ON COLUMN ps.v_pelouseseches.type_milieu IS 'Caractérisation du milieu.';
COMMENT ON COLUMN ps.v_pelouseseches.type_site IS '';
COMMENT ON COLUMN ps.v_pelouseseches.rmq_site IS 'Remarques générale concernant la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.rmq_fct_majeur IS 'Remarques sur les fonctions majeurs de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.rmq_interet_patri IS 'Remarques sur les intérêts patrimoniaux de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.rmq_bilan_menace IS 'Remarques globales sur les menaces qui concernent la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.rmq_orient_act IS 'Remarques sur les orientations et les actes de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.rmq_usage_process IS 'Remarques concernant les usages et les processus naturels de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.statut IS 'Statut (Communautaire, Prioritaire ou non défini) de la pelouse sèche définit suivant la Directive Habitat.';
COMMENT ON COLUMN ps.v_pelouseseches.pratique IS 'Pratique agricole réalisée sur la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.recouvrement IS 'Niveau de recouvrement du sol herbacé par rapport au sol nu.';
COMMENT ON COLUMN ps.v_pelouseseches.embrouss IS 'Niveau d''embroussaillement de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.tx_embrouss IS 'Taux d''embroussaillement de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.n_hab1 IS 'Pourcentage de présence de l''habitat 1 sur 4 de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.cb_hab1 IS 'Identifiants CORINE Biotopes constituant l''habitat 1 sur 4 de la pelouse sèche.\n- & : Entremêlement d''habitat\n- / : Habitat en transition dans le sens de lecture\n- (..) : Habitat suspecté.';
COMMENT ON COLUMN ps.v_pelouseseches.lb_hab1 IS 'Libellé(s) CORINE Biotopes constituant(s) l''habitat 1 sur 4 de la pelouse sèche. Chaque élément de la liste est séparé par un '';''.';
COMMENT ON COLUMN ps.v_pelouseseches.n_hab2 IS 'Pourcentage de présence de l''habitat 2 sur 4 de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.cb_hab2 IS 'Identifiants CORINE Biotopes constituant l''habitat 2 sur 4 de la pelouse sèche.\n- & : Entremêlement d''habitat\n- / : Habitat en transition dans le sens de lecture\n- (..) : Habitat suspecté.';
COMMENT ON COLUMN ps.v_pelouseseches.lb_hab2 IS 'Libellé(s) CORINE Biotopes constituant(s) l''habitat 2 sur 4 de la pelouse sèche. Chaque élément de la liste est séparé par un '';''.';
COMMENT ON COLUMN ps.v_pelouseseches.n_hab3 IS 'Pourcentage de présence de l''habitat tertiaire sur la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.cb_hab3 IS 'Identifiants CORINE Biotopes constituant l''habitat 3 sur 4 de la pelouse sèche.\n- & : Entremêlement d''habitat\n- / : Habitat en transition dans le sens de lecture\n- (..) : Habitat suspecté.';
COMMENT ON COLUMN ps.v_pelouseseches.lb_hab3 IS 'Libellé(s) CORINE Biotopes constituant(s) l''habitat 3 sur 4 de la pelouse sèche. Chaque élément de la liste est séparé par un '';''.';
COMMENT ON COLUMN ps.v_pelouseseches.n_hab4 IS 'Pourcentage de présence de l''habitat majoritaire sur la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches.cb_hab4 IS 'Identifiants CORINE Biotopes constituant l''habitat 4 sur 4 de la pelouse sèche.\n- & : Entremêlement d''habitat\n- / : Habitat en transition dans le sens de lecture\n- (..) : Habitat suspecté.';
COMMENT ON COLUMN ps.v_pelouseseches.lb_hab4 IS 'Libellé(s) CORINE Biotopes constituant(s) l''habitat 4 sur 4 de la pelouse sèche. Chaque élément de la liste est séparé par un '';''.';
"""
with con.begin() as cnx:
cnx.execute(v_pelouseseches)
cnx.execute(grant)
cnx.execute(comment)
v_pelouseseches_sup1200 = """
CREATE OR REPLACE VIEW ps.v_pelouseseches_sup1200
AS
SELECT
*
FROM ps.v_pelouseseches_all s
LEFT JOIN ps.r_infeq_1200m s7 ON s.site_code = s7.id_site
WHERE
s7.infeq_1200 IS False
ORDER BY s.site_code DESC NULLS LAST
"""
grant = """
GRANT ALL ON TABLE ps.v_pelouseseches_sup1200 TO grp_admin;
GRANT SELECT ON TABLE ps.v_pelouseseches_sup1200 TO grp_consult;
"""
comment = """
COMMENT ON VIEW ps.v_pelouseseches IS 'Vue des sites à pelouses sèches strictes, situées au dessus de 1200 mètre';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.site_code IS 'Identifiant de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.nom IS 'Nom de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.district_nat IS 'District naturel sur lequel est positionner la majeur partie de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.source IS 'Nom de la couche source de la pelouse sèche au sein du CEN Isère.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.id_origine IS 'Identifiant d''origine de la pelouse sèche au sein de la couche source.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.auteur_site IS 'Auteur ayant caractérisé la pelouse sèche pour la première fois.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.auteur_geom IS 'Auteur ayant définis la géometrie actuelle de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.auteur_attrs IS 'Auteur le plus récent ayant défini les attributs de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.date_site IS 'Date de la première description de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.date_geom IS 'Date de la géométrie.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.date_attrs IS 'Date des attributs les plus récents.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.type_milieu IS 'Caractérisation du milieu.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.type_site IS '';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.rmq_site IS 'Remarques générale concernant la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.rmq_fct_majeur IS 'Remarques sur les fonctions majeurs de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.rmq_interet_patri IS 'Remarques sur les intérêts patrimoniaux de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.rmq_bilan_menace IS 'Remarques globales sur les menaces qui concernent la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.rmq_orient_act IS 'Remarques sur les orientations et les actes de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.rmq_usage_process IS 'Remarques concernant les usages et les processus naturels de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.statut IS 'Statut (Communautaire, Prioritaire ou non défini) de la pelouse sèche définit suivant la Directive Habitat.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.pratique IS 'Pratique agricole réalisée sur la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.recouvrement IS 'Niveau de recouvrement du sol herbacé par rapport au sol nu.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.embrouss IS 'Niveau d''embroussaillement de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.tx_embrouss IS 'Taux d''embroussaillement de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.n_hab1 IS 'Pourcentage de présence de l''habitat 1 sur 4 de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.cb_hab1 IS 'Identifiants CORINE Biotopes constituant l''habitat 1 sur 4 de la pelouse sèche.\n- & : Entremêlement d''habitat\n- / : Habitat en transition dans le sens de lecture\n- (..) : Habitat suspecté.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.lb_hab1 IS 'Libellé(s) CORINE Biotopes constituant(s) l''habitat 1 sur 4 de la pelouse sèche. Chaque élément de la liste est séparé par un '';''.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.n_hab2 IS 'Pourcentage de présence de l''habitat 2 sur 4 de la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.cb_hab2 IS 'Identifiants CORINE Biotopes constituant l''habitat 2 sur 4 de la pelouse sèche.\n- & : Entremêlement d''habitat\n- / : Habitat en transition dans le sens de lecture\n- (..) : Habitat suspecté.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.lb_hab2 IS 'Libellé(s) CORINE Biotopes constituant(s) l''habitat 2 sur 4 de la pelouse sèche. Chaque élément de la liste est séparé par un '';''.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.n_hab3 IS 'Pourcentage de présence de l''habitat tertiaire sur la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.cb_hab3 IS 'Identifiants CORINE Biotopes constituant l''habitat 3 sur 4 de la pelouse sèche.\n- & : Entremêlement d''habitat\n- / : Habitat en transition dans le sens de lecture\n- (..) : Habitat suspecté.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.lb_hab3 IS 'Libellé(s) CORINE Biotopes constituant(s) l''habitat 3 sur 4 de la pelouse sèche. Chaque élément de la liste est séparé par un '';''.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.n_hab4 IS 'Pourcentage de présence de l''habitat majoritaire sur la pelouse sèche.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.cb_hab4 IS 'Identifiants CORINE Biotopes constituant l''habitat 4 sur 4 de la pelouse sèche.\n- & : Entremêlement d''habitat\n- / : Habitat en transition dans le sens de lecture\n- (..) : Habitat suspecté.';
COMMENT ON COLUMN ps.v_pelouseseches_sup1200.lb_hab4 IS 'Libellé(s) CORINE Biotopes constituant(s) l''habitat 4 sur 4 de la pelouse sèche. Chaque élément de la liste est séparé par un '';''.';
"""
with con.begin() as cnx:
cnx.execute(v_pelouseseches_sup1200)
cnx.execute(grant)
cnx.execute(comment)
v_pelouseseches_noalti = """
CREATE OR REPLACE VIEW ps.v_pelouseseches_noalti
AS
SELECT
*
FROM ps.v_pelouseseches_all s
LEFT JOIN ps.r_infeq_1200m s7 ON s.site_code = s7.id_site
WHERE
s7.infeq_1200 IS NULL
ORDER BY s.site_code DESC NULLS LAST
"""
grant = """
GRANT ALL ON TABLE ps.v_pelouseseches_noalti TO grp_admin;
"""
comment = """
COMMENT ON VIEW ps.v_pelouseseches_noalti IS 'Vue des sites à pelouses sèches strictes, ne possèdant pas de critères ''infeq_1200''';
"""
with con.begin() as cnx:
cnx.execute(v_pelouseseches_noalti)
cnx.execute(grant)
cnx.execute(comment)
# test = """
# SELECT * FROM ps.v_pelouseseches_all;
# """
# data = gpd.read_postgis(
# sql = test,
# con = con)