init depot renew
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
from pycen import zh,con_bdcen
|
||||
import geopandas as gpd
|
||||
|
||||
zh = zh()
|
||||
|
||||
dzh = zh.v_zoneshumides()
|
||||
col_date = dzh.columns[dzh.columns.str.contains('date')]
|
||||
dzh[col_date] = dzh[col_date].astype(str)
|
||||
site = gpd.read_postgis('SELECT * FROM sites.c_sites_zonages WHERE date_fin IS NULL',con_bdcen)
|
||||
|
||||
col_rmq = dzh.columns[dzh.columns.str.contains('rmq')]
|
||||
|
||||
c1 = dzh[dzh.code_cb.str.contains('54.1',na=False)]
|
||||
c2 = c1[c1.intersects(site.unary_union)]
|
||||
c3 = dzh[dzh.code_cb.str.contains('54.1') &
|
||||
(
|
||||
dzh.rmq_interet_patri.str.contains('tufi',case=False)
|
||||
# dzh.rmq_site.str.contains('tufi',case=False) |
|
||||
# dzh.rmq_fct_majeur.str.contains('tufi',case=False) |
|
||||
# dzh.rmq_bilan_menace.str.contains('tufi',case=False) |
|
||||
# dzh.rmq_orient_act.str.contains('tufi',case=False) |
|
||||
# dzh.rmq_usage_process.str.contains('tufi',case=False) |
|
||||
# dzh.rmq_activ_hum.str.contains('tufi',case=False)
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
to_file = '/home/colas/Documents/tmp/diagnos_tuffière.gpkg'
|
||||
c1.to_file(to_file,layer='541 only',driver='GPKG')
|
||||
c2.to_file(to_file,layer='541 ENS',driver='GPKG')
|
||||
c3.to_file(to_file,layer='541 TUF',driver='GPKG')
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,324 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-.
|
||||
|
||||
import geopandas as gpd
|
||||
from pycen import con,zh
|
||||
from os import path,listdir
|
||||
from re import findall
|
||||
|
||||
v_zh = zh().v_zoneshumides()
|
||||
PATH = '/media/cgeier/SRV/FICHIERS/OUTILS/CARTOGRAPHIE/ESPACE DE TRAVAIL/ETUDES/Zones humides'
|
||||
lst_layer = [x for x in listdir(PATH) if (x.endswith('.shp') or x.endswith('.gpkg')) and x.startswith('ZHP')]
|
||||
|
||||
def upper_first_letter(s):
|
||||
if s is None or gpd.pd.isna(s):
|
||||
return s
|
||||
else:
|
||||
return s[0].upper() + s[1:]
|
||||
|
||||
|
||||
def manual_replace(s, old, new, index):
|
||||
if s is None or gpd.pd.isna(s):
|
||||
return s
|
||||
else:
|
||||
if old == s[index]:
|
||||
return s[:index] + new + s[index +1:]
|
||||
else :
|
||||
return s
|
||||
|
||||
|
||||
def extract_info(df,value):
|
||||
|
||||
t1 = df[0].str.lower().str.contains(value,na=False)
|
||||
t2 = df[1].str.lower().str.contains(value,na=False)
|
||||
t3 = df[2].str.lower().str.contains(value,na=False)
|
||||
t4 = df[3].str.lower().str.contains(value,na=False)
|
||||
t5 = df[4].str.lower().str.contains(value,na=False)
|
||||
df[5] = None
|
||||
|
||||
for i,t in enumerate([t1,t2,t3,t4,t5]):
|
||||
if t.any():
|
||||
df.loc[t,5] = df[t][i]
|
||||
|
||||
return df[5].str.strip()
|
||||
|
||||
|
||||
def extract_descripti2(df):
|
||||
df['statut'] = extract_info(df,'isit|possible ?|absence zh|non cartographier')
|
||||
df['source'] = extract_info(df,'photointe|ortho|scan|information communale')
|
||||
return df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
gdf = gpd.GeoDataFrame()
|
||||
for layer in lst_layer:
|
||||
print(layer)
|
||||
data = gpd.read_file(path.join(PATH,layer))
|
||||
gdf = gpd.pd.concat([gdf,data])
|
||||
|
||||
gdf.DATEMODIF = gpd.pd.to_datetime(gdf.DATEMODIF,format='mixed')
|
||||
gdf.columns = gdf.columns.str.lower()
|
||||
gdf.sort_values(['datemodif'],inplace=True,ignore_index=True,ascending=False)
|
||||
gdf.drop(columns=['X','Y'],inplace=True,errors='ignore')
|
||||
gdf.rename_geometry('geom',inplace=True)
|
||||
# Suppression des doublons de géometries - temps de calcul long
|
||||
gdf.drop_duplicates(subset='geom',inplace=True,ignore_index=True,keep='first')
|
||||
|
||||
tmp = (gdf.descripti2
|
||||
.str.replace('/','|')
|
||||
.str.replace('06|19','06/19')
|
||||
.str.replace('04|12|2019','04/12/2019')
|
||||
.str.replace('vistier','visiter')
|
||||
.str.replace('AbsenceZH','Absence ZH')
|
||||
.str.replace('Zone humide non cartographiée et','non cartographier | ZH')
|
||||
.str.replace('continuité zh de la gère, à visiter','continuité zh de la gère | à visiter')
|
||||
.str.split('\\|| - ',expand=True)
|
||||
.replace('',None))
|
||||
res = extract_descripti2(tmp)
|
||||
gdf[['statut','source']] = res[['statut','source']]
|
||||
|
||||
gdf['comment'] = (gdf.descripti2
|
||||
.str.replace('vistier','visiter')
|
||||
.str.replace('AbsenceZH','Absence ZH')
|
||||
.str.replace('Zone humide non cartographiée et','non cartographier | ZH')
|
||||
.str.replace('continuité zh de la gère, à visiter','continuité zh de la gère | à visiter')
|
||||
.str.replace('à visiter','A visiter')
|
||||
.replace([x for x in gdf.statut.unique() if x is not None],'',regex=True)
|
||||
.replace([x for x in gdf.source.unique() if x is not None],'',regex=True)
|
||||
.str.strip()
|
||||
.replace('',None)
|
||||
.apply(lambda x: manual_replace(x,'|','',0)).str.strip()
|
||||
.apply(lambda x: manual_replace(x,'|','',0)).str.strip()
|
||||
.replace('',None)
|
||||
.apply(lambda x: manual_replace(x,'/','',0)).str.strip()
|
||||
.apply(lambda x: manual_replace(x,'|','',len(x)-1) if x is not None else None)
|
||||
.apply(lambda x: manual_replace(x,',','',len(x)-1) if x is not None else None)
|
||||
.replace('',None)
|
||||
.apply(lambda x: manual_replace(x,'/','',len(x)-1) if x is not None else None)
|
||||
.str.strip()
|
||||
.str.replace('| | ','|')
|
||||
.replace('',None)
|
||||
.apply(lambda x: manual_replace(x,'?','',len(x)-1) if x is not None else None)
|
||||
.str.strip()
|
||||
.apply(lambda x: manual_replace(x,'|','',len(x)-1) if x is not None else None)
|
||||
.str.strip()
|
||||
.str.replace('Extension zh amont - peupleraie','Peupleraie - extension zh amont')
|
||||
.str.replace("Zone d'effondrement - source","Source - zone d'effondrement")
|
||||
)
|
||||
|
||||
gdf['statut'] = (gdf['statut']
|
||||
.apply(lambda x: upper_first_letter(x))
|
||||
.str.replace(' ?','?')
|
||||
.str.replace('?',' ?')
|
||||
.replace('À visiter','A visiter'))
|
||||
gdf['source'] = (gdf['source']
|
||||
.apply(lambda x: upper_first_letter(x))
|
||||
.str.replace('Interprétation','Photointerprétation'))
|
||||
|
||||
is_inventaire = (gdf.observateu
|
||||
.str.contains('Le Pic Vert|LPO Isère|Lo Parvi|Nature Vivante|ONF',case=False,na=False))
|
||||
|
||||
isna_source = gdf['source'].isna()
|
||||
is_cenisere = gdf.observateu.str.contains('cen isère',case=False,na=False)
|
||||
gdf.loc[is_inventaire&isna_source,'source'] = 'Inventaire'
|
||||
|
||||
|
||||
gdf.loc[~is_inventaire&isna_source&~is_cenisere].observateu
|
||||
|
||||
gdf['type'] = (gdf.comment
|
||||
.str.replace('prairie','Prairie')
|
||||
.str.replace('Prairie humide','Prairiehumide')
|
||||
.str.split('\\|| ',n=1)
|
||||
.str[0]
|
||||
.str.replace('Prairiehumide','Prairie humide')
|
||||
.str.strip()
|
||||
.replace({
|
||||
'Roselières':'Roselière',
|
||||
'Ornières':'Ornière',
|
||||
'Fontaine':'Source',
|
||||
'Lac':'Mare/lac alpin',
|
||||
'Culture':'Culture temporairement inondée',
|
||||
'Grève':'Alluvion',
|
||||
'ZH':'Tourbière',
|
||||
})
|
||||
.apply(lambda x: upper_first_letter(x))
|
||||
)
|
||||
gdf['comment'] = (gdf.comment
|
||||
.str.replace('prairie','Prairie')
|
||||
.replace([x for x in gdf.type.unique() if x is not None or x.contains('INVZH')],'',regex=True)
|
||||
.str.replace('Prairie humide','Prairiehumide')
|
||||
.str.split('\\|| ',n=1)
|
||||
.str[1]
|
||||
.str.replace('Prairiehumide','Prairie humide')
|
||||
.str.strip()
|
||||
.replace('',None)
|
||||
.apply(lambda x: manual_replace(x,'-','',0)).str.strip()
|
||||
)
|
||||
et = gdf.comment.str.startswith('et ',na=False)
|
||||
de = gdf.comment.str.startswith('de ',na=False)
|
||||
gdf.loc[et,'comment'] = gdf.loc[et,'comment'].str.replace('et ','',n=1)
|
||||
gdf.loc[de,'comment'] = gdf.loc[de,'comment'].str.replace('de ','',n=1)
|
||||
|
||||
invzh = gdf['type'].str.contains('INVZH',na=False)
|
||||
gdf.loc[invzh,'comment'] = gdf.loc[invzh,'type']
|
||||
gdf.loc[invzh,'type'] = None
|
||||
|
||||
gdf.comment = (gdf.comment
|
||||
.str.strip()
|
||||
.str.removeprefix('\|')
|
||||
.str.strip()
|
||||
.str.removeprefix('?')
|
||||
.str.strip()
|
||||
.str.removeprefix('-')
|
||||
.str.removesuffix('-')
|
||||
.str.strip()
|
||||
.replace('',None)
|
||||
.apply(lambda x: upper_first_letter(x)))
|
||||
is_interpret = gdf['source'].str.contains('interprétation',case=False,na=False)
|
||||
gdf.loc[is_interpret,'ponctuelle'] = 'Incertain'
|
||||
gdf.loc[~is_interpret,'ponctuelle'] = 'Oui'
|
||||
|
||||
is_jlg = gdf.observateu=='CEN Isère (J.-L. Grossi)'
|
||||
type_isna = gdf['type'].isna()
|
||||
gdf.loc[is_jlg&type_isna,'type'] = 'Mare'
|
||||
gdf.drop(gdf[gdf.observateu.isna()].index,inplace=True)
|
||||
|
||||
is_balm = gdf.observateu=='CEN Isère (C. Balmain)'
|
||||
is_lafo = gdf.observateu=='CEN Isère (A.Lafon)'
|
||||
is_nico = gdf.observateu=='CEN Isère (N. Biron)'
|
||||
is_obs_inc = gdf.observateu=='Inconnu'
|
||||
is_zh = gdf['type']=='Petite zh'
|
||||
is_inconnu = gdf['type']=='Inconnu'
|
||||
gdf.loc[is_balm&~is_zh&is_inconnu,'type'] = 'Étang'
|
||||
gdf.loc[is_balm&is_zh&is_inconnu,'type'] = 'Suintement'
|
||||
gdf.loc[is_lafo&is_inconnu,'type'] = 'Boisement'
|
||||
gdf.loc[is_obs_inc&is_inconnu,'type'] = 'Étang'
|
||||
gdf.loc[is_nico&is_inconnu,'type'] = 'Prairie humide'
|
||||
|
||||
|
||||
is_visite = gdf['statut'].isin(['Possible ?','Groupement fontinal possible ?','Groupement fontinal, possible ?','Roselière et possible mare','Non cartographier'])
|
||||
gdf.loc[is_visite,'statut'] = 'A visiter'
|
||||
statut_isna = gdf['statut'].isna()
|
||||
gdf.loc[is_interpret&statut_isna,'statut'] = 'A visiter'
|
||||
|
||||
is_zh2 = gdf['statut'].isna()&gdf['comment'].str.startswith('Zh',na=False)
|
||||
gdf.loc[is_zh2,'statut'] = 'A décrire'
|
||||
|
||||
dict_type = {
|
||||
**dict.fromkeys(['Barrage','Bassin','Lagunage'],'Artificiel'),
|
||||
**dict.fromkeys(['Mégaphorbiaie','Prairie','Prairie humide','Roselière'],'Prairie humide et roselière'),
|
||||
**dict.fromkeys(['Source', 'Suintement', 'Talus'],'Source et Suintement'),
|
||||
**dict.fromkeys(['Ornière', 'Mare'],'Mare'),
|
||||
**dict.fromkeys(['Boisement', 'Peupleraie'],'Boisement'),
|
||||
}
|
||||
gdf['classe'] = (gdf['type']
|
||||
.replace(dict_type))
|
||||
|
||||
# Harmonisation des observateurs
|
||||
dict_obs = {
|
||||
'NB':'CEN Isère (N. Biron)',
|
||||
'Nico':'CEN Isère (N. Biron)',
|
||||
'Alix':'CEN Isère (A. Guedou)',
|
||||
'N BIRON':'CEN Isère (N. Biron)',
|
||||
'N. Biron (CEN Isère)':'CEN Isère (N. Biron)',
|
||||
'Nicolas Biron':'CEN Isère (N. Biron)',
|
||||
'M. Juton (CEN Isère)':'CEN Isère (M. Juton)',
|
||||
'CEN Isère (J.-L. Grossi)':'CEN Isère (J. L. Grossi)',
|
||||
'Lpo Isère (F. Frossard)':'LPO Isère (F. Frossard)',
|
||||
'Lpo Isère (H. Coffre)':'LPO Isère (H. Coffre)',
|
||||
'Lpo Isère (D. Loose)':'LPO Isère (D. Loose)',
|
||||
'J. F. Noblet':'Le Pic Vert (J. F. Noblet)',
|
||||
'R. Fonters':'LPO Isère (R. Fonters)',
|
||||
'R. Marciau':'CEN Isère (R. Marciau)',
|
||||
}
|
||||
gdf.replace(dict_obs,inplace=True)
|
||||
|
||||
# Suppression des ZH taguer Absence
|
||||
not_zh = gdf['statut']=='Absence ZH'
|
||||
idx_notzh = gdf[not_zh].index
|
||||
gdf.drop(idx_notzh,inplace=True)
|
||||
|
||||
# Intersection des zh_ponctuelles et zh_surfacique - temps de calcul long
|
||||
v_zh_union = v_zh.unary_union
|
||||
is_intersect = gdf.intersects(v_zh_union)
|
||||
|
||||
lst_drop = ['Tourbière','Culture','Boisement','Prairie humide','Roselière','Grève','Barrage','Lac']
|
||||
drop_prospect_pontc = ~gdf['type'].isin(lst_drop)
|
||||
gdf_zh = gdf[is_intersect&drop_prospect_pontc].copy()
|
||||
gdf_ponct= gdf[~is_intersect].copy()
|
||||
|
||||
|
||||
# A faire :
|
||||
# - Intersecter avec la couche zh surfacique,
|
||||
# dissocier les donner d'intersection et conserver
|
||||
# dans une autre couche les zones ponctuelles correspondant à des Mares/Etangs/bassin/Lac
|
||||
|
||||
bdd_table = 'zh_ponctuelles'
|
||||
gdf_ponct.to_postgis(bdd_table,con,'zones_humides',if_exists='replace',index=True if 'gid' not in gdf.columns else False,index_label='gid')
|
||||
|
||||
sql = """
|
||||
ALTER TABLE zones_humides.{tab} ADD PRIMARY KEY (gid);
|
||||
GRANT ALL ON TABLE zones_humides.{tab} TO grp_admin;
|
||||
GRANT SELECT ON TABLE zones_humides.{tab} TO grp_consult;
|
||||
""".format(tab=bdd_table)
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(sql)
|
||||
|
||||
bdd_table = 'zh_ponctuelles_in_zh'
|
||||
gdf_zh.to_postgis(bdd_table,con,'zones_humides',if_exists='replace',index=True if 'gid' not in gdf.columns else False,index_label='gid')
|
||||
|
||||
sql = """
|
||||
ALTER TABLE zones_humides.{tab} ADD PRIMARY KEY (gid);
|
||||
GRANT ALL ON TABLE zones_humides.{tab} TO grp_admin;
|
||||
GRANT SELECT ON TABLE zones_humides.{tab} TO grp_consult;
|
||||
""".format(tab=bdd_table)
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(sql)
|
||||
|
||||
|
||||
########### POTENTIELLE SURFACIQUE #############
|
||||
sql = """
|
||||
SELECT * FROM zones_humides.zh_ponctuelles;
|
||||
"""
|
||||
gdf = gpd.read_postgis(
|
||||
sql = sql,
|
||||
con = con)
|
||||
is_interpret = gdf['source'].str.contains('interprétation',case=False,na=False)
|
||||
del_notzh = ~(gdf['statut'] == 'Absence ZH')
|
||||
avere = gdf[~is_interpret&del_notzh].copy()
|
||||
is_visite = avere['statut'].isin(['Possible ?','Groupement fontinal, possible ?','Roselière et possible mare','Non cartographier'])
|
||||
avere.loc[is_visite,'statut'] = 'A visiter'
|
||||
dict_type = {
|
||||
**dict.fromkeys(['Barrage','Bassin','Lagunage'],'Artificiel'),
|
||||
**dict.fromkeys(['Mégaphorbiaie','Prairie','Prairie humide','Roselière'],'Prairie humide et roselière'),
|
||||
**dict.fromkeys(['Source', 'Suintement', 'Talus'],'Source et Suintement'),
|
||||
**dict.fromkeys(['Ornière', 'Mare'],'Mare'),
|
||||
**dict.fromkeys(['Boisement', 'Peupleraie'],'Boisement'),
|
||||
}
|
||||
avere['classe'] = (gdf['type']
|
||||
.replace(dict_type))
|
||||
|
||||
########### POTENTIELLE #############
|
||||
ptent = gdf[is_interpret&del_notzh].copy()
|
||||
|
||||
# avere['a_visiter'] = None
|
||||
avere.to_postgis('zh_ponctuelles_averee',con,'zones_humides',if_exists='replace',index_label='gid')
|
||||
|
||||
sql = """
|
||||
ALTER TABLE zones_humides.zh_ponctuelles_averee ADD PRIMARY KEY (gid);
|
||||
GRANT ALL ON TABLE zones_humides.zh_ponctuelles_averee TO grp_admin;
|
||||
GRANT SELECT ON TABLE zones_humides.zh_ponctuelles_averee TO grp_consult;
|
||||
"""
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(sql)
|
||||
|
||||
|
||||
|
||||
test = """
|
||||
SELECT * FROM zones_humides.zh_ponctuelles;
|
||||
"""
|
||||
data = gpd.read_postgis(
|
||||
sql = test,
|
||||
con = con)
|
||||
|
||||
@@ -0,0 +1,465 @@
|
||||
#!/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
|
||||
|
||||
|
||||
# Parametres bdd
|
||||
user = 'cen_admin'
|
||||
pwd = '#CEN38@venir'
|
||||
adr = '91.134.194.221'
|
||||
port = '5432'
|
||||
base = 'azalee'
|
||||
|
||||
url = URL.create('postgresql+psycopg2',
|
||||
username=user,
|
||||
password=pwd,
|
||||
host=adr,
|
||||
database=base,
|
||||
)
|
||||
con = create_engine(url)
|
||||
|
||||
v_zoneshumides = """
|
||||
DROP VIEW IF EXISTS zones_humides.v_zoneshumides;
|
||||
CREATE OR REPLACE VIEW zones_humides.v_zoneshumides
|
||||
AS WITH temp1 as (
|
||||
SELECT DISTINCT ON (s.id)
|
||||
s.id,
|
||||
max(s6.date) "date"
|
||||
FROM sites.sites s
|
||||
JOIN sites.type_milieu s3 ON s.id_type_milieu = s3.id
|
||||
JOIN sites.r_sites_geom s6 ON s.id::text = s6.id_site::text
|
||||
WHERE s.date_fin IS NULL
|
||||
AND s3.nom_court::text = 'Milieux humides'::text
|
||||
GROUP BY s.id
|
||||
), hab as (
|
||||
SELECT
|
||||
s62.id_geom_site,
|
||||
string_agg(s62.id_cb,';') code_cb,
|
||||
string_agg(s621.lb_hab_fr,';') lib_cb
|
||||
FROM zones_humides.r_site_habitat s62 JOIN ref_habitats.corine_biotope s621 ON s62.id_cb = s621.id
|
||||
WHERE s62."valid"
|
||||
GROUP BY 1
|
||||
), usagprocess AS (
|
||||
SELECT
|
||||
s65.id_geom_site,
|
||||
string_agg(s651.nom,';') activ_hum,
|
||||
string_agg(s652.nom,';') impact,
|
||||
string_agg(s653.nom,';') "position",
|
||||
string_agg(s65.remarques,';') rmq_activ_hum
|
||||
FROM zones_humides.r_site_usageprocess s65
|
||||
JOIN zones_humides.param_activ_hum s651 ON s65.id_activ_hum = s651.id
|
||||
JOIN zones_humides.param_impact s652 ON s65.id_impact = s652.id
|
||||
JOIN zones_humides.param_position s653 ON s65.id_position = s653.id
|
||||
WHERE s65."valid"
|
||||
GROUP BY 1
|
||||
), cnx as (
|
||||
SELECT
|
||||
s63.id_geom_site,
|
||||
s631.nom connexion
|
||||
FROM zones_humides.r_site_type_connect s63
|
||||
JOIN zones_humides.param_type_connect s631 ON s63.id_param_connect = s631.id
|
||||
WHERE s63."valid"
|
||||
), tmp_auteur_site as (
|
||||
SELECT
|
||||
s.id,
|
||||
string_agg(btrim(concat(s11.nom, ' ', s11.prenom,' (',COALESCE(s111.abbrev, s111.nom),')')),';') 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.personne s11
|
||||
JOIN personnes.organisme s111 ON s11.id_organisme = s111.id) 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 = 'Milieux humides'::text
|
||||
GROUP BY s.id
|
||||
), tmp_auteur_geom as (
|
||||
SELECT
|
||||
s6.id,
|
||||
string_agg(btrim(concat(s611.nom, ' ', s611.prenom,' (',COALESCE(s6111.abbrev, s6111.nom),')')),';') 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.personne s611
|
||||
JOIN personnes.organisme s6111 ON s611.id_organisme = s6111.id) 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 = 'Milieux humides'::text
|
||||
GROUP BY s6.id
|
||||
)
|
||||
SELECT
|
||||
s.id AS site_code,
|
||||
s.nom,
|
||||
s1.auteur_site,
|
||||
s61.auteur_geom,
|
||||
s6.geom,
|
||||
s.date_deb AS date_site,
|
||||
s6.date AS date_geom,
|
||||
s3.nom_court AS type_milieu,
|
||||
s4.nom AS type_site,
|
||||
s5.nom AS typo_sdage,
|
||||
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,
|
||||
s62.code_cb,
|
||||
s62.lib_cb,
|
||||
ct1.fct_bio,
|
||||
ct1.fct_hydro,
|
||||
ct1.int_patri,
|
||||
ct1."val_socioEco",
|
||||
ct2.crit_delim,
|
||||
ct2.crit_def_esp,
|
||||
s65.activ_hum,
|
||||
s65.impact,
|
||||
s65."position",
|
||||
s65.rmq_activ_hum,
|
||||
(string_to_array(ct3.entree_eau,'//'))[1] entree_eau_reg,
|
||||
(string_to_array(ct3.entree_eau,'//'))[2] entree_eau_perm,
|
||||
(string_to_array(ct3.entree_eau,'//'))[3] entree_eau_topo,
|
||||
(string_to_array(ct3.sortie_eau,'//'))[1] sortie_eau_reg,
|
||||
(string_to_array(ct3.sortie_eau,'//'))[2] sortie_eau_perm,
|
||||
(string_to_array(ct3.sortie_eau,'//'))[3] sortie_eau_topo,
|
||||
s63.connexion,
|
||||
CASE WHEN s64."valid" THEN s64.id_origsub END origine_sub,
|
||||
CASE WHEN s64."valid" THEN s641.nom END freq_sub,
|
||||
CASE WHEN s64."valid" THEN s642.nom END etendu_sub
|
||||
FROM sites.sites s
|
||||
JOIN temp1 w USING (id)
|
||||
LEFT JOIN tmp_auteur_site s1 ON s.id = s1.id
|
||||
LEFT 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
|
||||
LEFT JOIN sites.typo_sdage s5 ON s.id_typo_sdage::text = s5.id::text
|
||||
LEFT JOIN (sites.r_sites_geom s6
|
||||
LEFT JOIN tmp_auteur_geom s61 ON s6.id = s61.id
|
||||
LEFT JOIN hab s62 ON s6.id = s62.id_geom_site
|
||||
LEFT JOIN cnx s63 ON s6.id = s63.id_geom_site
|
||||
LEFT JOIN (zones_humides.r_site_sub s64
|
||||
JOIN (zones_humides.param_sub s641 JOIN zones_humides.type_param_sub s6411 ON s6411.id = s641.id_type) ON s64.id_freqsub = s641.id
|
||||
JOIN (zones_humides.param_sub s642 JOIN zones_humides.type_param_sub s6421 ON s6421.id = s642.id_type) ON s64.id_etendsub = s642.id
|
||||
) ON s6.id = s64.id_geom_site
|
||||
LEFT JOIN usagprocess s65 ON s6.id = s65.id_geom_site
|
||||
LEFT JOIN crosstab(
|
||||
'SELECT
|
||||
s63.id_geom_site::bigint,
|
||||
s632.nom_court type_param,
|
||||
string_agg(
|
||||
CASE WHEN s63.description IS NULL THEN s631.nom
|
||||
WHEN s63.description = '''' THEN s631.nom
|
||||
ELSE CONCAT(s631.nom,'' ('',s63.description,'')'') END,
|
||||
'';'') fct
|
||||
FROM zones_humides.r_site_fctecosociopatri s63
|
||||
JOIN (zones_humides.param_fct_eco_socio_patri s631
|
||||
JOIN zones_humides.type_param_fct s632 ON s631.id_type = s632.id
|
||||
) ON s63.id_fct = s631.id
|
||||
WHERE s63."valid"
|
||||
GROUP BY 1,2
|
||||
ORDER BY 1,2,3',
|
||||
'SELECT DISTINCT s632.nom_court FROM zones_humides.r_site_fctecosociopatri s63
|
||||
JOIN (zones_humides.param_fct_eco_socio_patri s631
|
||||
JOIN zones_humides.type_param_fct s632 ON s631.id_type = s632.id
|
||||
) ON s63.id_fct = s631.id
|
||||
ORDER BY 1 DESC;'
|
||||
) AS ct1 ("id_geom_site" bigint, "fct_bio" text, "fct_hydro" text, "int_patri" text, "val_socioEco" text) ON s6.id = ct1.id_geom_site
|
||||
LEFT JOIN crosstab(
|
||||
'SELECT
|
||||
s64.id_geom_site::bigint,
|
||||
s642.nom_court type_param,
|
||||
string_agg(
|
||||
CASE WHEN s64.description IS NULL THEN s641.nom
|
||||
WHEN s64.description = '''' THEN s641.nom
|
||||
ELSE CONCAT(s641.nom,'' ('',s64.description,'')'') END,
|
||||
'';'') fct
|
||||
FROM zones_humides.r_site_critdelim s64
|
||||
JOIN (zones_humides.param_delim_fct s641
|
||||
JOIN zones_humides.type_param_delim_fct s642 ON s641.id_type = s642.id
|
||||
) ON s64.id_crit_delim = s641.id
|
||||
WHERE s64."valid"
|
||||
GROUP BY 1,2
|
||||
ORDER BY 1,2,3'
|
||||
) AS ct2 ("id_geom_site" bigint, "crit_delim" text, "crit_def_esp" text) ON s6.id = ct2.id_geom_site
|
||||
LEFT JOIN crosstab(
|
||||
'SELECT
|
||||
s64.id_geom_site,
|
||||
s64.in_out,
|
||||
CONCAT(
|
||||
--''reg_hydro : '',
|
||||
string_agg(s641.nom,'';''),''//'',
|
||||
--''permanence : '',
|
||||
string_agg(s642.nom,'';''),''//'',
|
||||
--''rmq_toponymie : '',
|
||||
string_agg(s64.rmq_toponymie,'';'')
|
||||
) hydro
|
||||
FROM zones_humides.r_site_reghydro s64
|
||||
LEFT JOIN zones_humides.param_reg_hydro s641 ON s64.id_reg_hydro = s641.id
|
||||
LEFT JOIN zones_humides.param_permanence s642 ON s64.id_permanence = s642.id
|
||||
WHERE s64."valid"
|
||||
GROUP BY 1,2
|
||||
ORDER BY 1,2',
|
||||
'SELECT DISTINCT in_out FROM zones_humides.r_site_reghydro ORDER BY 1 DESC;'
|
||||
) AS ct3 ("id_geom_site" bigint, "entree_eau" text, "sortie_eau" text) ON s6.id = ct3.id_geom_site
|
||||
|
||||
) ON s.id::text = s6.id_site::text
|
||||
WHERE s.date_fin IS NULL
|
||||
AND s3.nom_court::text = 'Milieux humides'::text
|
||||
AND s6.date = w.date
|
||||
--AND s63."valid" AND s64."valid"
|
||||
ORDER BY s.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;
|
||||
"""
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(v_zoneshumides)
|
||||
cnx.execute(grant)
|
||||
|
||||
|
||||
|
||||
|
||||
v_pelouseseche = """
|
||||
DROP VIEW IF EXISTS ps.v_pelouseseches;
|
||||
CREATE OR REPLACE VIEW ps.v_pelouseseches
|
||||
AS WITH temp1 as (
|
||||
SELECT DISTINCT ON (s.id)
|
||||
s.id,
|
||||
max(s6.date) "date"
|
||||
FROM sites.sites s
|
||||
JOIN sites.type_milieu s3 ON s.id_type_milieu = s3.id
|
||||
JOIN sites.r_sites_geom s6 ON s.id::text = s6.id_site::text
|
||||
WHERE s.date_fin IS NULL
|
||||
AND s3.nom_court::text = 'Pelouses sèches'::text
|
||||
GROUP BY s.id
|
||||
), hab as (
|
||||
SELECT
|
||||
id_geom_site,
|
||||
date,
|
||||
(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 tmp as (
|
||||
SELECT
|
||||
id_geom_site,
|
||||
MAX("date") date
|
||||
FROM ps.r_site_habitat
|
||||
GROUP BY 1
|
||||
)
|
||||
SELECT
|
||||
s61.id_geom_site,
|
||||
s61.date,
|
||||
s61.index,
|
||||
CONCAT(s61.n_hab,'//',
|
||||
s62.code_hab,'//',
|
||||
s621.lb_hab_fr) hab
|
||||
FROM ps.r_site_habitat s61
|
||||
JOIN (ps.r_hab_cb s62 JOIN ref_habitats.corine_biotope s621 ON s62.code_hab = s621.id) ON s61.id = s62.id_sitehab
|
||||
JOIN tmp USING (id_geom_site)
|
||||
WHERE s61.date = tmp.date
|
||||
ORDER BY 1,2,3;$$,
|
||||
'SELECT DISTINCT index FROM ps.r_site_habitat'
|
||||
) AS ct ("id_geom_site" bigint, "date" date, "hab1" text, "hab2" text, "hab3" text, "hab4" text)
|
||||
), tmp_auteur_site as (
|
||||
SELECT
|
||||
s.id,
|
||||
string_agg(btrim(concat(s11.nom, ' ', s11.prenom,' (',COALESCE(s111.abbrev, s111.nom),')')),';') 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.personne s11
|
||||
JOIN personnes.organisme s111 ON s11.id_organisme = s111.id) 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
|
||||
), tmp_auteur_geom as (
|
||||
SELECT
|
||||
s6.id,
|
||||
string_agg(btrim(concat(s611.nom, ' ', s611.prenom,' (',COALESCE(s6111.abbrev, s6111.nom),')')),';') 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.personne s611
|
||||
JOIN personnes.organisme s6111 ON s611.id_organisme = s6111.id) 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
|
||||
)
|
||||
SELECT DISTINCT ON (s.id)
|
||||
s.id AS site_code,
|
||||
s.nom,
|
||||
s1.auteur_site,
|
||||
s61.auteur_geom,
|
||||
s6.geom,
|
||||
s.date_deb AS date_site,
|
||||
s6.date AS date_geom,
|
||||
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,
|
||||
ct1.statut,
|
||||
ct1.pratique,
|
||||
ct1.recouvrement,
|
||||
ct1.embrouss,
|
||||
ct1.taux 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 temp1 w USING (id)
|
||||
LEFT JOIN tmp_auteur_site s1 ON s.id = s1.id
|
||||
LEFT 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
|
||||
LEFT JOIN (sites.r_sites_geom s6
|
||||
LEFT JOIN tmp_auteur_geom s61 ON s6.id = s61.id
|
||||
LEFT JOIN hab ON s6.id = hab.id_geom_site
|
||||
LEFT JOIN crosstab(
|
||||
'SELECT
|
||||
s63.id_geom_site::bigint,
|
||||
s63.taux,
|
||||
s632.nom,
|
||||
s631.description
|
||||
FROM ps.r_site_param s63
|
||||
JOIN (ps.param s631
|
||||
JOIN ps.type_param s632 ON s631.id_type = s632.id
|
||||
) ON s63.id_param = s631.id
|
||||
--GROUP BY 1,2
|
||||
ORDER BY 1,2,3',
|
||||
'SELECT nom FROM ps.type_param'
|
||||
) AS ct1 ("id_geom_site" bigint, "taux" text, "recouvrement" text, "embrouss" text, "pratique" text, "statut" text) ON s6.id = ct1.id_geom_site
|
||||
) ON s6.id_site = s.id
|
||||
WHERE s.date_fin IS NULL AND s3.nom_court::text = 'Pelouses sèches'::text
|
||||
ORDER BY s.id, s6.date DESC NULLS LAST
|
||||
;"""
|
||||
grant = """
|
||||
GRANT ALL ON TABLE ps.v_pelouseseches TO grp_admin;
|
||||
GRANT SELECT ON TABLE ps.v_pelouseseches TO grp_consult;
|
||||
"""
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(v_pelouseseche)
|
||||
cnx.execute(grant)
|
||||
|
||||
|
||||
|
||||
###########################
|
||||
######## TEST CODE ########
|
||||
###########################
|
||||
|
||||
select_import = """
|
||||
WITH temp1 as (
|
||||
SELECT DISTINCT ON (s.id)
|
||||
s.id,
|
||||
max(s6.date) "date"
|
||||
FROM sites.sites s
|
||||
JOIN sites.type_milieu s3 ON s.id_type_milieu = s3.id
|
||||
JOIN sites.r_sites_geom s6 ON s.id::text = s6.id_site::text
|
||||
WHERE s.date_fin IS NULL
|
||||
AND s3.nom_court::text = 'Pelouses sèches'::text
|
||||
GROUP BY s.id
|
||||
), tmp_auteur_site as (
|
||||
SELECT
|
||||
s.id,
|
||||
string_agg(btrim(concat(s11.nom, ' ', s11.prenom,' (',COALESCE(s111.abbrev, s111.nom),')')),';') 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.personne s11
|
||||
JOIN personnes.organisme s111 ON s11.id_organisme = s111.id) 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
|
||||
), tmp_auteur_geom as (
|
||||
SELECT
|
||||
s6.id,
|
||||
string_agg(btrim(concat(s611.nom, ' ', s611.prenom,' (',COALESCE(s6111.abbrev, s6111.nom),')')),';') 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.personne s611
|
||||
JOIN personnes.organisme s6111 ON s611.id_organisme = s6111.id) 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
|
||||
)
|
||||
SELECT DISTINCT ON (s.id)
|
||||
s.id AS site_code,
|
||||
s.nom,
|
||||
s1.auteur_site,
|
||||
s61.auteur_geom,
|
||||
s6.geom,
|
||||
s.date_deb AS date_site,
|
||||
s6.date AS date_geom,
|
||||
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
|
||||
FROM sites.sites s
|
||||
JOIN temp1 w USING (id)
|
||||
LEFT JOIN tmp_auteur_site s1 ON s.id = s1.id
|
||||
LEFT 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
|
||||
LEFT JOIN (sites.r_sites_geom s6
|
||||
LEFT JOIN tmp_auteur_geom s61 ON s6.id = s61.id
|
||||
LEFT JOIN crosstab(
|
||||
'SELECT
|
||||
s63.id_geom_site::bigint,
|
||||
s63.taux tx_embrouss,
|
||||
s632.nom type_param,
|
||||
s631.description param
|
||||
FROM ps.r_site_param s63
|
||||
JOIN (ps.param s631
|
||||
JOIN ps.type_param s632 ON s631.id_type = s632.id
|
||||
) ON s63.id_param = s631.id
|
||||
--GROUP BY 1,2
|
||||
ORDER BY 1,2,3',
|
||||
'SELECT nom FROM ps.type_param'
|
||||
) AS ct1 ("id_geom_site" bigint, "taux" text, "statut" text, "embrouss" text, "pratique" text, "recouvremt" text) ON s6.id = ct1.id_geom_site
|
||||
) ON s6.id_site = s.id
|
||||
WHERE s.date_fin IS NULL AND s3.nom_court::text = 'Pelouses sèches'::text
|
||||
ORDER BY s.id, s6.date DESC NULLS LAST
|
||||
;
|
||||
"""
|
||||
|
||||
select_import = """
|
||||
SELECT * FROM zones_humides.v_zoneshumides
|
||||
;
|
||||
"""
|
||||
data = gpd.read_postgis(
|
||||
sql = text(select_import),
|
||||
con = con,
|
||||
geom_col='geom')
|
||||
@@ -0,0 +1,34 @@
|
||||
#!/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
|
||||
|
||||
|
||||
# Parametres bdd
|
||||
from pycen import con
|
||||
|
||||
v_perso = """
|
||||
DROP VIEW IF EXISTS personnes.v_personne CASCADE;
|
||||
CREATE OR REPLACE VIEW personnes.v_personne
|
||||
AS
|
||||
SELECT
|
||||
a.id,
|
||||
CASE WHEN btrim(lower(concat(a.nom, ' ', a.prenom))) = lower(COALESCE(b.abbrev, b.nom))
|
||||
then btrim(concat(a.nom, ' ', a.prenom))
|
||||
else string_agg(btrim(concat(a.nom, ' ', a.prenom,' (',COALESCE(b.abbrev, b.nom),')')),';')
|
||||
end AS auteur
|
||||
FROM personnes.personne a
|
||||
JOIN personnes.organisme b ON a.id_organisme = b.id
|
||||
GROUP BY a.id,b.abbrev, b.nom;
|
||||
"""
|
||||
grant = """
|
||||
GRANT ALL ON TABLE personnes.v_personne TO grp_admin;
|
||||
GRANT SELECT ON TABLE personnes.v_personne TO grp_consult;
|
||||
"""
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(text(v_perso))
|
||||
cnx.execute(grant)
|
||||
@@ -0,0 +1,499 @@
|
||||
#!/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
|
||||
|
||||
|
||||
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)
|
||||
@@ -0,0 +1,57 @@
|
||||
#!/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
|
||||
|
||||
|
||||
# Parametres bdd
|
||||
from pycen import con
|
||||
|
||||
v_rpg2021_ilots_anonymes_isere = """
|
||||
DROP VIEW IF EXISTS ref_territoire.v_rpg2021_ilots_anonymes_isere;
|
||||
CREATE OR REPLACE VIEW ref_territoire.v_rpg2021_ilots_anonymes_isere
|
||||
AS SELECT --s.id,
|
||||
s.*
|
||||
FROM ref_territoire.rpg2021_ilots_anonymes_reg s,
|
||||
ref_territoire.dept_isere reg
|
||||
WHERE st_intersects(s.geom, reg.geom);
|
||||
"""
|
||||
grant_rpg2021_ilots = """
|
||||
ALTER TABLE ref_territoire.v_rpg2021_ilots_anonymes_isere OWNER TO cen_admin;
|
||||
GRANT ALL ON TABLE ref_territoire.v_rpg2021_ilots_anonymes_isere TO cen_admin;
|
||||
GRANT ALL ON TABLE ref_territoire.v_rpg2021_ilots_anonymes_isere TO grp_admin;
|
||||
GRANT SELECT ON TABLE ref_territoire.v_rpg2021_ilots_anonymes_isere TO grp_consult;
|
||||
"""
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(v_rpg2021_ilots_anonymes_isere)
|
||||
cnx.execute(grant_rpg2021_ilots)
|
||||
|
||||
|
||||
v_rpg2021_parcelles_graphiques_isere = (v_rpg2021_ilots_anonymes_isere
|
||||
.replace('v_rpg2021_ilots_anonymes_isere','v_rpg2021_parcelles_graphiques_isere')
|
||||
.replace('rpg2021_ilots_anonymes_reg','rpg2021_parcelles_graphiques_reg'))
|
||||
grant = grant_rpg2021_ilots.replace('v_rpg2021_ilots_anonymes_isere','v_rpg2021_parcelles_graphiques_isere')
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(v_rpg2021_parcelles_graphiques_isere)
|
||||
cnx.execute(grant)
|
||||
|
||||
|
||||
v_rpg2020_ilots_anonymes_isere = v_rpg2021_ilots_anonymes_isere.replace('2021','2020')
|
||||
grant = grant_rpg2021_ilots.replace('2021','2020')
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(v_rpg2020_ilots_anonymes_isere)
|
||||
cnx.execute(grant)
|
||||
|
||||
|
||||
v_rpg2020_parcelles_graphiques_isere = v_rpg2021_ilots_anonymes_isere.replace('v_rpg2021_ilots_anonymes_isere','v_rpg2020_parcelles_graphiques_isere')
|
||||
grant = grant_rpg2021_ilots.replace('v_rpg2021_ilots_anonymes_isere','v_rpg2020_parcelles_graphiques_isere')
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(v_rpg2020_parcelles_graphiques_isere)
|
||||
cnx.execute(grant)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
from pycen import con
|
||||
from sqlalchemy import text
|
||||
|
||||
v_sites = '''
|
||||
DROP VIEW IF EXISTS sites.v_sites;
|
||||
CREATE OR REPLACE VIEW sites.v_sites
|
||||
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
|
||||
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
|
||||
GROUP BY s6.id
|
||||
ORDER BY s6.id
|
||||
)
|
||||
SELECT
|
||||
g.id id_geom_site,
|
||||
s.id code_site,
|
||||
s.nom,
|
||||
s1.auteur_site,
|
||||
g1.auteur_geom,
|
||||
s.date_deb date,
|
||||
s.date_fin,
|
||||
s.id_old_site,
|
||||
s3.nom_court AS type_milieu,
|
||||
s4.nom AS type_site,
|
||||
s5.id||' - '||s5.nom AS typo_sdage,
|
||||
s.dept,
|
||||
s.org,
|
||||
s.num,
|
||||
s.remarques,
|
||||
s.nom_com,
|
||||
s.nom_com_json,
|
||||
g.geom,
|
||||
g.date date_geom,
|
||||
g.link_pdf,
|
||||
g.rmq_fct_majeur,
|
||||
g.rmq_interet_patri,
|
||||
g.rmq_bilan_menace,
|
||||
g.rmq_orient_act,
|
||||
g.rmq_usage_process,
|
||||
g2.libelle lot,
|
||||
g.id_origine,
|
||||
g.date_insert
|
||||
FROM sites.sites s
|
||||
LEFT JOIN tmp_auteur_site s1 ON s.id = s1.id
|
||||
LEFT JOIN sites.autre_nom s2 ON s.id = s2.id_site
|
||||
LEFT 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
|
||||
LEFT JOIN sites.typo_sdage s5 ON s.id_typo_sdage::text = s5.id::text
|
||||
LEFT JOIN sites.r_sites_geom g ON s.id = g.id_site
|
||||
LEFT JOIN tmp_auteur_geom g1 ON g.id = g1.id
|
||||
LEFT JOIN sites.lots g2 USING (id_lot)
|
||||
;
|
||||
'''
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(text(v_sites))
|
||||
@@ -0,0 +1,555 @@
|
||||
#!/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
|
||||
|
||||
|
||||
# Parametres bdd
|
||||
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_geom_site)
|
||||
a.id_geom_site,
|
||||
c.auteur,
|
||||
MAX(a.date) date,
|
||||
string_agg(a.id_cb,';') code_cb,
|
||||
string_agg(b.lb_hab_fr,';') 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
|
||||
ORDER BY a.id_geom_site
|
||||
"""
|
||||
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_geom_site,a1.nom,a2.nom)
|
||||
a.id_geom_site,
|
||||
c.auteur,
|
||||
MAX(a.date) 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
|
||||
ORDER BY 1
|
||||
)
|
||||
SELECT DISTINCT ON (id_geom_site)
|
||||
id_geom_site,
|
||||
auteur,
|
||||
MAX(date) 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
|
||||
ORDER BY 1
|
||||
"""
|
||||
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
|
||||
a.id_geom_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_geom_site = a.id_geom_site)
|
||||
ORDER BY 1
|
||||
"""
|
||||
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
|
||||
a.id_geom_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_geom_site = a.id_geom_site)
|
||||
AND s6411.nom = 'Submersion fréquente'
|
||||
AND s6421.nom = 'Submersion étendue'
|
||||
ORDER BY 1
|
||||
"""
|
||||
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
|
||||
id_geom_site,
|
||||
auteur,
|
||||
MAX(date) 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
|
||||
)
|
||||
SELECT
|
||||
a.id_geom_site::bigint,
|
||||
d.auteur,
|
||||
MAX(a.date) date,
|
||||
c.nom_court type_param,
|
||||
string_agg(
|
||||
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_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_geom_site,d.auteur,c.nom_court
|
||||
ORDER BY 1,4;$$,
|
||||
$$SELECT DISTINCT nom_court FROM zones_humides.type_param_fct ORDER BY 1 ASC;$$
|
||||
) AS ct (
|
||||
"id_geom_site" bigint,
|
||||
"auteur" text,
|
||||
"date" date,
|
||||
"fct_bio" text,
|
||||
"fct_hydro" text,
|
||||
"int_patri" text,
|
||||
"val_socioEco" text)
|
||||
GROUP BY id_geom_site,auteur,fct_bio,fct_hydro,int_patri,"val_socioEco"
|
||||
ORDER BY 1,3,2;
|
||||
"""
|
||||
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_geom_site)
|
||||
id_geom_site,
|
||||
auteur,
|
||||
MAX(date) 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,
|
||||
d.auteur,
|
||||
MAX(a.date) date,
|
||||
c.nom_court type_param,
|
||||
string_agg(
|
||||
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 a.id_geom_site,d.auteur,c.nom_court
|
||||
ORDER BY 1,2,3$$,
|
||||
$$SELECT DISTINCT nom_court FROM zones_humides.type_param_delim_fct ORDER BY 1 DESC;$$
|
||||
) AS ct (
|
||||
"id_geom_site" bigint,
|
||||
"auteur" text,
|
||||
"date" date,
|
||||
"crit_delim" text,
|
||||
"crit_def_esp" text)
|
||||
GROUP BY id_geom_site,auteur,crit_delim,crit_def_esp
|
||||
ORDER BY 1,3,2;
|
||||
"""
|
||||
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_geom_site)
|
||||
id_geom_site,
|
||||
auteur,
|
||||
MAX(date) 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,
|
||||
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_geom_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_geom_site" bigint,
|
||||
"auteur" text,
|
||||
"date" date,
|
||||
"entree_eau" text,
|
||||
"sortie_eau" text)
|
||||
GROUP BY id_geom_site,auteur,entree_eau,sortie_eau
|
||||
ORDER BY 1,3,2;
|
||||
"""
|
||||
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
|
||||
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 = 'Milieux humides'::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 = 'Milieux humides'::text
|
||||
GROUP BY s6.id
|
||||
ORDER BY s6.id
|
||||
)
|
||||
SELECT
|
||||
s.id AS site_code,
|
||||
(SELECT ARRAY_AGG(id_site_old) FROM (values (s7.id_site_old)) AS value(id_site_old) WHERE id_site_old IS NOT NULL) old_code,
|
||||
s.nom,
|
||||
s2.autre_nom,
|
||||
s1.auteur_site,
|
||||
s61.auteur_geom,
|
||||
(
|
||||
SELECT DISTINCT ON (date) auteur
|
||||
FROM (values (s6.date,s61.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,
|
||||
s.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,
|
||||
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,
|
||||
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.geom
|
||||
FROM sites.sites s
|
||||
LEFT JOIN tmp_auteur_site s1 ON s.id = s1.id
|
||||
LEFT JOIN sites.autre_nom s2 ON s.id = s2.id_site
|
||||
LEFT 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
|
||||
LEFT JOIN sites.typo_sdage s5 ON s.id_typo_sdage::text = s5.id::text
|
||||
LEFT JOIN (sites.r_sites_geom s6
|
||||
LEFT JOIN tmp_auteur_geom s61 ON s6.id = s61.id
|
||||
LEFT JOIN zones_humides.v_zh_hab s62 ON s6.id = s62.id_geom_site
|
||||
LEFT JOIN zones_humides.v_zh_usgprocess s63 ON s6.id = s63.id_geom_site
|
||||
LEFT JOIN zones_humides.v_zh_connex s64 ON s6.id = s64.id_geom_site
|
||||
LEFT JOIN zones_humides.v_zh_submertion s65 ON s6.id = s65.id_geom_site
|
||||
LEFT JOIN zones_humides.v_zh_fctecosociopatri_cross s66 ON s6.id = s66.id_geom_site
|
||||
LEFT JOIN zones_humides.v_zh_critdelim_cross s67 ON s6.id = s67.id_geom_site
|
||||
LEFT JOIN zones_humides.v_zh_reghydro_cross s68 ON s6.id = s68.id_geom_site
|
||||
) ON s.id::text = s6.id_site::text
|
||||
LEFT JOIN sites.hist_id_site s7 ON s.id = s7.id_site_new
|
||||
WHERE s.date_fin IS NULL
|
||||
AND s3.nom_court::text = 'Milieux humides'::text
|
||||
AND s6.date = (SELECT MAX(date) FROM sites.r_sites_geom WHERE id_site = s.id)
|
||||
ORDER BY s.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.nom IS '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 = 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)]
|
||||
@@ -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)]
|
||||
@@ -0,0 +1,641 @@
|
||||
#!/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
|
||||
# Parametres bdd
|
||||
from sqlalchemy import create_engine, text
|
||||
from sqlalchemy.engine import URL
|
||||
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 author 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
|
||||
),
|
||||
d_max as (
|
||||
SELECT distinct on (id_site)
|
||||
a.id_site,
|
||||
c.auteur,
|
||||
a."date"
|
||||
FROM zones_humides.r_site_habitat a
|
||||
JOIN author c ON c.id_sitehab = a.id
|
||||
WHERE a."valid"
|
||||
ORDER BY a.id_site, "date" DESC
|
||||
)
|
||||
SELECT --distinct on (a.id_cb)
|
||||
d.id_site,
|
||||
d.auteur,
|
||||
d."date",
|
||||
string_agg(a.id_cb,';' order by a.id_cb asc) code_cb,
|
||||
string_agg(b.lb_hab_fr,';' order by a.id_cb asc) lib_cb
|
||||
FROM (SELECT distinct on (id_site,id_cb) * FROM zones_humides.r_site_habitat ) a
|
||||
JOIN ref_habitats.corine_biotope b ON a.id_cb = b.id
|
||||
JOIN d_max d on a.id_site = d.id_site
|
||||
WHERE a."valid"
|
||||
GROUP BY 1,2,3
|
||||
;"""
|
||||
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
|
||||
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
|
||||
),max_author as (
|
||||
SELECT DISTINCT ON (id_site)
|
||||
a.id_site,
|
||||
--(SELECT regexp_split_to_table(auth,',') FROM (values (string_agg(auteur,',' order by ROW()))) AS value(auth) Limit 1) auteur,
|
||||
auteur,
|
||||
a."date"
|
||||
FROM auteur
|
||||
JOIN zones_humides.r_site_fctecosociopatri a ON id_sitefct = a.id
|
||||
order by 1,3 DESC,2
|
||||
)
|
||||
SELECT DISTINCT ON (id_site)
|
||||
--id_geom_site,
|
||||
id_site,
|
||||
--(SELECT auteur ORDER BY ct."date" DESC) "date",
|
||||
"date",
|
||||
auteur,
|
||||
fct_bio,
|
||||
fct_hydro,
|
||||
int_patri,
|
||||
"val_socioEco"
|
||||
FROM crosstab(
|
||||
$$ WITH tmp_select as (
|
||||
SELECT
|
||||
max(a."id") id_sitefct,
|
||||
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,
|
||||
--(SELECT regexp_split_to_table(auth,',') FROM (values (string_agg(d.auteur,',' order by ROW()))) AS value(auth) Limit 1) 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
|
||||
--JOIN auteur d using (id_sitefct)
|
||||
GROUP BY id_site,type_param
|
||||
ORDER BY id_site,type_param;$$,
|
||||
$$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
|
||||
)
|
||||
JOIN max_author USING (id_site)
|
||||
--GROUP BY id_site,auteur,fct_bio,fct_hydro,int_patri,"val_socioEco"
|
||||
--WHERE id_site in ('38CG0110','38RD0057','38VS0063')
|
||||
ORDER BY id_site,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
|
||||
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
|
||||
),max_author as (
|
||||
SELECT DISTINCT ON (id_site)
|
||||
a.id_site,
|
||||
--(SELECT regexp_split_to_table(auth,',') FROM (values (string_agg(auteur,',' order by ROW()))) AS value(auth) Limit 1) auteur,
|
||||
auteur,
|
||||
a."date"
|
||||
FROM auteur
|
||||
JOIN zones_humides.r_site_critdelim a ON id_sitedelim = a.id
|
||||
order by 1,3 DESC,2
|
||||
)
|
||||
SELECT DISTINCT ON (id_site)
|
||||
--id_geom_site,
|
||||
id_site,
|
||||
"date",
|
||||
auteur,
|
||||
crit_delim,
|
||||
crit_def_esp
|
||||
FROM crosstab(
|
||||
$$ SELECT
|
||||
--a.id_geom_site::bigint,
|
||||
id_site,
|
||||
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,2
|
||||
ORDER BY 1$$,
|
||||
$$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)
|
||||
JOIN max_author USING (id_site)
|
||||
--GROUP BY id_site,auteur,crit_delim,crit_def_esp
|
||||
--WHERE id_site in ('38CG0110','38RD0057','38VS0063')
|
||||
ORDER BY id_site,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 possible 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.mnemo_sdage IS 'Libellé mnémonique 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 '';''.';
|
||||
COMMENT ON COLUMN zones_humides.v_zoneshumides.id_origine IS 'Identifiant d''origine de la zone fournie par un partenaire exterieur.';
|
||||
COMMENT ON COLUMN zones_humides.v_zoneshumides.geom IS 'Géometrie de la zone humide.';
|
||||
"""
|
||||
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
|
||||
with t1 as (
|
||||
SELECT
|
||||
v.site_code,
|
||||
r.nom,
|
||||
st_area(st_intersection(v.geom, r.geom)) area_intersect
|
||||
FROM zones_humides.v_zoneshumides v
|
||||
join ref_territoire.ref_biogeo r on st_intersects(v.geom, r.geom)
|
||||
--group by 1,2
|
||||
), t2 as (
|
||||
select
|
||||
site_code,
|
||||
nom,
|
||||
row_number() over (partition by site_code order by area_intersect desc) as ismax_ter
|
||||
from t1
|
||||
)
|
||||
SELECT (v.site_code::text || ' - '::text) || v.nom::text AS "NAME",
|
||||
split_part(v.auteur_geom, ' ('::text, 1) AS "REFERENT",
|
||||
replace(split_part(v.auteur_geom, ' ('::text, 2), ')'::text, ''::text) AS "ORG",
|
||||
split_part(v.typo_sdage, ' - '::text, 1) AS "TYPE",
|
||||
CASE
|
||||
WHEN t2.nom = 'alpin'::text THEN '1'::text
|
||||
WHEN t2.nom = 'continental'::text THEN '2'::text
|
||||
WHEN t2.nom = 'mediterraneen'::text THEN '4'::text
|
||||
ELSE NULL::text
|
||||
END AS "ODONATE",
|
||||
v.geom
|
||||
FROM zones_humides.v_zoneshumides v
|
||||
join t2 on v.site_code = t2.site_code and t2.ismax_ter = 1
|
||||
;
|
||||
"""
|
||||
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)]
|
||||
@@ -0,0 +1,187 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-
|
||||
#Nom : : del_psduplicated.py
|
||||
#Description : Suppessio, des géométries en doubon sous un nom différents et avec des erreurs d'intégration des données
|
||||
#Copyright : 2022-07-20, CEN38
|
||||
#Auteur : Colas Geier
|
||||
#Version : 1.0
|
||||
|
||||
import geopandas as gpd
|
||||
import pycen
|
||||
from pycen import con,update_to_sql
|
||||
|
||||
df1 = gpd.read_postgis('SELECT * FROM ps.v_covered_ps ORDER BY 2',con,geom_col='geom_old')
|
||||
df2 = gpd.read_postgis('SELECT * FROM ps.v_covered_ps ORDER BY 2',con,geom_col='geom_new')
|
||||
# df.reset_index(inplace=True, drop=False)
|
||||
df1.to_postgis('covered_ps_old',con,'ps','replace',False,geom_col='geom_old')
|
||||
df2.to_postgis('covered_ps_new',con,'ps','replace',False,geom_col='geom_new')
|
||||
|
||||
df = df1.copy()
|
||||
|
||||
# ('38BDAU0907','38BIEV0032','38BIEV0033','38BDAU0905','38PCHA1088','38PCHA1089','38PCHA1002','38PCHA0908','38VERC3112','38PCHA0316','38VERC3171','38PCHA0325','38VERC2662','38PCHA0232','38PCHA0244','38VERC2732','38PCHA1086','38PCHA1087','38VERC3206','38PCHA0332','38PCHA0297','38VERC3013','38VERC2983','38PCHA0291','38VERC2961','38PCHA0286','38VERC3212','38PCHA0333','38PCHA0326','38VERC3175','38PCHA1005','38PCHA0018','38PCHA0474','38VERC3681','38PCHA0044','38PCHA1007','38PCHA0910','38PCHA1003','38PCHA0274','38VERC2902','38PCHA0032','38PCHA1006','38PCHA0121','38VERC1824','38VERC1743','38PCHA0111','38PCHA1004','38PCHA0928','38VERC1848','38PCHA0123','38PCHA0057','38PCHA1008','38PCHA0065','38PCHA1009','38BDAU0908','38VERC2008','38VERC2495','38BELL0154','38GRES0637','38VERC3451','38VERC0383','38VERC3222','38VERC3348','38GRES0629','38VERC2912','38CHAR0502','38CHAR0045','38VERC2058','38VERC1931','38MATH0010','38VERC1924','38CHAR0040','38GRES0006','38CHAR0900','38BELL0030','38VERC2163','38GRES0066','38VERC2100','38CHAR0049','38VERC2187','38GRES0077','38VERC2272','38VERC2807','38CHAR0079','38VERC2658','38CHAR0066','38CHAR0100','38VERC3008','38CHAR0903','38BELL0005','38CHAR0901','38CHAR0008','38VERC2414','38VERC0219','38VERC2514','38GRES0084','38VERC3076','38GRES0119','38VERC3311','38GRES0132','38VERC2718','38CHAR0072','38VERC3205','38CHAR0115','38VERC3108','38BELL0049','38VERC2377','38VERC0215','38VERC2387','38VERC0216','38VERC2431','38BELL0035','38VERC2408','38GRES0080','38GRES0686','38VERC3623','38CHAR0468','38VERC2384','38MATH0111','38VERC2649','38BELL0198','38VERC2661','38GRES0437','38VERC1748','38VERC2614','38GRES0472','38GRES0462','38VERC2446','38TRIE0215','38VERC2356','38VERC2329','38TRIE0211','38VERC2315','38TRIE0210','38TRIE0222','38VERC2405','38VERC2439','38TRIE0227','38TRIE0228','38VERC2443','38TRIE0229','38VERC2455','38CHAR0902','38TRIE0022','38GRES0141','38VERC3408','38VERC3159','38CHAR0113','38CHAR0001','38CHAR0899','38CHAR0905','38GRES0028','38CHAR0906','38CHAR0012','38CHAR0017','38CHAR0908','38GRES0136','38VERC3376','38VERC1668','38GRES0053','38GRES0127','38VERC3197','38VERC1549','38GRES0045','38GRES0030','38CHAR0907','38GRES1039','38GRES0031','38BIEV0004','38VERC3399','38CHAR0904','38GRES0025','38CHAR0029','38VERC1533','38CHAR0133','38VERC3354','38CHAR0031','38VERC1618','38VERC3369','38CHAR0135','38VERC3464','38GRES0143','38GRES0016','38GRES1038','38BELL0192','38VERC2556','38VERC2513','38CHAR0402','38BELL0164','38BELL0492','38MATH0024','38VERC2487','38VERC2646','38TRIE0250','38VERC3523','38TRIE0377','38BELL0489','38BELL0155','38BELL0491','38MCHA0009','38BELL0490','38BELL0162','38VERC1687','38CHAR0034','38VERC1721','38BELL0025','38BELL0016','38CHAR0909','38MATH0005','38VERC1756','38BELL0043','38VERC2641','38CHAR0027','38CHAR0910','38GRES0089','38VERC2601','38GRES0092','38VERC2629')
|
||||
# ('38BIEV0032','38BDAU0907','38BDAU0905','38BIEV0033','38PCHA1089','38PCHA1088','38PCHA1002','38PCHA0908','38VERC3112','38PCHA0316','38VERC3171','38PCHA0325','38VERC2662','38PCHA0232','38VERC2732','38PCHA0244','38PCHA1086','38PCHA1087','38VERC3206','38PCHA0332','38VERC3013','38PCHA0297','38PCHA0291','38VERC2983','38VERC2961','38PCHA0286','38PCHA0333','38VERC3212','38PCHA0326','38VERC3175','38PCHA1005','38PCHA0018','38VERC3681','38PCHA0474','38PCHA1007','38PCHA0044','38PCHA0910','38PCHA1003','38VERC2902','38PCHA0274','38PCHA1006','38PCHA0032','38VERC1824','38PCHA0121','38PCHA0111','38VERC1743','38PCHA0928','38PCHA1004','38VERC1848','38PCHA0123','38PCHA0057','38PCHA1008','38PCHA1009','38PCHA0065','38BDAU0908','38VERC2008','38VERC2495','38BELL0154','38GRES0637','38VERC3451','38VERC0383','38VERC3222','38GRES0629','38VERC3348','38CHAR0502','38VERC2912','38VERC3623','38GRES0686','38CHAR0468','38VERC2384','38TRIE0215','38VERC2356','38VERC2329','38TRIE0211','38VERC2315','38TRIE0210','38VERC2405','38TRIE0222','38VERC2439','38TRIE0227','38VERC2443','38TRIE0228','38VERC2455','38TRIE0229','38VERC2487','38MATH0024','38VERC2646','38TRIE0250','38VERC3523','38TRIE0377')
|
||||
# ('38BDAU0907','38BIEV0032','38BDAU0905','38BIEV0033','38PCHA1089','38PCHA1088','38PCHA1002','38PCHA0908','38PCHA0316','38VERC3112','38VERC3171','38PCHA0325','38PCHA0232','38VERC2662','38VERC2732','38PCHA0244','38PCHA1086','38PCHA1087','38VERC3206','38PCHA0332','38VERC3013','38PCHA0297','38PCHA0291','38VERC2983','38PCHA0286','38VERC2961','38PCHA0333','38VERC3212','38PCHA0326','38VERC3175','38PCHA0018','38PCHA1005','38PCHA0474','38VERC3681','38PCHA0044','38PCHA1007','38PCHA0910','38PCHA1003','38VERC2902','38PCHA0274','38PCHA0032','38PCHA1006','38VERC1824','38PCHA0121','38VERC1743','38PCHA0111','38PCHA0928','38PCHA1004','38PCHA0123','38VERC1848','38PCHA0057','38PCHA1008','38PCHA0065','38PCHA1009')
|
||||
# ('38BDAU0907','38BIEV0032','38BDAU0905','38BIEV0033','38PCHA1088','38PCHA1089','38PCHA0316','38VERC3112','38PCHA0325','38VERC3171','38PCHA0232','38VERC2662','38PCHA0244','38VERC2732','38PCHA1087','38PCHA1086','38VERC3206','38PCHA0332','38VERC3013','38PCHA0297','38PCHA0291','38VERC2983','38PCHA0286','38VERC2961','38PCHA0333','38VERC3212','38VERC3175','38PCHA0326','38PCHA0018','38PCHA1005','38VERC3681','38PCHA0474','38PCHA0044','38PCHA1007','38PCHA0274','38VERC2902','38PCHA1006','38PCHA0032','38VERC1824','38PCHA0121','38VERC1743','38PCHA0111','38VERC1848','38PCHA0123','38PCHA0057','38PCHA1008','38PCHA0065','38PCHA1009')
|
||||
# ('38BDAU0907','38BIEV0032','38BDAU0905','38BIEV0033','38PCHA1089','38PCHA1088','38PCHA0316','38VERC3112','38PCHA0325','38VERC3171','38PCHA0232','38VERC2662','38VERC2732','38PCHA0244','38PCHA1086','38PCHA1087','38VERC3206','38PCHA0332','38VERC3013','38PCHA0297','38VERC2983','38PCHA0291','38VERC2961','38PCHA0286','38PCHA0333','38VERC3212','38VERC3175','38PCHA0326','38PCHA0018','38PCHA1005','38PCHA0274','38VERC2902','38PCHA0121','38VERC1824','38PCHA0111','38VERC1743','38VERC1848','38PCHA0123','38PCHA1008','38PCHA0057','38PCHA1009','38PCHA0065')
|
||||
# ('38BIEV0032','38BDAU0907','38BIEV0033','38BDAU0905','38PCHA1088','38PCHA1089','38PCHA1087','38PCHA1086')
|
||||
|
||||
v_ps = gpd.read_postgis(
|
||||
"SELECT * FROM ps.v_pelouseseches WHERE site_code in ('%s') ORDER BY source,geom"%"','".join(df.id_site.tolist())
|
||||
,pycen.con)
|
||||
v_ps.set_index(['site_code','district_nat'],inplace=True)
|
||||
v_ps.dropna(axis=1,how='all', inplace=True)
|
||||
v_ps.fillna('NA', inplace=True)
|
||||
|
||||
for col in v_ps.columns[v_ps.columns.str.startswith('auteur')]:
|
||||
tmp = v_ps[col].str.split(';')
|
||||
for x in tmp: x.sort()
|
||||
v_ps[col] = [';'.join(x) for x in tmp]
|
||||
|
||||
vp_clean = v_ps.drop_duplicates()
|
||||
|
||||
|
||||
v_ps.loc[~v_ps.index.isin(vp_clean.index)]
|
||||
v_ps.loc[~v_ps.index.isin(vp_clean.index)].droplevel(-1).index.tolist()
|
||||
# ('38CHAR0915','38CHAR0919','38CHAR0922','38CHAR0936','38CHAR0938','38CHAR0940','38CHAR1195','38CHAR1197','38CHAR1203','38CHAR1220','38CHAR1221','38CHAR1222','38CHAR1223','38CHAR1224','38CHAR1225','38CHAR1226','38CHAR1227','38CHAR1228','38CHAR1229','38CHAR1230','38CHAR1231','38CHAR1232','38CHAR1233','38CHAR1234','38CHAR1235','38CHAR1236','38CHAR1237','38CHAR1238','38CHAR1239','38CHAR1240','38CHAR1241','38CHAR1242','38CHAR1243','38CHAR1244','38CHAR1245','38GRES1073','38GRES1074','38GRES1075','38MCHA0049','38PCHA1083','38PCHA1208','38PCHA1210','38PCHA1215','38PCHA1221','38TRIE1173','38TRIE2416','38TRIE2481','38TRIE2548','38TRIE2563','38TRIE2590','38TRIE2592','38TRIE2594','38TRIE2595','38TRIE2596','38TRIE2597','38TRIE2598','38TRIE2599','38TRIE2602','38TRIE2604','38TRIE2605','38TRIE2607','38TRIE2608','38TRIE2610','38TRIE2611','38TRIE2614','38TRIE2615','38TRIE2616','38TRIE2618','38TRIE2619','38TRIE2620','38TRIE2621','38TRIE2622','38TRIE2623','38TRIE2624','38TRIE2625','38TRIE2626','38TRIE2627','38TRIE2628','38TRIE2629','38TRIE2631','38TRIE2632','38TRIE2633','38TRIE2634','38TRIE2635','38TRIE2636','38TRIE2637','38TRIE2638','38TRIE2639','38TRIE2640','38TRIE2641','38TRIE2644','38TRIE2645','38TRIE2646','38TRIE2647','38TRIE2648','38TRIE2650','38TRIE2651','38TRIE2652','38TRIE2653','38TRIE2654','38TRIE2656','38TRIE2657','38TRIE2658','38TRIE2659','38TRIE2662','38TRIE2663','38TRIE2664','38TRIE2665','38TRIE2666','38TRIE2667','38TRIE2668','38TRIE2669','38TRIE2670','38TRIE2671','38TRIE2672','38TRIE2674','38TRIE2675','38TRIE2676','38TRIE2677','38TRIE2678','38TRIE2679','38TRIE2680','38TRIE2682','38TRIE2683','38TRIE2688','38TRIE2689','38TRIE2690','38TRIE2693','38TRIE2695','38TRIE2696','38TRIE2697','38TRIE2698','38TRIE2699','38TRIE2700','38TRIE2701','38TRIE2702','38TRIE2703','38TRIE2704','38TRIE2705','38TRIE2707','38TRIE2708','38TRIE2710','38TRIE2712','38TRIE2713','38TRIE2714','38TRIE2715','38TRIE2720','38TRIE2721','38TRIE2722','38TRIE2723','38TRIE2724','38TRIE2727','38TRIE2731','38TRIE2735','38TRIE2736','38TRIE2739','38TRIE2741','38TRIE2743','38TRIE2744','38TRIE2749','38TRIE2750','38TRIE2758','38TRIE2760','38TRIE2762','38TRIE2764','38TRIE2765','38TRIE2766','38TRIE2767','38TRIE2768','38TRIE2769','38TRIE2771','38TRIE2776','38TRIE2780','38TRIE2788','38VERC3691','38VERC3692','38VERC3698','38VERC3701','38VERC3903','38VERC3904','38VERC3906','38VERC3921','38VERC3924','38VERC3936','38VERC3937','38VERC3940','38VERC3941','38VERC3943','38VERC3945','38VERC3946','38VERC3948','38VERC3949','38VERC3950','38VERC3953','38VERC4017','38VERC4104','38VERC4123','38VERC4124','38VERC4180','38VERC4187','38VERC4188','38VERC4197','38VERC4205','38VERC4218','38VERC4290','38VERC4294','38VERC4364','38VERC4392','38VERC4396','38VERC4405','38VERC4406','38VERC4407','38VERC4408','38VERC4409','38VERC4446','38VERC4447','38VERC4448','38VERC4453','38VERC4462','38VERC4464','38VERC4469','38VERC4484','38VERC4485','38VERC4492','38VERC4498','38VERC4512','38VERC4526','38VERC4527','38VERC4530','38VERC4544','38VERC4558','38VERC4576','38VERC4577','38VERC4578','38VERC4579','38VERC4585','38VERC4588','38VERC4590','38VERC4627','38VERC4628','38VERC4636','38VERC4638','38VERC4639','38VERC4640','38VERC4643','38VERC4649','38VERC4650','38VERC4654','38VERC4655','38VERC4656','38VERC4657','38VERC4658','38VERC4659','38VERC4660','38VERC4661','38VERC4662','38VERC4663','38VERC4664','38VERC4665','38VERC4666','38VERC4667','38VERC4668','38VERC4669','38VERC4670','38VERC4671','38VERC4672','38VERC4673','38VERC4674','38VERC4675','38VERC4676','38VERC4678','38VERC4679','38VERC4680','38VERC4681','38VERC4685','38VERC4686','38VERC4692')
|
||||
|
||||
|
||||
'38GRES1029','38GRES1031','38VERC0811','38VERC0861','38VERC1045','38VERC1427','38VERC1433','38VERC1453','38VERC1456','38VERC1465','38VERC1489','38VERC1494','38VERC3704','38VERC3708','38VERC4129','38VERC4134'
|
||||
'38BIEV0032','38BDAU0907','38BDAU0905','38BIEV0033','38PCHA1089','38PCHA1088','38PCHA1002','38PCHA0908','38VERC3112','38PCHA0316','38PCHA0906','38PCHA1001','38PCHA0325','38VERC3171','38PCHA0232','38VERC2662','38VERC2732','38PCHA0244','38PCHA1086','38PCHA1087','38PCHA0332','38VERC3206','38VERC3013','38PCHA0297','38VERC2983','38PCHA0291','38VERC2961','38PCHA0286','38PCHA0333','38VERC3212','38VERC3175','38PCHA0326','38PCHA0018','38PCHA1005','38PCHA0474','38VERC3681','38PCHA0044','38PCHA1007','38PCHA0910','38PCHA1003','38PCHA0274','38VERC2902','38PCHA1006','38PCHA0032','38PCHA0121','38VERC1824','38PCHA0111','38VERC1743','38PCHA1004','38PCHA0928','38PCHA0123','38VERC1848','38PCHA1008','38PCHA0057','38PCHA0065','38PCHA1009','38VERC2008','38BDAU0908','38BELL0154','38VERC2495','38GRES0637','38VERC3451','38VERC0383','38VERC3222','38VERC3348','38GRES0629','38VERC2912','38CHAR0502','38CHAR0045','38VERC2058','38VERC1931','38MATH0010','38CHAR0040','38VERC1924','38GRES0006','38CHAR0900','38VERC2163','38BELL0030','38VERC2100','38GRES0066','38VERC2187','38CHAR0049','38VERC2272','38GRES0077','38VERC2807','38CHAR0079','38VERC2658','38CHAR0066','38CHAR0100','38VERC3008','38BELL0005','38CHAR0903','38CHAR0008','38CHAR0901','38VERC0219','38VERC2414','38VERC2514','38GRES0084','38VERC3076','38GRES0119','38GRES0132','38VERC3311','38CHAR0072','38VERC2718','38CHAR0115','38VERC3205','38VERC3108','38BELL0049','38VERC0215','38VERC2377','38VERC2387','38VERC0216','38BELL0035','38VERC2431','38GRES0080','38VERC2408','38GRES0686','38VERC3623','38VERC2384','38CHAR0468','38MATH0111','38VERC2649','38VERC2661','38BELL0198','38VERC1748','38GRES0437','38GRES0472','38VERC2614','38GRES0462','38VERC2446','38TRIE0215','38VERC2356','38TRIE0211','38VERC2329','38VERC2315','38TRIE0210','38TRIE0222','38VERC2405','38VERC2439','38TRIE0227','38VERC2443','38TRIE0228','38VERC2455','38TRIE0229','38TRIE0022','38CHAR0902','38GRES0141','38VERC3408','38CHAR0113','38VERC3159','38CHAR0001','38CHAR0899','38CHAR0905','38GRES0028','38CHAR0012','38CHAR0906','38CHAR0017','38CHAR0908','38GRES0214','38VERC2141','38VERC3072','38VERC0290','38VERC3376','38GRES0136','38GRES0053','38VERC1668','38GRES0127','38VERC3197','38GRES0183','38GRES1040','38VERC1549','38GRES0045','38GRES0030','38CHAR0907','38GRES1039','38GRES0031','38VERC3399','38BIEV0004','38CHAR0904','38GRES0025','38VERC1533','38CHAR0029','38CHAR0133','38VERC3354','38CHAR0031','38VERC1618','38MATH0083','38VERC1830','38GRES0203','38VERC1858','38MATH0082','38VERC1820','38CHAR0176','38GRES1041','38GRES0251','38VERC2935','38VERC0254','38VERC1926','38VERC3369','38CHAR0135','38VERC3464','38GRES0143','38GRES1038','38GRES0016','38VERC3139','38GRES0278','38VERC2556','38BELL0192','38VERC2513','38CHAR0402','38BELL0164','38BELL0492','38MATH0024','38VERC2487','38TRIE0250','38VERC2646','38TRIE0377','38VERC3523','38BELL0489','38BELL0155','38BELL0491','38MCHA0009','38BELL0162','38BELL0490','38CHAR0034','38VERC1687','38VERC1721','38BELL0025','38BELL0016','38CHAR0909','38MATH0005','38VERC1756','38VERC2641','38BELL0043','38CHAR0027','38CHAR0910','38VERC2601','38GRES0089','38GRES0092','38VERC2629'
|
||||
|
||||
s = gpd.pd.Series([
|
||||
'CHA01','CHA01','CHA17','CHA17','STAP01','STAP01','CHE30','CHE30','STBO03','STBO03','STAN26','STAN26','STAN36','STAN36','STAN34','STAN34','STBO05','STBO05','STBO06','STBO06','STLA039','STLA039','STAN22','STAN22','MON50','MON50','MON56','MON56','MON55','MON55','STLA063','STLA063','STLA070','STLA070',
|
||||
])
|
||||
|
||||
sql = '''
|
||||
SELECT
|
||||
v1.site_code,
|
||||
v1.geom,
|
||||
v1."source",
|
||||
v1.rmq_usage_process,
|
||||
CASE WHEN v1.id_origine IS NULL THEN v2.id_origine ELSE v1.id_origine END id_origine
|
||||
--v1.id_origine --, v2.geom geom_new
|
||||
FROM ps.v_pelouseseches v1, ps.v_pelouseseches v2
|
||||
WHERE v1.geom = v2.geom
|
||||
AND v1.site_code <> v2.site_code
|
||||
ORDER BY 3,2;
|
||||
'''
|
||||
upd = gpd.read_postgis(sql,con)
|
||||
upd.drop_duplicates(inplace=True)
|
||||
upd.rename(columns={'site_code':'id_site'},inplace=True)
|
||||
upd.loc[upd.source=='PS_CHAMBARAN_CEN38_2013','rmq_usage_process'] = \
|
||||
upd.loc[upd.source=='PS_CHAMBARAN_CEN38_2013','rmq_usage_process'].replace(["\|",'\/','fasciès'],[" x "," x ",'faciès'],regex=True)
|
||||
upd = upd[['id_site','rmq_usage_process']]
|
||||
update_to_sql(upd,con,'r_sites_geom','sites','id_site')
|
||||
|
||||
'38MCHA0009','38BELL0491','38BELL0164','38BELL0492','38BELL0154','38VERC2495','38GRES1041','38CHAR0176','38VERC2614','38GRES0472','38VERC2649','38MATH0111','38BELL0198','38VERC2661','38GRES0437','38VERC1748','38MATH0082','38VERC1820','38VERC1830','38MATH0083','38PCHA1087','38PCHA1088','38PCHA1086','38PCHA1089','38VERC1858','38GRES0203','38BDAU0908','38VERC2008','38VERC1926','38VERC0254','38GRES0462','38VERC2446','38VERC2513','38CHAR0402','38BELL0192','38VERC2556','38VERC2384','38CHAR0468','38CHAR0502','38VERC2912','38GRES0214','38VERC2141','38VERC2935','38GRES0251','38VERC3222','38VERC0383','38VERC3072','38VERC0290','38GRES0637','38VERC3451','38VERC3348','38GRES0629','38GRES0278','38VERC3139','38VERC3623','38GRES0686','38BELL0489','38BELL0155','38BDAU0905','38BDAU0907','38BIEV0032','38BIEV0033','38GRES0183','38GRES1040','38BELL0490','38BELL0162','38VERC2629','38GRES0092','38VERC2058','38CHAR0045','38CHAR0115','38VERC3205','38CHAR0901','38CHAR0008','38VERC2431','38BELL0035','38GRES0080','38VERC2408','38VERC0216','38VERC2387','38VERC0215','38VERC2377','38BELL0043','38VERC2641','38CHAR0072','38VERC2718','38CHAR0066','38VERC2658','38CHAR0100','38VERC3008','38BELL0049','38VERC3108','38BELL0005','38CHAR0903','38GRES0119','38VERC3076','38GRES0084','38VERC2514','38CHAR0909','38BELL0016','38VERC3311','38GRES0132','38VERC1687','38CHAR0034','38VERC1756','38MATH0005','38VERC2807','38CHAR0079','38VERC2414','38VERC0219','38BELL0025','38VERC1721','38CHAR0910','38CHAR0027','38GRES0077','38VERC2272','38VERC2187','38CHAR0049','38GRES0066','38VERC2100','38VERC2163','38BELL0030','38GRES0089','38VERC2601','38GRES0006','38CHAR0900','38CHAR0040','38VERC1924','38MATH0010','38VERC1931','38VERC3112','38PCHA0316','38VERC3171','38PCHA0325','38PCHA0906','38PCHA1001','38VERC2732','38PCHA0244','38TRIE0250','38VERC2646','38VERC3399','38BIEV0004','38CHAR0904','38GRES0025','38CHAR0031','38VERC1618','38CHAR0908','38CHAR0017','38GRES0028','38CHAR0905','38TRIE0022','38CHAR0902','38GRES0141','38VERC3408','38CHAR0029','38VERC1533','38VERC3354','38CHAR0133','38GRES0143','38VERC3464','38GRES1038','38GRES0016','38VERC3369','38CHAR0135','38VERC1668','38GRES0053','38VERC3376','38GRES0136','38CHAR0001','38CHAR0899','38CHAR0113','38VERC3159','38VERC1549','38GRES0045','38GRES0127','38VERC3197','38CHAR0907','38GRES0030','38GRES1039','38GRES0031','38CHAR0012','38CHAR0906','38VERC1824','38PCHA0121','38PCHA0928','38PCHA1004','38VERC1848','38PCHA0123','38PCHA0111','38VERC1743','38VERC2487','38MATH0024','38VERC2315','38TRIE0210','38TRIE0211','38VERC2329','38TRIE0215','38VERC2356','38TRIE0222','38VERC2405','38TRIE0377','38VERC3523','38VERC2439','38TRIE0227','38TRIE0229','38VERC2455','38TRIE0228','38VERC2443','38VERC2902','38PCHA0274','38VERC3013','38PCHA0297','38PCHA0286','38VERC2961','38VERC2983','38PCHA0291','38VERC2662','38PCHA0232','38VERC3206','38PCHA0332','38VERC3212','38PCHA0333','38PCHA0326','38VERC3175','38PCHA1003','38PCHA0910','38PCHA1007','38PCHA0044','38VERC3681','38PCHA0474','38PCHA1006','38PCHA0032','38PCHA0018','38PCHA1005','38PCHA0057','38PCHA1008','38PCHA1009','38PCHA0065','38PCHA0908','38PCHA1002'
|
||||
|
||||
drop_site = [
|
||||
'38VERC2141','38VERC3072','38GRES1040','38VERC1830','38VERC1858',''
|
||||
]
|
||||
'38VERC2141','38VERC3072','38GRES1040','38VERC1830','38VERC1858','38VERC1820','38GRES1041','38VERC2935','38VERC1926','38VERC3139'
|
||||
('38VERC2058','38VERC1931','38VERC1924','38CHAR0900','38VERC2163','38VERC2100','38VERC2187','38VERC2272','38VERC2807','38VERC2658','38VERC3008','38CHAR0903','38CHAR0901','38VERC2414','38VERC2514','38VERC3076','38VERC3311','38VERC2718','38VERC3205','38VERC3108','38VERC2377','38VERC2387','38VERC2431','38VERC2408','38CHAR0902','38VERC3408','38VERC3159','38CHAR0899','38CHAR0905','38CHAR0906','38CHAR0908','38VERC3376','38VERC1668','38VERC3197','38VERC1549','38CHAR0907','38GRES1039','38VERC3399','38CHAR0904','38VERC1533','38VERC3354','38VERC1618','38VERC3369','38VERC3464','38GRES1038','38VERC1687','38VERC1721','38CHAR0909','38VERC1756','38VERC2641','38CHAR0910','38VERC2601','38VERC2629')
|
||||
('38VERC2649','38VERC2661','38VERC1748','38VERC2614','38VERC2446','38VERC2556','38VERC2513','38BELL0492','38BELL0489','38BELL0491','38BELL0490')
|
||||
'38VERC2495','38VERC2008'
|
||||
('38VERC2356','38VERC2329','38VERC2315','38VERC2405','38VERC2439','38VERC2443','38VERC2455','38VERC2487','38VERC2646','38VERC3523')
|
||||
('38VERC3451','38VERC3222','38VERC3348','38VERC2912','38VERC3623','38VERC2384')
|
||||
'38VERC3681','38PCHA1007','38PCHA1006'
|
||||
('38VERC3112','38VERC3171','38VERC2662','38VERC2732','38VERC3206','38VERC3013','38VERC2983','38VERC2961','38VERC3212','38VERC3175','38PCHA1005','38VERC2902','38VERC1824','38VERC1743','38VERC1848','38PCHA1008','38PCHA1009')
|
||||
('38PCHA1087','38PCHA1088')
|
||||
|
||||
|
||||
|
||||
v_ps[(v_ps.source=='PS_CHAMBARAN_CEN38_2013')& ~(v_ps.auteur_site.isin([
|
||||
'COSQUER Mélanie (CEN Isère)'
|
||||
]))].reset_index().site_code.tolist()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
path='/home/colas/Documents/9_PROJETS/2_PS/CBNA/Trieves_Vercors/'
|
||||
file = 'ps_aInserer_for INS1.gpkg'
|
||||
df = gpd.read_file(path+file)
|
||||
df.rename_geometry('geom', inplace=True)
|
||||
|
||||
df['date'] = '2014-01-01'
|
||||
df['date'] = gpd.pd.to_datetime(df['date'])
|
||||
df['structure'] = 'CBNA'
|
||||
# df.rename(columns={"obs":'auteur'}, inplace=True)
|
||||
df['auteur'] = 'CBNA'
|
||||
df.loc[df.statut=="Habitat d'intérêt communautaire",'statut'] = \
|
||||
"Communautaire"
|
||||
df.loc[df.statut=="Habitat d'intérêt communautaire retenu prioritaire",'statut'] = \
|
||||
"Prioritaire"
|
||||
df.loc[df.statut=="Habitat d'intérêt communautaire, retenu prioritaire",'statut'] = \
|
||||
"Prioritaire"
|
||||
df.loc[
|
||||
df.statut=="""Habitat d'intérêt communautaire, retenu prioritaire pour les sites riches en orchidées""",
|
||||
'statut'] = "Prioritaire"
|
||||
df.loc[
|
||||
df.statut=="""Habitat d'intérêt communautaire retenu prioritaire pour les sites riches en orchidées""",
|
||||
'statut'] = "Prioritaire"
|
||||
df.loc[
|
||||
df.statut=="""Habitat communautaire, retenu prioritaire pour les sites riches en orchidées""",
|
||||
'statut'] = "Prioritaire"
|
||||
df.loc[df.statut=="Habitat d'intérêt communautaire retenu prioritaire",'statut'] = \
|
||||
"Prioritaire"
|
||||
df.to_file(path+file,driver='GPKG')
|
||||
|
||||
'38TRIE1043', '38TRIE1058', '38VERC1189', '38VERC1190','38VERC1191', '38VERC1196', '38VERC1199', '38VERC1200','38VERC1201', '38VERC1202', '38VERC1203', '38VERC1204','38VERC1205', '38VERC1209', '38VERC1210', '38VERC1211','38VERC1212', '38VERC1213', '38VERC1214', '38VERC1216','38VERC1218', '38VERC1227', '38VERC3738', '38VERC3952','38VERC4550', '38VERC4551', '38VERC4552', '38VERC4553','38VERC4554', '38VERC4555', '38VERC4556', '38VERC4557','38VERC4559', '38VERC4560', '38VERC4563', '38VERC4564','38VERC4565', '38VERC4566', '38VERC4568', '38VERC4569','38VERC4570', '38VERC4571', '38VERC4572', '38VERC4573','38VERC4574'
|
||||
df_maj.loc[df_maj.id_site.isin(['38TRIE0788']),'code_hab2'] = '41.13 (43)'
|
||||
|
||||
|
||||
|
||||
|
||||
df = gpd.read_postgis('SELECT * FROM pelouse_seche."PB_codehab_nonPresent_dans_corineBiotope"',pycen.con_bdcen)
|
||||
df = df.replace(['38.81','31.8 t'],['31.81','31.8122'],regex=True)
|
||||
df.date = gpd.pd.to_datetime(df.date)
|
||||
df = df[~df.id_site.isin(lst_error2)]
|
||||
'38PCHA0291','38PCHA0333','38PCHA0326','38MATH0083','38PCHA0910','38GRES0025','38CHAR0029','38PCHA0111','38GRES0030','38CHAR0012','38GRES0028','38CHAR0027','38GRES0053','38MATH0005','38BELL0030','38BELL0025','38CHAR0049','38MATH0010','38CHAR0079','38GRES0119','38GRES0127','38BELL0049','38BIEV0004','38GRES0006','38CHAR0176','38GRES0031','38GRES0183','38VERC0254','38GRES0214','38VERC0290','38GRES0278','38MATH0082','38GRES0203','38GRES0251','38CHAR0031','38VERC0383','38GRES0136','38GRES0084','38CHAR0135','38CHAR0133','38GRES0045','38GRES0141','38BELL0192','38BDAU0847','38CHAR0402'
|
||||
update_to_sql(
|
||||
df[['id_site','remarques']].rename(columns={'remarques':'rmq_interet_patri'}),
|
||||
con,'r_sites_geom','sites','id_site'
|
||||
)
|
||||
|
||||
|
||||
df = gpd.read_postgis('SELECT * FROM pelouse_seche."PB_codehabCBNA_nonPresent_dans_corineBiotope"',pycen.con_bdcen)
|
||||
df = df.replace(['43.171','43.13','31.4B','37.831','52 à 54'],['43','43','31.4','31.831','54'],regex=True)
|
||||
'38CHAR1238','38CHAR1091','38TRIE2732','38OISA0273','38OISA0272','38GROU0015','38OISA0274','38VERC3785','38TRIE1399','38TRIE1402','38TRIE2443','38TRIE2444','38VERC1467','38VERC1382','38VERC1059','38TRIE0942','38TRIE0788','38OISA0190','38OISA0188','38OISA0189','38VERC0918','38TRIE1010','38TRIE0943','38BVIS0042','38VERC1253','38VERC1322','38VERC1323','38VERC3787'
|
||||
|
||||
|
||||
|
||||
|
||||
gpd.read_postgis("SELECT * FROM sites.r_sites_geom WHERE id_site IN ('%s')"%"','".join(DF.id_site),pycen.con)
|
||||
|
||||
|
||||
'38OISA0245','38TRIE1045','38TRIE1165','38TRIE2421','38VERC1401','38VERC1447','38VERC3718','38VERC3766','38VERC4003'
|
||||
'38VERC4697','38VERC4698','38VERC4699','38VERC4700','38VERC4701','38VERC4704','38VERC4705','38VERC4706','38VERC4707','38VERC4708','38VERC4709','38VERC4710','38VERC4711','38VERC4712','38VERC4713','38VERC4714','38VERC4715','38VERC4716','38VERC4717','38VERC4718','38VERC4719','38VERC4720','38VERC4721','38VERC4722','38VERC4723','38VERC4724','38VERC4726','38VERC4727','38VERC4729','38VERC4730','38VERC4731','38VERC4732','38VERC4733','38VERC4734','38VERC4735','38VERC4736','38VERC4737','38VERC4738','38VERC4739','38VERC4741','38VERC4743','38VERC4746','38VERC4747','38VERC4748'
|
||||
|
||||
|
||||
cvr = gpd.read_postgis("SELECT * FROM ps.v_pelouseseches WHERE site_code IN ('38VERC4740','38VERC4725','38VERC1271','38VERC4739')",pycen.con)
|
||||
df = gpd.read_postgis("SELECT * FROM ps.v_pelouseseches WHERE site_code IN ('38VERC1249','38VERC1251','38VERC1272')",pycen.con)
|
||||
|
||||
tt = gpd.overlay(df,cvr.unary_union,how='difference')
|
||||
# tt = df.copy()
|
||||
tt = pycen.tools.Polygons_to_MultiPolygon(tt)
|
||||
tt.drop(columns=['auteur_geom', 'auteur_attrs'],inplace=True)
|
||||
tt.drop(columns=['date_geom', 'date_attrs'],inplace=True)
|
||||
tt.rename(columns={'auteur_site':'auteur'},inplace=True)
|
||||
tt.rename(columns={'date_site':'date'},inplace=True)
|
||||
tt.columns = tt.columns.str.replace('cb_hab','code_hab',regex=True)
|
||||
tt.rename(columns={'site_code':'id_site'},inplace=True)
|
||||
tt[['auteur','structure']] = tt.auteur.str.split('(',expand=True).sort_index()
|
||||
tt.auteur = tt.auteur.str.strip()
|
||||
tt.structure = tt.structure.str.strip().str.replace('\)','',regex=True)
|
||||
# tt.auteur = 'GRANGE Benjamin'
|
||||
# tt['structure'] = 'CEN Isère'
|
||||
|
||||
|
||||
'38VERC4697','38VERC4698','38VERC4699','38VERC4700','38VERC4701','38VERC4704','38VERC4705','38VERC4706','38VERC4707','38VERC4708','38VERC4709','38VERC4710','38VERC4711','38VERC4712','38VERC4713','38VERC4714','38VERC4715','38VERC4716','38VERC4717','38VERC4718','38VERC4719','38VERC4720','38VERC4721','38VERC4722','38VERC4723','38VERC4724','38VERC4726','38VERC4727','38VERC4729','38VERC4730','38VERC4731','38VERC4732','38VERC4733','38VERC4734','38VERC4735','38VERC4736','38VERC4737','38VERC4738','38VERC4739','38VERC4741','38VERC4743','38VERC4746','38VERC4747','38VERC4748'
|
||||
|
||||
|
||||
'38VERC4702','38VERC4703','38VERC4725','38VERC4728','38VERC4740','38VERC4742','38VERC4744','38VERC4745'
|
||||
'38BVIS0047','38VERC4082','38VERC4083','38VERC0618','38VERC1266','38VERC1267','38VERC1232','38VERC1240','38VERC4158','38VERC4158','38VERC4068','38VERC4086','38VERC4083'
|
||||
|
||||
'38BVIS0049', '38VERC1231', '38VERC1234', '38VERC1237','38VERC1241', '38VERC1246', '38VERC1247', '38VERC1248','38VERC1250', '38VERC1255', '38VERC1256', '38VERC1257','38VERC1261', '38VERC1262', '38VERC1263', '38VERC1265','38VERC1268', '38VERC1269', '38VERC1271', '38VERC1306','38VERC1322', '38VERC4051', '38VERC4052', '38VERC4056','38VERC4057', '38VERC4084'
|
||||
@@ -0,0 +1,67 @@
|
||||
from pycen import ps,con_bdcen
|
||||
import geopandas as gpd
|
||||
|
||||
# Liste des habitats souhaités
|
||||
list_habs = ['35.21','35.23','34.12','64.11','64.12']
|
||||
habs = '|'.join(list_habs)
|
||||
|
||||
# v_pelouseseches
|
||||
dfps = ps.v_pelouseseches()
|
||||
cb_col = dfps.columns[dfps.columns.str.startswith('cb_hab')]
|
||||
cdate = dfps.columns[dfps.columns.str.contains('date')]
|
||||
for c in cdate:
|
||||
dfps[c] = gpd.pd.to_datetime(dfps[c])
|
||||
dfps['date'] = dfps[cdate].max(axis=1)
|
||||
|
||||
dfps['auteur'] = None
|
||||
for c in cdate:
|
||||
typ = c.removeprefix('date')
|
||||
dfps.loc[dfps[c].eq(dfps.date),'auteur'] = dfps[dfps[c].eq(dfps.date)]['auteur'+typ]
|
||||
|
||||
dfps.drop(
|
||||
columns=[*cdate,*'auteur' + cdate.str.removeprefix('date')],
|
||||
inplace=True
|
||||
)
|
||||
|
||||
|
||||
df = gpd.GeoDataFrame()
|
||||
for c in cb_col:
|
||||
res = dfps[dfps[c].str.contains(habs,na=False)].copy()
|
||||
df = gpd.pd.concat([df,res])
|
||||
df.drop_duplicates(inplace=True)
|
||||
print('Extract %s unités parcellaires ...'%df.shape[0])
|
||||
|
||||
# PB_codehab_nonPresent_dans_corineBiotope
|
||||
sql = 'SELECT * FROM pelouse_seche."PB_codehab_nonPresent_dans_corineBiotope"'
|
||||
dfpb = gpd.read_postgis(sql,con_bdcen)
|
||||
dfps['date'] = gpd.pd.to_datetime(dfps['date'])
|
||||
dfpb.rename(columns={
|
||||
'id_site' : 'site_code',
|
||||
'pratiques':'pratique',
|
||||
'niv_embrous':'embrouss',
|
||||
'recouvmnt':'recouvrement',
|
||||
'remarques':'rmq_site',
|
||||
'code_hab1':'cb_hab1',
|
||||
'code_hab2':'cb_hab2',
|
||||
'code_hab3':'cb_hab3',
|
||||
'code_hab4':'cb_hab4',
|
||||
'code_hab5':'cb_hab5',
|
||||
}, inplace=True)
|
||||
samecol = dfpb.columns[dfpb.columns.isin(dfps.columns)]
|
||||
diffcol = dfpb.columns[~dfpb.columns.isin(dfps.columns)]
|
||||
dfpb = dfpb[samecol]
|
||||
cb_colpb = dfpb.columns[dfpb.columns.str.startswith('cb_hab')]
|
||||
|
||||
|
||||
list_habspb = ['PS sur sable','Friche sableuse']
|
||||
habspb = '|'.join(list_habspb)
|
||||
for c in cb_colpb:
|
||||
res = dfpb[dfpb[c].str.contains(habspb,na=False)].copy()
|
||||
df = gpd.pd.concat([df,res])
|
||||
df.drop_duplicates(inplace=True)
|
||||
df['date'] = gpd.pd.to_datetime(df['date']).astype(str)
|
||||
# df['date'] = gpd.pd.to_datetime(df['date'], unit='D')
|
||||
print('Extract %s unités parcellaires ...'%df.shape[0])
|
||||
|
||||
df.to_file('/home/colas/Documents/9_PROJETS/2_PS/EXPORT/PNA_pelouse_sableuse.gpkg',driver='GPKG')
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-.
|
||||
from pycen import con
|
||||
# import pycen
|
||||
drop = '''
|
||||
DROP TRIGGER IF EXISTS trigger_end_zh ON gn_pr_zh.t_zh;
|
||||
DROP FUNCTION IF EXISTS zones_humides.end_zh();
|
||||
'''
|
||||
|
||||
s2 = '''CREATE OR REPLACE FUNCTION zones_humides.end_zh()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $function$
|
||||
BEGIN
|
||||
IF (TG_OP = 'DELETE') then
|
||||
UPDATE sites.sites
|
||||
SET date_fin = current_timestamp
|
||||
WHERE id = OLD.code;
|
||||
END IF;
|
||||
RETURN NULL;
|
||||
END;
|
||||
$function$
|
||||
;'''
|
||||
|
||||
s1 = '''CREATE TRIGGER trigger_end_zh BEFORE
|
||||
DELETE ON
|
||||
gn_pr_zh.t_zh FOR EACH ROW EXECUTE FUNCTION zones_humides.end_zh()'''
|
||||
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(drop)
|
||||
cnx.execute(s2)
|
||||
cnx.execute(s1)
|
||||
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-.
|
||||
from pycen import con
|
||||
# import pycen
|
||||
drop = '''
|
||||
DROP TRIGGER IF EXISTS trigger_insert_new_zh ON gn_pr_zh.t_zh;
|
||||
DROP FUNCTION IF EXISTS zones_humides.insert_new_zh();
|
||||
'''
|
||||
|
||||
s2 = '''CREATE OR REPLACE FUNCTION zones_humides.insert_new_zh()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $function$
|
||||
BEGIN
|
||||
|
||||
INSERT into sites.sites (id,nom,date_deb,id_typo_sdage,remarques)
|
||||
VALUES (new.code,new.main_name,new.create_date,(SELECT cd_nomenclature FROM gn_pr_zh.t_nomenclatures WHERE id = new.id_sdage),NULL);
|
||||
INSERT into sites.r_sites_geom (id_site,geom,date,id_lot,id_origine)
|
||||
VALUES (new.code,ST_TRANSFORM(new.geom,2154),new.create_date,NULL,new.zh_uuid::text);
|
||||
|
||||
RETURN NULL;
|
||||
END;
|
||||
$function$
|
||||
;'''
|
||||
|
||||
s1 = '''CREATE TRIGGER trigger_insert_new_zh
|
||||
AFTER INSERT OR UPDATE
|
||||
ON gn_pr_zh.t_zh
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION zones_humides.insert_new_zh();
|
||||
'''
|
||||
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(drop)
|
||||
cnx.execute(s2)
|
||||
cnx.execute(s1)
|
||||
@@ -0,0 +1,163 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-
|
||||
#Nom : : recup_ps.py
|
||||
#Description :
|
||||
#Copyright : 2021, CEN38
|
||||
#Auteur : Colas Geier
|
||||
#Version : 1.0
|
||||
|
||||
|
||||
|
||||
# from _typeshed import IdentityFunction
|
||||
import pandas as pd
|
||||
import geopandas as gpd
|
||||
from sqlalchemy.engine import URL
|
||||
from sqlalchemy import create_engine
|
||||
import pycen
|
||||
# Parametres bdd IN
|
||||
from pycen import con_bdcen as con
|
||||
|
||||
dic = {
|
||||
'Ssp':'IDFINAL',
|
||||
'cod_cb':'code_cb',
|
||||
'ccorineb':'code_cb',
|
||||
'id_orig':'idorig',
|
||||
'pourcentag':'part',
|
||||
'carte_cb':'type',
|
||||
'lib_cb':'libelle',
|
||||
'id':'idorig',
|
||||
'hectare':'hectares',
|
||||
'nbre_hc':'hectares',
|
||||
'observat':'obs',
|
||||
'surf_m2':'surface',
|
||||
'statut_car':'statutcart',
|
||||
}
|
||||
# table = '"PS_CHAMBARAN_CEN38_2013"'
|
||||
|
||||
path = '/home/colas/Documents/9_PROJETS/2_PS/CBNA/'
|
||||
fV = path + 'PNR_Vercors_SHP/PNRV_data_04_2012.dbf'
|
||||
fgV = path + 'PNR_Vercors_SHP/PNRV_poly_10_2008_L93_region.shp'
|
||||
nV = 'cr_VERCORS_habitats_CBNA_1999-2007'
|
||||
fC = path + 'PNR_Chartreuse_SHP/Chartreuse_2012_data.dbf'
|
||||
fgC = path + 'PNR_Chartreuse_SHP/Chartreuse_2012_poly_region.shp'
|
||||
nC = 'cr_CHARTREUSE_habitats_CBNA_2000-2012'
|
||||
fT = path + 'Trieves_Vercors/TRIEVES_DATA.dbf'
|
||||
fgT = path + 'Trieves_Vercors/TRIEVES_VERCORS.shp'
|
||||
nT = 'cr_TRIEVES+VERCORS_habitats_CBNA'
|
||||
|
||||
fE = path + 'PNE/DELPHINE_DATA.dbf'
|
||||
fgE = path + 'PNE/DELPHINE_POLY_L93.shp'
|
||||
nE = 'cr_ECRIN_habitats_CBNA'
|
||||
|
||||
|
||||
|
||||
fileG = fgV
|
||||
file = fV
|
||||
name = nV
|
||||
|
||||
gdf = gpd.read_file(fileG)
|
||||
gdf = pycen.tools.dropZ(gdf,geom_col='geometry')
|
||||
dbf = gpd.read_file(file)
|
||||
dbf.rename(columns=dic,inplace=True)
|
||||
gdf.rename(columns=dic,inplace=True)
|
||||
if gdf.columns[0] != 'IDFINAL':
|
||||
gdf.rename(columns={gdf.columns[0]:'IDFINAL'},inplace=True)
|
||||
# if dbf.columns[0] != 'IDFINAL':
|
||||
# dbf.rename(columns={dbf.columns[0]:'IDFINAL'},inplace=True)
|
||||
dbf.sort_values('IDFINAL', inplace=True)
|
||||
gdf.sort_values('IDFINAL', inplace=True)
|
||||
dbf.drop(columns=['geometry'], inplace=True)
|
||||
same_cols = gdf.columns[gdf.columns.isin(dbf.columns)]
|
||||
gdf.rename_geometry('geom',inplace=True)
|
||||
dbf.drop_duplicates(inplace=True)
|
||||
dbf.reset_index(drop=True,inplace=True)
|
||||
dbf.columns = dbf.columns.str.lower()
|
||||
gdf.columns = gdf.columns.str.lower()
|
||||
dbf.rename(columns=dic,inplace=True)
|
||||
gdf.rename(columns=dic,inplace=True)
|
||||
dbf.drop(columns=[
|
||||
'clemax','cle_code','codevegfin','code_final','lettre','hectares','lib_delphi','lien_habit','lien_typol','evolutif_m','codedelphi',
|
||||
'cb_carte','cb_2','ch_eur25','ch_stat','cb_choix','choix','codedelphine',], inplace=True, errors='ignore')
|
||||
gdf.drop(columns=[
|
||||
'surface','hectares','support','echelle','perimetr',
|
||||
'part','lettre','phyto','code_cb','cd_eur15','statut','type1','type2','cod_mil',], inplace=True, errors='ignore')
|
||||
dbf.loc[dbf.statut=='Habitat non désigné','statut'] = None
|
||||
dbf.loc[dbf.statut=='A préciser','statut'] = None
|
||||
dbf.loc[dbf.code_cb=='A préciser','code_cb'] = None
|
||||
dbf.loc[dbf.phyto=='A préciser','phyto'] = None
|
||||
dbf.loc[dbf.phyto=='Néant','phyto'] = None
|
||||
#### PNE ####
|
||||
# dbf.loc[dbf.eur25=='Néant','eur25'] = None
|
||||
# dbf.loc[dbf.l_eur25=='Néant','l_eur25'] = None
|
||||
# dbf.loc[dbf.code_cb=='Néant','code_cb'] = None
|
||||
# dbf.part = dbf.part.astype(int).astype(str)
|
||||
# dbf.sort_values(['idfinal','part'], ascending=[True,False], inplace=True)
|
||||
|
||||
# dbf.dropna(axis=0, subset=['code_cb'], inplace=True)
|
||||
|
||||
dbf.sort_values(['idfinal','part'],ascending=[True,False],inplace=True)
|
||||
tt = [list(range(1,dbf[dbf.idfinal==i].shape[0]+1)) for i in dbf.idfinal.unique() ]
|
||||
dbf['num'] = [item for sublist in tt for item in sublist]
|
||||
|
||||
# dbf.rename(columns={'code_eur27':'code_eur27.'}, inplace=True)
|
||||
dbf.rename(columns={'code_eur15':'code_eur15.'}, inplace=True)
|
||||
# dbf.rename(columns={'eur25':'code_eur25.'}, inplace=True)
|
||||
# dbf.rename(columns={'l_eur25':'l_eur25.'}, inplace=True)
|
||||
|
||||
gdf.set_index(['idfinal','idorig','secteur'], inplace=True)
|
||||
dbf.set_index(['idfinal','idorig','secteur'], inplace=True)
|
||||
# gdf.set_index(['idfinal','idorig'], inplace=True)
|
||||
# dbf.set_index(['idfinal','idorig'], inplace=True)
|
||||
dbf.set_index('num',append=True, inplace=True)
|
||||
dbf2 = dbf.unstack().copy()
|
||||
dbf2.dropna(axis=1,how='all', inplace=True)
|
||||
lst_col = dbf2.columns.get_level_values(0).unique()
|
||||
stt = ['statut%s'%i for i in range(1,dbf2.iloc[:,dbf2.columns.get_level_values(0)=='statut'].shape[1]+1)]
|
||||
stc = ['statutcart%s'%i for i in range(1,dbf2.iloc[:,dbf2.columns.get_level_values(0)=='statutcart'].shape[1]+1)]
|
||||
ste = ['site%s'%i for i in range(1,dbf2.iloc[:,dbf2.columns.get_level_values(0)=='site'].shape[1]+1)]
|
||||
dbf2.columns = [x+str(j) for x,j in dbf2.columns]
|
||||
for s in stt:
|
||||
dbf2.loc[dbf2.statut1.isna(),'statut1'] = dbf2.loc[dbf2.statut1.isna(),s]
|
||||
for s in stc:
|
||||
dbf2.loc[dbf2.statutcart1.isna(),'statutcart1'] = dbf2.loc[dbf2.statutcart1.isna(),s]
|
||||
dbf2.drop(columns=[
|
||||
*stt[1:],*ste[1:],*stc[1:]
|
||||
],inplace=True)
|
||||
dbf2.rename(columns={
|
||||
'statut1':'statut',
|
||||
'statutcart1':'statutcart',
|
||||
'site1':'site'
|
||||
}, inplace=True)
|
||||
dbf2.loc[dbf2.statut.isna(),'statut'] = 'N.D'
|
||||
dbf2.part1 = dbf2.part1.astype(int)
|
||||
dbf2.columns = dbf2.columns.str.replace('code_cb','code_hab',regex=True)
|
||||
dbf2.columns = dbf2.columns.str.replace('part','n_hab',regex=True)
|
||||
df = pd.merge(gdf,dbf2,how='inner',right_index=True,left_index=True)
|
||||
df.geom = df.buffer(0)
|
||||
df = pycen.tools.Polygons_to_MultiPolygon(df)
|
||||
df.to_postgis(
|
||||
name=name,
|
||||
con=con,
|
||||
schema='habitat',
|
||||
if_exists='replace',
|
||||
index=True,
|
||||
geom_col='geom',
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
# dbf2[dbf2.columns[dbf2.columns.str.contains('type')]]
|
||||
# dbf2[dbf2.columns[dbf2.columns.str.contains('phyto')]]
|
||||
# dbf2[dbf2.columns[dbf2.columns.str.contains('phyto')]][~dbf2.phyto12.isna()]
|
||||
# dbf2[dbf2.columns[dbf2.columns.str.contains('libelle')]]
|
||||
# dbf2[dbf2.columns[dbf2.columns.str.contains('libelle')]][~dbf2.libelle13.isna()]
|
||||
# dbf2[dbf2.columns[dbf2.columns.str.contains('codeveg')]]
|
||||
# dbf2[dbf2.columns[dbf2.columns.str.contains('codeveg')]][~dbf2.codeveg13.isna()]
|
||||
# dbf2.iloc[:,dbf2.columns.get_level_values(0)=='type']
|
||||
# dbf2.iloc[:,dbf2.columns.get_level_values(0)=='statut']
|
||||
|
||||
|
||||
# dbf2.columns = [x+str(j) for x,j in dbf2.columns]
|
||||
# dbf2.part1 = dbf2.part1.astype(int)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,345 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: UTF-8 -*-
|
||||
|
||||
from statistics import geometric_mean
|
||||
import geopandas as gpd
|
||||
import pandas as pd
|
||||
from sqlalchemy.engine import URL
|
||||
from sqlalchemy import create_engine
|
||||
# from shapely.geometry import Polygon
|
||||
import pycen
|
||||
from os import listdir, chdir
|
||||
from pathlib import Path
|
||||
from zipfile import ZipFile
|
||||
from rasterstats import zonal_stats
|
||||
|
||||
|
||||
# Path MNT
|
||||
path0 = '/home/colas/Documents/9_PROJETS/2_PS/'
|
||||
path0_mnt = '/home/colas/Documents/9_PROJETS/3_PGZH/'
|
||||
path = path0_mnt + 'SIG/'
|
||||
p_mltifct = 'multi_fonctions/IGN - BD Alti 25M/'
|
||||
path2_mnt = path0+'MNT/'
|
||||
file_mnt25 = 'MNT_25m.tif'
|
||||
file_mnt5 = 'MNT_5m.tif'
|
||||
|
||||
# Parametres bdd IN
|
||||
from pycen import con_bdcen as con
|
||||
# con = create_engine('postgresql+psycopg2://{0}:{1}@{2}/{3}'.format(user,pwd,adr,base), echo=False)
|
||||
|
||||
def keepgeom_indept(df):
|
||||
dnat = pycen.ref.get_districtNat().geom.unary_union
|
||||
df['in_isere'] = df.intersects(dnat)
|
||||
df = df[df.in_isere].copy()
|
||||
df.dropna(axis=1, how='all', inplace=True)
|
||||
del df['in_isere']
|
||||
return df
|
||||
# df = gpd.read_postgis(
|
||||
# sql = 'SELECT * FROM pelouse_seche."cr_PS_CBNA_habitats_aggreg_06_2020"',
|
||||
# con = con
|
||||
# )
|
||||
|
||||
lst_tab = ['"cr_VERCORS_habitats_CBNA_1999-2007"','"cr_TRIEVES+VERCORS_habitats_CBNA_2014"','"cr_ECRIN_habitats_CBNA_2014"','"cr_CHARTREUSE_habitats_CBNA_2000-2012"',]
|
||||
table = lst_tab[3]
|
||||
df = gpd.read_postgis(
|
||||
sql = 'SELECT * FROM habitat.%s'%table,
|
||||
con = con
|
||||
)
|
||||
|
||||
df.set_index('idfinal', inplace=True)
|
||||
# df.set_index('data_id', inplace=True)
|
||||
colnhab = df.columns[df.columns.str.startswith('n_hab')]
|
||||
nhab = df[colnhab].copy()
|
||||
nhab['SUMM'] = nhab.sum(axis=1)
|
||||
nhab['SUMM'].unique()
|
||||
|
||||
lst_hab = ['34.1','34.3','34.4','34.7','35.2','62.3','64.1']
|
||||
df2 = pd.DataFrame()
|
||||
for h in lst_hab:
|
||||
tmp = df[
|
||||
(df.code_hab1.str.contains(h,na=False))|
|
||||
(df.code_hab2.str.contains(h,na=False)&(df.n_hab2 >= 20))|
|
||||
(df.code_hab3.str.contains(h,na=False)&(df.n_hab3 >= 20))|
|
||||
(df.code_hab4.str.contains(h,na=False)&(df.n_hab4 >= 20))
|
||||
]
|
||||
df2 = pd.concat([df2,tmp])
|
||||
|
||||
df3 = df2.copy()
|
||||
|
||||
# Before 1385 / After 1422
|
||||
lst_hab2 = ['41','42','43','44','81','82','83']
|
||||
|
||||
for h2 in lst_hab2:
|
||||
tmp2 = df2[
|
||||
(df2.code_hab1.str.contains('&'+h2,na=False)&(df2.n_hab1 >= 60))
|
||||
]
|
||||
df2.drop(labels=tmp2.index,inplace=True)
|
||||
for h2 in lst_hab2:
|
||||
tmp2 = df2[
|
||||
(df2.code_hab1.str.contains(h2+'.',na=False)&(df2.n_hab1 >= 60))
|
||||
]
|
||||
df2.drop(labels=tmp2.index,inplace=True)
|
||||
|
||||
|
||||
for h2 in lst_hab2:
|
||||
tmp3 = df3[
|
||||
(df3.code_hab1.str.contains(h2,na=False)&(df3.n_hab1 >= 60))
|
||||
]
|
||||
df3.drop(labels=tmp3.index,inplace=True)
|
||||
|
||||
|
||||
df2 = keepgeom_indept(df2)
|
||||
df3 = keepgeom_indept(df3)
|
||||
|
||||
|
||||
df = df2.copy()
|
||||
df.reset_index(inplace=True,drop=False)
|
||||
# ps = pycen.ps.get_sitesGeom()
|
||||
sql = 'SELECT * FROM ps.v_pelouseseches_all'
|
||||
PS = gpd.read_postgis(sql,pycen.con)
|
||||
ps = PS[PS.source==table.replace('"','')].copy()
|
||||
# 1385
|
||||
|
||||
|
||||
|
||||
not_in_azalee = df2[~df2.index.isin(df3.index)].copy()
|
||||
in_azalee = df2[df2.index.isin(df3.index)].copy()
|
||||
|
||||
not_in_azalee.to_file(path0+'CBNA/MISSING_DATA_INDB/chartreuse.gpkg',layer='not_in_azalee')
|
||||
in_azalee.to_file(path0+'CBNA/MISSING_DATA_INDB/chartreuse.gpkg',layer='in_azalee')
|
||||
|
||||
ps.columns
|
||||
|
||||
# Drop poly who intersect poly non-CBNA
|
||||
# ps_autre = ps[~ps.auteur_geom.str.contains('CBNA')]
|
||||
# intersect = gpd.sjoin(df,ps_autre,op='intersects').idfinal.tolist()
|
||||
# drop_index = df[df.idfinal.isin(intersect)].index
|
||||
# df.drop(drop_index,inplace=True)
|
||||
|
||||
# Drop poly who intersect poly CBNA
|
||||
# ps_cbna = ps[ps.auteur_geom.str.contains('CBNA')]
|
||||
# intersect = gpd.sjoin(
|
||||
# df,
|
||||
# gpd.GeoDataFrame( geometry=ps_cbna.centroid),
|
||||
# op='intersects').idfinal.tolist()
|
||||
# drop_index = df[df.idfinal.isin(intersect)].index
|
||||
# df.drop(drop_index,inplace=True)
|
||||
from os.path import join
|
||||
PATH = '/home/colas/Documents/9_PROJETS/2_PS/CBNA/MISSING_DATA_INDB'
|
||||
FILE = 'CHARTREUSE.gpkg'
|
||||
df = gpd.read_file(join(PATH,FILE))
|
||||
|
||||
|
||||
if 'date' not in df.columns and 'annee' in df.columns:
|
||||
df.loc[~df.annee.isna(),'date'] = df.loc[~df.annee.isna(),'annee'].astype(str) + '-01-01'
|
||||
df['date'] = pd.to_datetime(df['date'])
|
||||
|
||||
colnhab2 = df2.columns[df2.columns.str.startswith('n_hab')]
|
||||
nhab2 = df2[colnhab2].copy()
|
||||
nhab2['SUMM'] = nhab2.sum(axis=1)
|
||||
nhab2['SUMM'].unique()
|
||||
|
||||
if table == '"cr_CHARTREUSE_habitats_CBNA_2000-2012"':
|
||||
dic = {
|
||||
'JCV':'VILLARET Jean-charles',
|
||||
'GP' :'PACHE Gilles',
|
||||
'AM' :'MIKOLAJCZAK Alexis',
|
||||
'TL' :'LEGLAND Thomas',
|
||||
'HM' :'MERLE Hugues',
|
||||
'CC' :'Crassous Claire',
|
||||
# 'AL'
|
||||
# 'LA'
|
||||
# 'JC'
|
||||
}
|
||||
df.obs = df.obs.replace(dic)
|
||||
df.loc[~df.obs.isin(['ONF38',*dic.values()]),'obs'] = 'CBNA'
|
||||
df.loc[df.structur=='ONF 38','structur'] = 'ONF38'
|
||||
if table == '"cr_ECRIN_habitats_CBNA_2014"':
|
||||
df['auteur'] = 'PnE'
|
||||
df['structure'] = 'PnE'
|
||||
df['date'] = '2014-01-01'
|
||||
df['date'] = pd.to_datetime(df['date'])
|
||||
if table == '"cr_TRIEVES+VERCORS_habitats_CBNA_2014"':
|
||||
df['auteur'] = 'CBNA'
|
||||
df['structure'] = 'CBNA'
|
||||
df['date'] = '2014-01-01'
|
||||
df['date'] = pd.to_datetime(df['date'])
|
||||
if table == '"cr_VERCORS_habitats_CBNA_1999-2007"':
|
||||
df['structure'] = 'CBNA'
|
||||
if table in [
|
||||
'"cr_VERCORS_habitats_CBNA_1999-2007"','"cr_TRIEVES+VERCORS_habitats_CBNA_2014"'
|
||||
]:
|
||||
df.loc[df.statut=="Habitat d'intérêt communautaire",'statut'] = \
|
||||
"Communautaire"
|
||||
df.loc[df.statut=="Habitat d'intérêt communautaire retenu prioritaire",'statut'] = \
|
||||
"Prioritaire"
|
||||
df.loc[df.statut=="Habitat d'intérêt communautaire, retenu prioritaire",'statut'] = \
|
||||
"Prioritaire"
|
||||
df.loc[
|
||||
df.statut=="""Habitat d'intérêt communautaire, retenu prioritaire pour les sites riches en orchidées""",
|
||||
'statut'] = "Prioritaire"
|
||||
df.loc[
|
||||
df.statut=="""Habitat d'intérêt communautaire retenu prioritaire pour les sites riches en orchidées""",
|
||||
'statut'] = "Prioritaire"
|
||||
df.loc[
|
||||
df.statut=="""Habitat communautaire, retenu prioritaire pour les sites riches en orchidées""",
|
||||
'statut'] = "Prioritaire"
|
||||
df.loc[df.statut=="Habitat d'intérêt communautaire retenu prioritaire",'statut'] = \
|
||||
"Prioritaire"
|
||||
if table in [
|
||||
'"cr_CHARTREUSE_habitats_CBNA_2000-2012"', '"cr_ECRIN_habitats_CBNA_2014"']:
|
||||
dic = {'PR':'Prioritaire','IC':'Communautaire','NC':'Non communautaire'}
|
||||
df.statut.replace(dic,inplace=True)
|
||||
|
||||
df.reset_index(inplace=True, drop=True)
|
||||
|
||||
df.to_postgis(
|
||||
'ps'+table[3:-1],pycen.con_bdcen,'pelouse_seche',geom_col='geom',if_exists='replace'
|
||||
)
|
||||
|
||||
# [CROSS_MNT]
|
||||
ddf = df[['idfinal','geom']].copy()
|
||||
ddf.set_geometry('geom',inplace=True)
|
||||
|
||||
# home = str(Path.home())
|
||||
# chdir(path+p_mltifct)
|
||||
# Dir = listdir()
|
||||
# Dir = [x for x in Dir if '.zip' in x]
|
||||
# # stats = pd.DataFrame()
|
||||
# for i, d in enumerate(Dir):
|
||||
# zip = ZipFile(d).namelist()
|
||||
# z = [z for z in zip if 'MNT' in z][0]
|
||||
# print(z)
|
||||
# tmp = zonal_stats(ddf.geom,'/vsizip/{zip}/{mnt}'.format(zip=d,mnt=z),stats="max")
|
||||
# tmp = pd.DataFrame(tmp)
|
||||
# tmp.columns = ['max%s'%i]
|
||||
# if i == 0 :
|
||||
# stats = tmp
|
||||
# else:
|
||||
# stats = pd.merge(stats,tmp,how='left',left_index=True,right_index=True)
|
||||
|
||||
# stats['bilan'] = stats.max(axis=1)
|
||||
|
||||
# tmp = pd.merge(df,stats['bilan'],left_index=True,right_index=True)
|
||||
# tmp.bilan = tmp.bilan.round()
|
||||
|
||||
# zonal_tmp = zonal_stats(ddf.geom,path2_mnt+file_mnt25,stats="mean max",nodata=0,all_touched=True)
|
||||
|
||||
# import rasterio
|
||||
# with rasterio.open(path2_mnt+file_mnt5) as src:
|
||||
# affine = src.transform
|
||||
# array = src.read(1)
|
||||
# zonal_tmp3 = zonal_stats(ddf, array, affine=affine,stats="mean max",nodata=0,all_touched=True)
|
||||
|
||||
|
||||
# zonal_tmp = pd.DataFrame(zonal_tmp)
|
||||
# zonal_tmp3 = pd.DataFrame(zonal_tmp3)
|
||||
# zonal_tmp.columns = ['max_alti','mean_alti']
|
||||
# zonal_tmp3.columns = ['max_alti','mean_alti']
|
||||
# tmp = pd.merge(df,zonal_tmp2,left_index=True,right_index=True)
|
||||
from pycen import con as con_aza
|
||||
sql = 'SELECT * FROM ps.v_pelouseseches_noalti'
|
||||
ddf = gpd.read_postgis(sql,con_aza)
|
||||
zonal_tmp2 = zonal_stats(ddf,path2_mnt+file_mnt5,stats="max",nodata=0,all_touched=True)
|
||||
zonal_tmp2 = pd.DataFrame(zonal_tmp2)
|
||||
zonal_tmp2.columns = ['max_alti']
|
||||
tmp = pd.concat([ddf,zonal_tmp2], axis=1)
|
||||
tmp = tmp.set_geometry('geom', crs=2154)
|
||||
tmp['infeq_1200'] = tmp.max_alti <= 1200
|
||||
tmp2 = tmp[['site_code','infeq_1200']].copy()
|
||||
tmp2.rename(columns={'site_code':'id_site'},inplace=True)
|
||||
tmp2.to_sql('r_infeq_1200m',con_aza,'ps',if_exists='append',index=False)
|
||||
|
||||
df.to_postgis(
|
||||
'ps'+table[3:-1],pycen.con_bdcen,'pelouse_seche',geom_col='geom',if_exists='replace'
|
||||
)
|
||||
|
||||
PSinfeq1200 = tmp[tmp.max_alti <= 1200].copy()
|
||||
PSsup1200 = tmp[tmp.max_alti > 1200].copy()
|
||||
|
||||
|
||||
|
||||
|
||||
# PSinfeq1200 = tmp[tmp.bilan <= 1200].copy()
|
||||
# PSsup1200 = tmp[tmp.bilan > 1200].copy()
|
||||
# PSinfeq1200.rename(columns={'bilan':'max_alti'}, inplace=True)
|
||||
# PSsup1200.rename(columns={'bilan':'max_alti'}, inplace=True)
|
||||
PSinfeq1200.dropna(axis=1, how='all',inplace=True)
|
||||
if table in [
|
||||
'"cr_VERCORS_habitats_CBNA_1999-2007"','"cr_TRIEVES+VERCORS_habitats_CBNA_2014"']:
|
||||
PSinfeq1200.loc[PSinfeq1200.statut=="Habitat d'intérêt communautaire",'statut'] = \
|
||||
"Communautaire"
|
||||
PSinfeq1200.loc[PSinfeq1200.statut=="Habitat d'intérêt communautaire retenu prioritaire",'statut'] = \
|
||||
"Prioritaire"
|
||||
PSinfeq1200.loc[PSinfeq1200.statut=="Habitat d'intérêt communautaire, retenu prioritaire",'statut'] = \
|
||||
"Prioritaire"
|
||||
PSinfeq1200.loc[
|
||||
PSinfeq1200.statut=="""Habitat d'intérêt communautaire, retenu prioritaire pour les sites riches en orchidées""",
|
||||
'statut'] = "Prioritaire"
|
||||
PSinfeq1200.loc[
|
||||
PSinfeq1200.statut=="""Habitat d'intérêt communautaire retenu prioritaire pour les sites riches en orchidées""",
|
||||
'statut'] = "Prioritaire"
|
||||
PSinfeq1200.loc[
|
||||
PSinfeq1200.statut=="""Habitat communautaire, retenu prioritaire pour les sites riches en orchidées""",
|
||||
'statut'] = "Prioritaire"
|
||||
PSinfeq1200.loc[PSinfeq1200.statut=="Habitat d'intérêt communautaire retenu prioritaire",'statut'] = \
|
||||
"Prioritaire"
|
||||
if table in [
|
||||
'"cr_CHARTREUSE_habitats_CBNA_2000-2012"', '"cr_ECRIN_habitats_CBNA_2014"']:
|
||||
dic = {'PR':'Prioritaire','IC':'Communautaire','NC':'Non communautaire'}
|
||||
PSinfeq1200.statut.replace(dic,inplace=True)
|
||||
|
||||
DF_INI = PSinfeq1200.copy()
|
||||
df = DF_INI.copy()
|
||||
# df['structure'] = 'CBNA'
|
||||
|
||||
|
||||
# sql = """
|
||||
# DELETE FROM sites.sites
|
||||
# WHERE sites.id in (SELECT id_site from sites.r_sites_geom where id_lot = 1);
|
||||
# """
|
||||
# with pycen.con.begin() as cnx:
|
||||
# cnx.execute(sql)
|
||||
path0 = '/home/colas/Documents/9_PROJETS/2_PS/TO IMPORT/'
|
||||
cols_date = PSsup1200.columns[PSsup1200.columns.str.contains('date')]
|
||||
PSsup1200[cols_date] = PSsup1200[cols_date].astype(str)
|
||||
PSsup1200.to_file(path0 + 'PS_ECRIN_CBNA_2014_SUP1200.shp')
|
||||
|
||||
cols_date = DF_INI.columns[DF_INI.columns.str.contains('date')]
|
||||
DF_INI[cols_date] = DF_INI[cols_date].astype(str)
|
||||
DF_INI.to_file(path0 + 'PS_ECRIN_CBNA_2014_INF1200.shp')
|
||||
|
||||
|
||||
op = '''
|
||||
gdalwarp -overwrite -s_srs EPSG:2154 -t_srs EPSG:2154 -co FORMAT=GPKG -of GTiff -tr 25.0 -25.0 -tap -cutline \
|
||||
"PG:dbname='bd-cen-38' host=192.168.0.189 port=5432 sslmode=disable user='cgeier' password='adm1n*bdCen'" \
|
||||
-csql "SELECT * FROM habitat."cr_TRIEVES_VERCORS_habitats_CBNA_2014" WHERE idfinal in (24060)" \
|
||||
"{mnt}" {out}
|
||||
'''.format(
|
||||
mnt=path2_mnt+'out.tif',
|
||||
out=path2_mnt+'24060.tif')
|
||||
system(op)
|
||||
mnt = rio.open(Path_tmp+mnt_out)
|
||||
|
||||
|
||||
|
||||
sql = 'SELECT * FROM pelouse_seche."PB_codehab_nonPresent_dans_corineBiotope"'
|
||||
df = gpd.read_postgis(sql,con)
|
||||
lst = ['cr_TRIEVES+VERCORS_habitats_CBNA_2014','cr_VERCORS_habitats_CBNA_1999-2007','cr_ECRIN_habitats_CBNA_2014','cr_CHARTREUSE_habitats_CBNA_2000-2012']
|
||||
df = df[df.table_org.isin(lst)]
|
||||
df.loc[df.auteur=='PnE','structure'] = 'PnE'
|
||||
|
||||
|
||||
sql = 'SELECT * FROM pelouse_seche."PB_codehabCBNA_nonPresent_dans_corineBiotope"'
|
||||
df2 = gpd.read_postgis(sql,con)
|
||||
|
||||
df3 = pd.concat([df,df2])
|
||||
df3.set_geometry('geom',inplace=True,crs=2154)
|
||||
|
||||
df3.to_postgis(
|
||||
name='PB_codehabCBNA_nonPresent_dans_corineBiotope',
|
||||
con=con,
|
||||
schema='pelouse_seche',
|
||||
if_exists='replace',
|
||||
geom_col='geom'
|
||||
)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-
|
||||
|
||||
from pycen.tools import Polygons_to_MultiPolygon
|
||||
from pycen import con
|
||||
import geopandas as gpd
|
||||
from sqlalchemy import create_engine, text
|
||||
from geoalchemy2 import Geometry
|
||||
|
||||
user_cad = 'cgeier' # utilisateur de connexion à la bdd
|
||||
pwd_cad = 'adm1n*bdCen' # mot de passe de la bdd
|
||||
adr_cad = '91.134.194.221' # adresse ip de la bdd
|
||||
port_cad = '5432' # port de la bdd
|
||||
base_cad = 'rhomeo' # nom de la bdd
|
||||
schema_cad = 'bdtopo3'
|
||||
con = create_engine('postgresql+psycopg2://{0}:{1}@{2}:{3}/{4}'.format(user_cad,pwd_cad,adr_cad,port_cad,base_cad), echo=False)
|
||||
|
||||
|
||||
|
||||
file = '/media/cgeier/Disk2/5_BDD/RPG/1_DONNEES_LIVRAISON_2021/RPG_2-0_SHP_LAMB93_R84_2021-01-01/ILOTS_ANONYMES.shp'
|
||||
dic = {
|
||||
'CD_SSBV': 'cdssbv',
|
||||
'LIB_SSBV': 'nom',
|
||||
'CD_COMGEO': 'cd_comgeo',
|
||||
'CD_CTB': 'cd_ctb',
|
||||
'CD_': 'cd_',
|
||||
'CD_SUBUNIT': 'cd_subunit',
|
||||
'geometry': 'geom',
|
||||
}
|
||||
|
||||
name_table = 'ilots_anonymes_2021'
|
||||
name_schema = 'rpgnew'
|
||||
# Parametres bdd OUT
|
||||
# user_zh = 'postgres'
|
||||
# pwd_zh = 'tutu'
|
||||
# adr_zh = '192.168.60.10'
|
||||
# base_zh = 'bd_cen'
|
||||
# con_zh = create_engine('postgresql+psycopg2://{0}:{1}@{2}/{3}'.format(user_zh,pwd_zh,adr_zh,base_zh), echo=False)
|
||||
|
||||
|
||||
select_cols = list(dic.values())
|
||||
|
||||
df = gpd.read_file(file)
|
||||
# df = df.set_geometry('geom')
|
||||
df.rename_geometry('geom', inplace=True)
|
||||
df.columns = df.columns.str.lower()
|
||||
|
||||
if not df.crs:
|
||||
df.set_crs(epsg=2154, inplace=True)
|
||||
|
||||
if df.crs.srs != 'epsg:2154':
|
||||
df.to_crs(epsg=2154, inplace=True)
|
||||
|
||||
# df.rename(columns=dic, inplace=True)
|
||||
# df = df[select_cols]
|
||||
|
||||
|
||||
if 'id' not in df.columns:
|
||||
df.index.name = 'id'
|
||||
df.reset_index(drop=False, inplace=True)
|
||||
|
||||
|
||||
if 'Polygon' in df.geom_type.unique() and 'MultiPolygon' in df.geom_type.unique():
|
||||
df = Polygons_to_MultiPolygon(df)
|
||||
# from shapely.geometry.multipolygon import MultiPolygon
|
||||
# tmp = df.loc[df.geom_type == 'Polygon'].copy()
|
||||
# geom = [MultiPolygon([x]) for x in tmp.loc[tmp.geom_type == 'Polygon','geom']]
|
||||
# tmp = tmp.set_geometry(geom)
|
||||
# df = gpd.pd.concat([df.drop(tmp.index), tmp]).sort_values('id').reset_index(drop=True)
|
||||
|
||||
if 'LineString' in df.geom_type.unique() and 'MultiLineString' in df.geom_type.unique():
|
||||
from shapely.geometry.multilinestring import MultiLineString
|
||||
tmp = df.loc[df.geom_type == 'LineString'].copy()
|
||||
geom = [MultiLineString([x]) for x in tmp.loc[tmp.geom_type == 'LineString','geom']]
|
||||
tmp = tmp.set_geometry(geom)
|
||||
df = gpd.pd.concat([df.drop(tmp.index), tmp]).sort_values('id').reset_index(drop=True)
|
||||
|
||||
con.begin()
|
||||
df.to_postgis(
|
||||
name = name_table,
|
||||
con = con,
|
||||
schema = name_schema,
|
||||
if_exists = 'replace',
|
||||
chunksize = 100000,
|
||||
dtype={'geom':Geometry(srid=2154)}
|
||||
)
|
||||
|
||||
sql = """ALTER TABLE {sch}.{tab} OWNER TO cen_admin;
|
||||
GRANT ALL ON TABLE {sch}.{tab} TO cen_admin;
|
||||
GRANT ALL ON TABLE {sch}.{tab} TO grp_admin;
|
||||
--GRANT SELECT ON TABLE {sch}.{tab} TO grp_consult;
|
||||
""".format(sch=name_schema,tab=name_table)
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(sql)
|
||||
|
||||
sql = """
|
||||
REVOKE SELECT ON TABLE {sch}.{tab} FROM grp_consult;
|
||||
""".format(sch=name_schema,tab=name_table)
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(sql)
|
||||
|
||||
if 'rpg' in name_table:
|
||||
|
||||
v_tab = 'v_'+name_table.replace('reg','')+'isere'
|
||||
lst_col = ','.join(tuple('s.'+df.columns))
|
||||
|
||||
sql = """CREATE OR REPLACE VIEW {sch}.{v_tab}
|
||||
AS SELECT {cols}
|
||||
FROM {sch}.{tab} s,
|
||||
ref_territoire.dept_isere reg
|
||||
WHERE st_intersects(s.geom, reg.geom);
|
||||
|
||||
ALTER TABLE {sch}.{v_tab} OWNER TO cen_admin;
|
||||
GRANT ALL ON TABLE {sch}.{v_tab} TO cen_admin;
|
||||
GRANT ALL ON TABLE {sch}.{v_tab} TO grp_admin;
|
||||
GRANT SELECT ON TABLE {sch}.{v_tab} TO grp_consult;""".format(sch=name_schema,tab=name_table,v_tab=v_tab,cols=lst_col)
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(sql)
|
||||
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-
|
||||
|
||||
from pycen import con
|
||||
import geopandas as gpd
|
||||
from datetime import datetime as dt
|
||||
|
||||
|
||||
|
||||
file = '/home/colas/Documents/tmp/rpg/RPG_2-2__SHP_LAMB93_R84_2023-01-01/RPG/1_DONNEES_LIVRAISON_2023/RPG_2-2__SHP_LAMB93_R84_2023-01-01/PARCELLES_GRAPHIQUES.shp'
|
||||
|
||||
name_table = 'rpg_parcelles_graphiques_reg'
|
||||
name_schema = 'ref_territoire'
|
||||
thisyear = dt.now().year-1
|
||||
|
||||
df = gpd.read_file(file)
|
||||
df.columns = df.columns.str.lower()
|
||||
# df = df.set_geometry('geom')
|
||||
df.rename_geometry('geom', inplace=True)
|
||||
|
||||
if not df.crs:
|
||||
df.set_crs(epsg=2154, inplace=True)
|
||||
|
||||
if df.crs.srs != 'epsg:2154':
|
||||
df.to_crs(epsg=2154, inplace=True)
|
||||
|
||||
exist_table = con.dialect.get_table_names(con, schema = name_schema)
|
||||
if name_table in exist_table:
|
||||
other_table = name_table.replace('rpg','rpg'+str(thisyear-1))
|
||||
view = 'v_'+name_table.replace('reg','isere')
|
||||
other_view = view.replace('rpg','rpg'+str(thisyear-1))
|
||||
sql = """
|
||||
ALTER TABLE IF EXISTS {sch}.{tab} RENAME TO "{othertab}";
|
||||
ALTER VIEW IF EXISTS {sch}.{view} RENAME TO "v_{otherview}";
|
||||
ALTER INDEX IF EXISTS {sch}.idx_rpg_parcelles_graphiques_reg_geom RENAME TO "idx_rpg{old_year}_parcelles_graphiques_reg_geom";
|
||||
|
||||
""".format(sch=name_schema,tab=name_table,othertab=other_table,old_year=thisyear-1,view=view,otherview=other_view)
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(sql)
|
||||
|
||||
df.drop_duplicates().to_postgis(
|
||||
name = name_table,
|
||||
con = con,
|
||||
schema = name_schema,
|
||||
if_exists = 'replace',
|
||||
index = False
|
||||
)
|
||||
|
||||
sql = """
|
||||
ALTER TABLE {sch}.{tab} OWNER TO cen_admin;
|
||||
GRANT ALL ON TABLE {sch}.{tab} TO cen_admin;
|
||||
GRANT ALL ON TABLE {sch}.{tab} TO grp_admin;
|
||||
GRANT SELECT ON TABLE {sch}.{tab} TO grp_consult;
|
||||
""".format(sch=name_schema,tab=name_table)
|
||||
comment = """COMMENT ON TABLE {sch}.{tab} IS 'Version {v} 2.1 - Table des parcelles graphiques de la région Auvergne Rhône-Alpes.'""".format(sch=name_schema,tab=name_table,v=thisyear)
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(sql)
|
||||
cnx.execute(comment)
|
||||
|
||||
if 'rpg' in name_table:
|
||||
v_tab = 'v_'+name_table.replace('reg','')+'isere'
|
||||
lst_col = ','.join(tuple('s.'+df.columns))
|
||||
|
||||
sql = """CREATE OR REPLACE VIEW {sch}.{v_tab}
|
||||
AS SELECT {cols}
|
||||
FROM {sch}.{tab} s,
|
||||
ref_territoire.dept_isere reg
|
||||
WHERE st_intersects(s.geom, reg.geom);
|
||||
|
||||
ALTER TABLE {sch}.{v_tab} OWNER TO cen_admin;
|
||||
GRANT ALL ON TABLE {sch}.{v_tab} TO cen_admin;
|
||||
GRANT ALL ON TABLE {sch}.{v_tab} TO grp_admin;
|
||||
GRANT SELECT ON TABLE {sch}.{v_tab} TO grp_consult;""".format(sch=name_schema,tab=name_table,v_tab=v_tab,cols=lst_col)
|
||||
comment = """COMMENT ON VIEW {sch}.{v_tab} IS 'Version {v} 2.1 - Table des parcelles graphiques de l''isere.'""".format(sch=name_schema,v_tab=v_tab,v=thisyear)
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(sql)
|
||||
cnx.execute(comment)
|
||||
@@ -0,0 +1,32 @@
|
||||
from pycen import zh
|
||||
import geopandas as gpd
|
||||
import os
|
||||
|
||||
def get_intersected(df1,df2):
|
||||
is_intersect = df1.intersects(df2.unary_union)
|
||||
return df1[is_intersect].copy()
|
||||
|
||||
def format_data(df):
|
||||
istype_date = df.dtypes == 'datetime64[ns]'
|
||||
is_date = df.columns.str.contains('date|heure',case=False,regex=True)
|
||||
col_date = df.columns[istype_date|is_date]
|
||||
df[col_date] = df[col_date].astype(str)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
PATH = '/home/colas/Documents/tmp/PNE'
|
||||
file_pne = 'fwdcoucheszoneshumidesisroises/PNE_aoa.shp'
|
||||
|
||||
zh = zh()
|
||||
v_zh = zh.v_zoneshumides()
|
||||
zhp = zh.zh_ponctuelles()
|
||||
pne = gpd.read_file(os.path.join(PATH,file_pne))
|
||||
vzh_pne = get_intersected(v_zh,pne)
|
||||
zhp_pne = get_intersected(zhp,pne)
|
||||
|
||||
format_data(vzh_pne)
|
||||
format_data(zhp_pne)
|
||||
|
||||
vzh_pne.drop(['old_code','type_site'],axis=1).to_file(os.path.join(PATH,'PNE_ZH.gpkg'),driver='GPKG',layer='inventaire_zh')
|
||||
zhp_pne.to_file(os.path.join(PATH,'PNE_ZH.gpkg'),driver='GPKG',layer='zh_ponctuelle')
|
||||
@@ -0,0 +1,41 @@
|
||||
import geopandas as gpd
|
||||
from os import path
|
||||
|
||||
PATH = '/home/cgeier/Documents/9_PROJETS/2_PS/2026/Anne BELET - couchepelousessches'
|
||||
anne = gpd.read_file(path.join(PATH,'couche_finale_modif_CEN.gpkg')).set_index('site_code')
|
||||
mosa = gpd.read_file(path.join(PATH,'couche_finale_modif_mosaique.gpkg')).set_index('site_code')
|
||||
call = gpd.read_file(path.join(PATH,'couche_finale2.gpkg')).set_index('site_code')
|
||||
|
||||
date_cols = anne.columns[anne.columns.str.contains('date')]
|
||||
for tab in [anne,mosa,call]:
|
||||
for d in date_cols :
|
||||
tab[d] = (gpd.pd.to_datetime(tab[d],format='mixed',utc=True)
|
||||
.astype(str)
|
||||
.str.split(' ', expand=True)[0]
|
||||
)
|
||||
|
||||
|
||||
anne.loc[anne.auteur_attrs=='Anne BELET (GAM)','organisme'] = 'Grenoble Alpes Métropole'
|
||||
anne.loc[anne.auteur_geom=='Anne BELET (GAM)','organisme'] = 'Grenoble Alpes Métropole'
|
||||
anne.loc[anne.auteur_geom=='Ag Mosaique Env','organisme'] = 'Mosaïque Environnement'
|
||||
anne.loc[anne.auteur_geom=='Ag Mosaique Env','auteur_geom'] = 'Mosaïque Environnement'
|
||||
|
||||
anne.loc[anne.auteur_attrs=='Anne BELET (GAM)','auteur'] = 'BELET Anne'
|
||||
anne.loc[anne.auteur_geom=='Anne BELET (GAM)','auteur'] = 'BELET Anne'
|
||||
anne.loc[anne.auteur_geom=='Mosaïque Environnement','auteur'] = 'Mosaïque Environnement'
|
||||
|
||||
anne['id_origine'] = anne.index.str[:10]
|
||||
anne['id_site'] = anne.index.copy()
|
||||
anne.loc[anne.index.str.len()<10,'id_site'] = None
|
||||
anne.loc[anne.index.str.len()>10,'id_site'] = None
|
||||
|
||||
anne.rename(columns={
|
||||
'rmq_interet_patri':'remarques','rmq_usage_process':'legende'
|
||||
}, inplace=True)
|
||||
|
||||
anne.to_file(path.join(PATH,'GAM2026_couche_finale_modif_CEN (corrige).gpkg'),index=False)
|
||||
mosa.to_file(path.join(PATH,'GAM2026_couche_finale_modif_mosaique (corrige).gpkg'))
|
||||
call.to_file(path.join(PATH,'GAM2026_couche_finale (corrige).gpkg'))
|
||||
|
||||
anne.to_excel(path.join(PATH,'couche_finale_modif_CEN.xlsx'),index=False)
|
||||
mosa.to_excel(path.join(PATH,'couche_finale_modif_mosaique.xlsx'))
|
||||
@@ -0,0 +1,36 @@
|
||||
import pandas as pd
|
||||
import geopandas as gpd
|
||||
from pycen import con_gn
|
||||
|
||||
old = gpd.read_file('/home/cgeier/Téléchargements/Telechargement_1772622390_2696/data/n_zone_humide_s_038/n_zone_humide_s_038.json')
|
||||
new = gpd.read_postgis('SELECT * FROM gn_exports.v_synthese_zones_humides_isere',con_gn).to_crs(2154)
|
||||
tab = pd.read_csv('/home/cgeier/Documents/9_PROJETS/1_ZH/2024/RENDU SIG/pv_evolution_dossier.csv',sep=',')
|
||||
|
||||
|
||||
|
||||
for etude in tab.nom_etude.unique():
|
||||
if tab[(tab.nom_etude==etude)].organisme_transmission.any():
|
||||
continue
|
||||
print('\n',etude)
|
||||
news = tab[(tab.nom_etude==etude) & (tab.status_inventaire == 'Nouvelle')]
|
||||
modif = tab[(tab.nom_etude==etude) & (tab.status_inventaire== 'Modification')]
|
||||
supp = tab[(tab.nom_etude==etude) & (tab.status_inventaire == 'Supression')]
|
||||
|
||||
new_add = new[new.code.isin(news.code_zh.tolist())].copy()
|
||||
del_zh = old[old.id_local.isin(supp.code_zh.tolist())]
|
||||
print('\tNouvelles surfaces ajoutées : %f ha'%(round(new_add.area.sum()/10000,2)),' ; %i zh'%new_add.shape[0],' ; \n\tcode : ',', '.join(list(new_add.code)))
|
||||
print('\tSurfaces supprimées : %f ha'%(round(del_zh.area.sum()/10000,2)),' ; %i zh'%del_zh.shape[0],' ; \n\tcode : ',', '.join(list(del_zh.id_local)))
|
||||
|
||||
code_modif = modif.code_zh.tolist()
|
||||
diff = (new[new.code.isin(code_modif)]
|
||||
.sort_values('code').set_index('code').area - old[old.id_local.isin(code_modif)]
|
||||
.sort_values('id_local').set_index('id_local').area
|
||||
)
|
||||
add = diff[diff > 0]
|
||||
red = diff[diff < 0]
|
||||
|
||||
print('\tModification surfaces ajoutées : %f ha'%(round(add.sum()/10000,2)),' ; %i zh'%add.shape[0],' ; \n\tcode : ',', '.join(list(add.index)))
|
||||
print('\tModification surfaces perdues : %f ha'%(round(red.sum()/10000,2)),' ; %i zh'%red.shape[0],' ; \n\tcode : ',', '.join(list(red.index)))
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
import pycen
|
||||
import geopandas as gpd
|
||||
|
||||
dstct = pycen.ref.get_districtNat()
|
||||
ps = pycen.ps.get_sitesGeom(statut='all')
|
||||
|
||||
ps['org_bd'] = ps.id_site.str[2:6]
|
||||
ps['num'] = ps.id_site.str[6:]
|
||||
|
||||
|
||||
df = gpd.sjoin(ps,dstct[['abrev','geom']]).drop(columns=['index_right'])
|
||||
df.sort_values('id_site',inplace=True)
|
||||
|
||||
tmp = pycen.tools.calc_recouvrmt(df1=df[df.org != df.abrev], df2=dstct)
|
||||
|
||||
|
||||
from geopandas import sjoin
|
||||
tmp = sjoin(
|
||||
df1,
|
||||
df2[['geom']],
|
||||
op = 'intersects',
|
||||
how = 'left')
|
||||
tmp.dropna(subset=['index_right'],inplace=True)
|
||||
tmp.index_right = tmp.index_right.astype(int)
|
||||
tmp.reset_index(inplace=True)
|
||||
tmp = tmp.join(
|
||||
df2[['geom']].rename(columns={'geom': 'right_geom'}),
|
||||
on=['index_right'], how='left')
|
||||
tmp2 = tmp[['index_right','right_geom']].copy() \
|
||||
.rename(columns={'right_geom': 'geom'}) \
|
||||
.set_geometry('geom')
|
||||
tmp1 = tmp[['id_site','geom']].copy() \
|
||||
.set_geometry('geom')
|
||||
|
||||
if not tmp1.geom.values.is_valid.all():
|
||||
tmp1.loc[~tmp1.geom.values.is_valid,'geom'] = tmp1.loc[~tmp1.geom.values.is_valid,'geom'].buffer(0)
|
||||
if not tmp2.geom.values.is_valid.all():
|
||||
tmp2.loc[~tmp2.geom.values.is_valid,'geom'] = tmp2.loc[~tmp2.geom.values.is_valid,'geom'].buffer(0)
|
||||
|
||||
tmp['perc_rcvmt'] = (tmp1.intersection(tmp2).area/tmp1.area)*100
|
||||
tmp = tmp.groupby(['id_site']).sum().reset_index()
|
||||
df1 = df1.merge(tmp[['id_site','perc_rcvmt']], on=['id_site'], how='left')
|
||||
df1.perc_rcvmt.fillna(0, inplace=True)
|
||||
df1.perc_rcvmt = df1.perc_rcvmt.round(2)
|
||||
|
||||
tmp1['area_rcvmt'] = [gpd.overlay(tmp1.iloc[[i]],tmp2.iloc[[i]]).area.round()[0] for i in range(0,tmp1.shape[0]) ]
|
||||
|
||||
|
||||
|
||||
# Maj origine district
|
||||
df = ps[ps.org_bd!=ps.org].sort_values('id_site').copy()
|
||||
pycen.update_to_sql(
|
||||
df[['id_site','org']].rename(columns={'id_site':'id'}).drop_duplicates(),
|
||||
pycen.con,'sites','sites','id'
|
||||
)
|
||||
|
||||
|
||||
# Redéfinition des numéro de sites
|
||||
ps_sit = pycen.ps.get_sitesInfos(statut='all')
|
||||
ps_sit.loc[ps_sit.id.isin(df.id_site),'num'] = None
|
||||
# attribution de numéro non utilisé
|
||||
for o in ps_sit.org.unique():
|
||||
tmp_sit = ps_sit.loc[ps_sit.org==o,'num'].dropna().astype(int)
|
||||
min = tmp_sit.min()
|
||||
max = tmp_sit.max()
|
||||
lst = [str(i) for i in range(min,max) if i not in [*tmp_sit]]
|
||||
tt = (ps_sit.org==o)&(ps_sit.num.isna())
|
||||
tmp_sitna = ps_sit[tt]
|
||||
if tmp_sitna.shape[0] <= len(lst):
|
||||
ps_sit.loc[tt,'num'] = lst[:tmp_sitna.shape[0]]
|
||||
else:
|
||||
ps_sit.loc[(ps_sit.index.isin(tt[tt].index[:len(lst)])),'num'] = lst
|
||||
|
||||
tt2 = (ps_sit.org==o)&(ps_sit.num.isna())
|
||||
min2 = max + 1
|
||||
max2 = max + 1 + ps_sit[tt2].shape[0]
|
||||
lst2 = [str(i) for i in range(min2,max2)]
|
||||
ps_sit.loc[tt2,'num'] = lst2
|
||||
|
||||
df2 = ps_sit.loc[ps_sit.id.isin(df.id_site)]
|
||||
df2.loc[df2.num.str.len() == 1,'num'] = '000'+ df2.loc[df2.num.str.len() == 1,'num']
|
||||
df2.loc[df2.num.str.len() == 2,'num'] = '00' + df2.loc[df2.num.str.len() == 2,'num']
|
||||
df2.loc[df2.num.str.len() == 3,'num'] = '0' + df2.loc[df2.num.str.len() == 3,'num']
|
||||
|
||||
pycen.update_to_sql(
|
||||
df2[['id','num']].drop_duplicates(),
|
||||
pycen.con,'sites','sites','id'
|
||||
)
|
||||
|
||||
|
||||
# Redéfinition des écritures
|
||||
ps_sitnew = pycen.ps.get_sitesInfos(id_site=[*df.id_site],statut='all')
|
||||
ps_sitnew = ps_sitnew[[
|
||||
'id','dept','org','num',
|
||||
]]
|
||||
ps_sitnew['idnew'] = ps_sitnew.dept+ps_sitnew.org+ps_sitnew.num
|
||||
# incrémentation de l'historique
|
||||
ps_sitnew[['id','idnew']]\
|
||||
.rename(columns={
|
||||
'id':'id_site_old',
|
||||
'idnew':'id_site_new'
|
||||
}).to_sql(
|
||||
'hist_id_site',
|
||||
pycen.con,'sites',if_exists='append',index=False
|
||||
)
|
||||
# modification des noms
|
||||
pycen.update_to_sql(
|
||||
ps_sitnew[['index','dept','org','num']].rename(columns={'index':'id'}).drop_duplicates(),
|
||||
pycen.con,'sites','sites',['dept','org','num']
|
||||
)
|
||||
pycen.update_to_sql(
|
||||
ps_sitnew[['idnew','dept','org','num']].rename(columns={'idnew':'id'}).drop_duplicates(),
|
||||
pycen.con,'sites','sites',['dept','org','num']
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,233 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-
|
||||
|
||||
# 2024-11-26
|
||||
# LE script permet d'intégrer de nouvelles géométries
|
||||
# dans la table sites.r_sites_geom. Les AUTEURS ont été
|
||||
# intégrés manuellement.
|
||||
|
||||
import geopandas as gpd
|
||||
from pycen import con, zh as ZH
|
||||
from pycen.tools import dropZ, Polygons_to_MultiPolygon
|
||||
from os import path
|
||||
from shapely import wkb
|
||||
from matplotlib import pyplot as plt
|
||||
import pycen
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.engine import URL
|
||||
|
||||
# isin_bdd = True
|
||||
# # Parametres bdd CEN38 OUT
|
||||
user = 'cen_admin'
|
||||
pwd = "#CEN38@venir"
|
||||
adr = '91.134.194.221'
|
||||
base = 'azalee_restore'
|
||||
url = URL.create("postgresql+psycopg2", username=user, password=pwd, host=adr, database=base)
|
||||
con = create_engine(url)
|
||||
|
||||
|
||||
zh = ZH()
|
||||
r_geom = zh.get_sitesGeom()
|
||||
r_geom = gpd.read_postgis('''
|
||||
SELECT r_sites_geom.* FROM sites.r_sites_geom
|
||||
JOIN sites.sites ON sites.id = r_sites_geom.id_site AND sites.id_type_milieu = 1
|
||||
''',con)
|
||||
r_geom.dropna(how="all",axis=1,inplace=True)
|
||||
r_geom.drop(columns=['id','date_insert','id_origine','id_lot'],inplace=True)
|
||||
r_geom.sort_values(['id_site','date'],inplace=True)
|
||||
r_geom.drop_duplicates(['id_site'],keep='last',inplace=True)
|
||||
|
||||
|
||||
PATH = '/home/colas/Documents/9_PROJETS/1_ZH/MAJ/Actu 2024/FAIT/CBNA/zh38'
|
||||
file = 'hab_agreg.gpkg'
|
||||
df = gpd.read_file(path.join(PATH,file))
|
||||
df.rename_geometry('geom', inplace=True)
|
||||
df.geom = [wkb.loads(wkb.dumps(g,output_dimension=2)) for g in df.geom]
|
||||
df.dropna(how='all',axis=1,inplace=True)
|
||||
|
||||
# gpd.GeoSeries([r_geom.unary_union],crs=2154).contains(df.geom)
|
||||
# df.contains(r_geom.geom).any()
|
||||
# res = df.within(r_geom.unary_union)
|
||||
|
||||
perc = 80
|
||||
|
||||
zh_caract = df[df.zh=='caractéristique'].copy()
|
||||
zh_caract['surfzhall'] = zh_caract.groupby(['idpolyfinal'])['n06rechab'].transform('sum')
|
||||
lst_idpoly = zh_caract[zh_caract.surfzhall >= perc].idpolyfinal.unique()
|
||||
# zh_caract.within(r_geom.unary_union)
|
||||
# zh_caract.contains(r_geom.unary_union).any()
|
||||
|
||||
# Non Intersection Après 2015 - tout milieux
|
||||
no_inters = df[
|
||||
(df.lien_zh == 'aucun') & (df.n07anneehab > 2015) #& (df.zh=='caractéristique')
|
||||
& (df.idpolyfinal.isin(lst_idpoly))
|
||||
& (~df.n05lbhab.str.contains('invasif',na=False,case=False))
|
||||
].copy()
|
||||
no_inters = no_inters.drop(columns=['id_site']).sjoin(r_geom[['id_site','geom']])
|
||||
no_inters.to_file(path.join(PATH,'inters.gpkg'),driver='GPKG',layer='no_inters%i'%perc)
|
||||
len(no_inters.id_site.unique())
|
||||
|
||||
# Intersection Après 2015 - tout milieux
|
||||
inters = df[
|
||||
(df.lien_zh == 'intersecte') & (df.n07anneehab > 2015) #& (df.zh=='caractéristique')
|
||||
# & (df.n06rechab.astype(int)>45)
|
||||
& (df.idpolyfinal.isin(lst_idpoly))
|
||||
& (~df.n05lbhab.str.contains('invasif',na=False,case=False))
|
||||
].copy()
|
||||
inters = inters.drop(columns=['id_site']).sjoin(r_geom[['id_site','geom']])
|
||||
inters.to_file(path.join(PATH,'inters.gpkg'),driver='GPKG',layer='inters%i'%perc)
|
||||
len(inters.id_site.unique())
|
||||
|
||||
# Intersection Après 2009 - milieux Forêts uniquement
|
||||
inters_foret = df[
|
||||
(df.lien_zh == 'intersecte') & (df.zh=='caractéristique') #& (df.n07anneehab > 1999)
|
||||
# & (df.n06rechab.astype(int)>45)
|
||||
& (df.idpolyfinal.isin(lst_idpoly)) & (df.n05lbhab.str.contains('for.t',na=False,case=False))
|
||||
& (~df.n05lbhab.str.contains('invasif',na=False,case=False))
|
||||
& (~df.idpolyfinal.isin(inters.idpolyfinal.tolist()))
|
||||
].copy()
|
||||
inters_foret = inters_foret.drop(columns=['id_site']).sjoin(r_geom[['id_site','geom']])
|
||||
inters_foret.to_file(path.join(PATH,'inters.gpkg'),driver='GPKG',layer='inters_forets')
|
||||
|
||||
# Fusion Géométries
|
||||
intersF = gpd.pd.concat([inters,inters_foret])
|
||||
intersF.to_csv(path.join(PATH,'intersection_finale_hab_zh.csv'))
|
||||
rgeo = (r_geom[r_geom.id_site.isin(intersF.id_site.unique())]
|
||||
.copy())
|
||||
for id_site in rgeo.id_site.unique():
|
||||
rgeo.loc[rgeo.id_site==id_site,'geom'] = gpd.GeoSeries([
|
||||
gpd.GeoSeries(
|
||||
[*rgeo[rgeo.id_site==id_site].geom,
|
||||
*intersF[intersF.id_site==id_site].geom],
|
||||
crs=2154).unary_union
|
||||
],
|
||||
crs=2154,
|
||||
index=rgeo[rgeo.id_site==id_site].index)
|
||||
rgeo.date = '2024-01-21'
|
||||
|
||||
# Filtre geométries plus grandes
|
||||
rgeo2 = rgeo[
|
||||
rgeo.sort_values('id_site').area
|
||||
> r_geom[r_geom.id_site.isin(rgeo.id_site.unique())].sort_values('id_site').area
|
||||
]
|
||||
|
||||
# Check habitats describes
|
||||
sql = 'SELECT * FROM zones_humides.r_site_habitat WHERE valid IS True and id_site IN {lst}'.format(lst=tuple(intersF.id_site.unique()))
|
||||
hab_bdd = gpd.pd.read_sql(sql,con)
|
||||
|
||||
insert_hab = gpd.pd.DataFrame()
|
||||
for id_site in intersF.id_site.unique():
|
||||
lst_bddhab = hab_bdd[hab_bdd.id_site==id_site].id_cb.tolist()
|
||||
cbn_hab = intersF[(intersF.id_site==id_site)&(~intersF.n24cdcb.astype(str).isin(lst_bddhab))]
|
||||
insert_hab = gpd.pd.concat([insert_hab,cbn_hab])
|
||||
|
||||
ins_hab = (insert_hab[['n03observat','n04organism','n07anneehab','n24cdcb','id_site']]
|
||||
.rename(columns={'n24cdcb':'id_cb','n03observat':'observer','n04organism':'organisme','n07anneehab':'annee'})
|
||||
.replace(
|
||||
{'AMODEI T':'AMODEI Thomas',
|
||||
'Lo Parvi':'LO PARVI',
|
||||
'ACER CAMPESTRE':'Acer Campestre',
|
||||
'Réflex environnement':'REFLEX Environnement',
|
||||
'Office National des Forets':'Office National des Forêts',
|
||||
'Conservatoire botanique national alpin':'Conservatoire Botanique National Alpin',
|
||||
'Mosaique Environnement, M. Voirin':'Mosaïque Environnement',
|
||||
'Boucard E.':'BOUCARD E.',
|
||||
'MALET, A., JOUD. D., LINOSSIER, T.':'MALET A., JOUD Didier, LINOSSIER T.',
|
||||
'AURAND T., TAIN C':'AURAND Theo, TAIN C.',
|
||||
'FOLCHER C.':'FOLCHER Caroline',
|
||||
"Conservatoire d'espaces naturels": 'CEN Isère'
|
||||
})
|
||||
.drop_duplicates())
|
||||
ins_hab['auteur'] = None
|
||||
ins_hab.loc[ins_hab.observer.isna(),['auteur']] = ins_hab[ins_hab.observer.isna()].organisme
|
||||
ins_hab.loc[~ins_hab.observer.isna(),['auteur']] = (ins_hab[~ins_hab.observer.isna()].observer +
|
||||
' (' +ins_hab[~ins_hab.observer.isna()].organisme + ')')
|
||||
ins_hab['date'] = ins_hab.annee.astype(str) + '-01-01'
|
||||
ins_hab.drop(columns=['observer','organisme','annee'],inplace=True)
|
||||
|
||||
# Insertion geom BDD
|
||||
rgeo2.to_postgis('r_sites_geom',pycen.con,'sites',if_exists='append',index=False)
|
||||
|
||||
siteid = gpd.pd.read_sql('''
|
||||
SELECT DISTINCT ON (id_site) id,id_site
|
||||
FROM sites.r_sites_geom
|
||||
WHERE id_site IN {lst}
|
||||
ORDER BY id_site,id DESC
|
||||
'''.format(lst=tuple(rgeo2.id_site.unique())),pycen.con)
|
||||
usr = siteid.drop(columns=['id_site']).copy()
|
||||
usr.rename(columns={'id':'id_geom_site'},inplace=True)
|
||||
usr['id_auteur'] = 96
|
||||
usr.to_sql('r_geomsites_auteur',pycen.con,schema='sites',if_exists='append',index=False)
|
||||
|
||||
# Insertion habitat BDD
|
||||
siteidgeo = gpd.pd.read_sql('''
|
||||
SELECT DISTINCT ON (id_site) id id_geom_site,id_site
|
||||
FROM sites.r_sites_geom
|
||||
WHERE id_site IN {lst}
|
||||
ORDER BY id_site,id DESC
|
||||
'''.format(lst=tuple(ins_hab.id_site.unique())),pycen.con)
|
||||
ins_habF = ins_hab.merge(siteidgeo, on='id_site',how='left')
|
||||
ins_habF.sort_values(['id_site','id_cb','date'],inplace=True)
|
||||
ins_habF.drop_duplicates(subset=['id_site','id_cb'],keep='last',inplace=True)
|
||||
ins_habF['valid'] = True
|
||||
ins_habF.to_csv(path.join(PATH,'habs_inserted.csv'))
|
||||
(ins_habF
|
||||
.drop(columns=['auteur'])
|
||||
.to_sql('r_site_habitat',pycen.con,schema='zones_humides',if_exists='append',index=False))
|
||||
|
||||
|
||||
refpers = (pycen.pers.get_auteur2()
|
||||
.replace({'nom_prenom':{
|
||||
'ONF38 (ONF)':'Office National des Forêts',
|
||||
'CBNA (CBNA)':'Conservatoire Botanique National Alpin',
|
||||
'LO PARVI (LO PARVI)':'LO PARVI',
|
||||
'CEN Isère (CEN Isère)':'CEN Isère',
|
||||
'Ecosphère (Ecosphère)':'Ecosphère',
|
||||
'BURGEAP (BURGEAP)':'BURGEAP',
|
||||
'Acer Campestre (Acer Campestre)':'Acer Campestre',
|
||||
'REFLEX Environnement (REFLEX Environnement)':'REFLEX Environnement',
|
||||
'REFLEX Environnement (REFLEX Environnement)':'REFLEX Environnement'
|
||||
}})
|
||||
.replace({'nom_prenom':{
|
||||
'CBNA':'Conservatoire Botanique National Alpin',
|
||||
'ONF':'Office National des Forêts',
|
||||
'BÉGUIN Lucile':'BEGUIN Lucile',
|
||||
'CEN AURA':'Conservatoire Régional des Espaces Naturels Rhône-Alpes',
|
||||
'CD Isère':"Département de l'Isère"
|
||||
}},regex=True))
|
||||
pers_dict = dict(zip(refpers.nom_prenom,refpers.index))
|
||||
siteidhab = gpd.pd.read_sql('''
|
||||
SELECT DISTINCT id,id_site,id_cb,date,id_geom_site
|
||||
FROM zones_humides.r_site_habitat
|
||||
WHERE (id_site,id_cb,date,id_geom_site) IN {lst}
|
||||
ORDER BY id_site,id DESC
|
||||
'''.format(lst=tuple(tuple(ins_habF[['id_site','id_cb','date','id_geom_site']].itertuples(index=False,name=None)))),pycen.con)
|
||||
hab_auth = (ins_habF[['id_site','auteur','id_cb','date']]
|
||||
.astype(str)
|
||||
.merge(siteidhab.astype(str), on=['id_site','id_cb','date'],how='left')
|
||||
.rename(columns={'id':'id_sitehab'})
|
||||
.set_index(['id_sitehab']))
|
||||
hab_auth['orga'] = (hab_auth.auteur.str.split('(').str[-1]
|
||||
.str.split(')').str[0])
|
||||
|
||||
test_auth = hab_auth.auteur.str.contains(',')
|
||||
hab_auth1 = (hab_auth[~test_auth].auteur
|
||||
.replace(pers_dict)
|
||||
.to_frame('id_auteur'))
|
||||
hab_auth_tmp = (hab_auth[test_auth]
|
||||
.auteur.str.split('(').str[0]
|
||||
.str.split(',')
|
||||
.explode()
|
||||
.str.strip()
|
||||
.to_frame('auteur')
|
||||
.merge(hab_auth.loc[test_auth,['orga']],left_index=True,right_index=True))
|
||||
hab_auth2 = ((hab_auth_tmp.auteur+' ('+hab_auth_tmp.orga+')')
|
||||
.replace({
|
||||
'BURGEAP (BURGEAP, ECOSPHERE)':'BURGEAP',
|
||||
'ECOSPHERE (BURGEAP, ECOSPHERE)':'Ecosphère',})
|
||||
.replace(pers_dict)
|
||||
.to_frame('id_auteur'))
|
||||
|
||||
(gpd.pd.concat([hab_auth1,hab_auth2])
|
||||
.reset_index(drop=False)
|
||||
.to_sql('r_rsitehab_auteur',pycen.con,schema='zones_humides',if_exists='append',index=False))
|
||||
@@ -0,0 +1,153 @@
|
||||
from pycen import zh as ZH
|
||||
import geopandas as gpd
|
||||
import pandas as pd
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.engine import URL
|
||||
|
||||
import os
|
||||
|
||||
zh = ZH()
|
||||
# isin_bdd = True
|
||||
# # Parametres bdd CEN38 OUT
|
||||
from pycen import con
|
||||
|
||||
lst_table = [
|
||||
'r_sites_geom',
|
||||
'r_site_critdelim',
|
||||
'r_site_fctecosociopatri',
|
||||
'r_site_habitat',
|
||||
'r_site_reghydro',
|
||||
'r_site_sub',
|
||||
'r_site_type_connect',
|
||||
'r_site_usageprocess',
|
||||
]
|
||||
|
||||
result = {}
|
||||
for table in lst_table:
|
||||
sql_old = "SELECT max(t.id) FROM {sch}.{tab} t".format(tab=table,sch='sites' if table == 'r_sites_geom' else 'zones_humides')
|
||||
if table == 'r_sites_geom':
|
||||
sql_old += ' JOIN sites.sites ON sites.id = t.id_site AND sites.id_type_milieu = 1'
|
||||
# else:
|
||||
# sql_old += ''' JOIN sites.sites ON sites.id = r_sites_geom.id_site AND sites.id_type_milieu = 1'''
|
||||
|
||||
id_old = pd.read_sql(sql_old,con)
|
||||
|
||||
sql = "SELECT t.* FROM {sch}.{tab} t".format(tab=table,sch='sites' if table == 'r_sites_geom' else 'zones_humides')
|
||||
if table == 'r_sites_geom':
|
||||
sql += ' JOIN sites.sites ON sites.id = t.id_site AND sites.id_type_milieu = 1'
|
||||
|
||||
sql += " WHERE t.id > {id} AND id_site != '26PNRV0208'".format(id=id_old.values[0][0])
|
||||
result[table] = pd.read_sql(sql,zh.con)
|
||||
|
||||
if table == 'r_sites_geom':
|
||||
sql_lot = "SELECT * FROM sites.lots WHERE id_lot IN {id}".format(id=tuple(result[table].id_lot.dropna().unique()))
|
||||
lot = pd.read_sql(sql_lot,zh.con).dropna(how='all',axis=1)
|
||||
result[table] = result[table].merge(lot, on='id_lot',how='left')
|
||||
|
||||
r_geo = result['r_sites_geom']
|
||||
|
||||
sql = '''
|
||||
with lots as (
|
||||
SELECT DISTINCT ON (id_site)
|
||||
id_site,lots.*
|
||||
FROM sites.r_sites_geom
|
||||
LEFT JOIN sites.lots USING (id_lot)
|
||||
ORDER BY id_site, "date" DESC
|
||||
)
|
||||
SELECT v.*, lots.libelle FROM zones_humides.v_zoneshumides v
|
||||
JOIN lots ON v.site_code = lots.id_site
|
||||
WHERE v.site_code IN {lst_code}
|
||||
'''.format(lst_code=str(tuple(r_geo.id_site.unique())))
|
||||
vzh = gpd.read_postgis(sql,zh.con).dropna(subset=['libelle']).dropna(how='all',axis=1)
|
||||
vzh_old = gpd.read_postgis('SELECT * FROM zones_humides.v_zoneshumides',con).dropna(how='all',axis=1)
|
||||
vzh_new = gpd.read_postgis('SELECT * FROM zones_humides.v_zoneshumides',zh.con).dropna(how='all',axis=1)
|
||||
|
||||
date_cols = vzh.columns[vzh.columns.str.contains('date|heure')]
|
||||
vzh[date_cols] = vzh[date_cols].astype(str)
|
||||
vzh_old[['old_code',*date_cols]] = vzh_old[['old_code',*date_cols]].astype(str)
|
||||
vzh_new[['old_code',*date_cols]] = vzh_new[['old_code',*date_cols]].astype(str)
|
||||
|
||||
|
||||
PATH = '/home/colas/Documents/9_PROJETS/1_ZH/2024'
|
||||
vzh_old.to_file(os.path.join(PATH,'20250415_avancement.gpkg'),driver='GPKG',layer='Inventaire_initiale')
|
||||
vzh_new.to_file(os.path.join(PATH,'20250415_avancement.gpkg'),driver='GPKG',layer='Inv_actualisee_20250415')
|
||||
for _lib in vzh.libelle.unique():
|
||||
lib = (_lib.removesuffix('2024')
|
||||
.removeprefix('ZH')
|
||||
.replace('actualisation','CENIsere'))
|
||||
|
||||
tmp = vzh[vzh.libelle == _lib]
|
||||
new = tmp[~tmp.site_code.isin(vzh_old.site_code.tolist())]
|
||||
upt = tmp[tmp.site_code.isin(vzh_old.site_code.tolist())]
|
||||
if not new.empty:
|
||||
print(f'NEW {lib} : ',str(new.site_code.tolist()))
|
||||
# new.to_file(os.path.join(PATH,'20250415_avancement.gpkg'),driver='GPKG',layer='newzh'+lib+str(new.shape[0]))
|
||||
if not upt.empty:
|
||||
print(f'UPDT {lib} : ',str(upt.site_code.tolist()))
|
||||
# upt.to_file(os.path.join(PATH,'20250415_avancement.gpkg'),driver='GPKG',layer='majzh'+lib+str(upt.shape[0]))
|
||||
|
||||
vzh_reduc = (vzh[vzh.site_code.isin(vzh_old.site_code.tolist())].sort_values('site_code').set_index('site_code').area.sub(vzh_old[vzh_old.site_code.isin(vzh.site_code.tolist())].sort_values('site_code').set_index('site_code').area,fill_value=0))
|
||||
vzh_reduc[vzh_reduc<0].sum() / 10000
|
||||
vzh_reduc[vzh_reduc>0].sum() / 10000
|
||||
|
||||
area_maj = (vzh[vzh.site_code.isin(vzh_old.site_code.tolist())].area.sum() - vzh_old[vzh_old.site_code.isin(vzh.site_code.tolist())].area.sum()) / 10000
|
||||
area_new = vzh[~vzh.site_code.isin(vzh_old.site_code.tolist())].area.sum() / 10000
|
||||
|
||||
cbna = vzh[vzh.libelle=='ZH_CBNA_2024']
|
||||
new_cbna = cbna[(~cbna.site_code.isin(vzh_old.site_code.tolist()))&(vzh.libelle=='ZH_CBNA_2024')].area.sum() / 10000
|
||||
maj_cbna = (cbna[cbna.site_code.isin(vzh_old.site_code.tolist())].area.sum() - vzh_old[vzh_old.site_code.isin(cbna.site_code.tolist())].area.sum()) / 10000
|
||||
|
||||
pgszh = vzh[vzh.libelle=='ZH_pgszhBelledonne_2024']
|
||||
new_pgszh = pgszh[(~pgszh.site_code.isin(vzh_old.site_code.tolist()))&(vzh.libelle=='ZH_pgszhBelledonne_2024')].area.sum() / 10000
|
||||
maj_pgszh = (pgszh[pgszh.site_code.isin(vzh_old.site_code.tolist())].area.sum() - vzh_old[vzh_old.site_code.isin(pgszh.site_code.tolist())].area.sum()) / 10000
|
||||
|
||||
evin = vzh[vzh.libelle=='ZH_EVINERUDE_2024']
|
||||
new_evin = evin[(~evin.site_code.isin(vzh_old.site_code.tolist()))&(vzh.libelle=='ZH_EVINERUDE_2024')].area.sum() / 10000
|
||||
maj_evin = (evin[evin.site_code.isin(vzh_old.site_code.tolist())].area.sum() - vzh_old[vzh_old.site_code.isin(evin.site_code.tolist())].area.sum()) / 10000
|
||||
|
||||
lst_attrs = []
|
||||
r_geo = result['r_sites_geom']
|
||||
for table in result.keys():
|
||||
if table == 'r_sites_geom':
|
||||
continue
|
||||
df = result[table]
|
||||
no_geo = df[~df.id_site.isin(r_geo.id_site.unique())]
|
||||
lst_attrs += no_geo.id_site.unique().tolist()
|
||||
|
||||
lst_attrs = [x for x in list(set(lst_attrs)) if x is not None]
|
||||
|
||||
r_crit = result['r_site_critdelim']
|
||||
r_fct = result['r_site_fctecosociopatri']
|
||||
r_hab = result['r_site_habitat']
|
||||
r_hyd = result['r_site_reghydro']
|
||||
r_sub = result['r_site_sub']
|
||||
r_connect = result['r_site_type_connect']
|
||||
r_usg = result['r_site_usageprocess']
|
||||
|
||||
new_r_crit = r_crit[r_crit.id_site.isin(lst_attrs)]
|
||||
new_r_fct = r_fct[r_fct.id_site.isin(lst_attrs)]
|
||||
new_r_hab = r_hab[r_hab.id_site.isin(lst_attrs)]
|
||||
new_r_hyd = r_hyd[r_hyd.id_site.isin(lst_attrs)]
|
||||
new_r_sub = r_sub[r_sub.id_site.isin(lst_attrs)]
|
||||
new_r_connect = r_connect[r_connect.id_site.isin(lst_attrs)]
|
||||
new_r_usg = r_usg[r_usg.id_site.isin(lst_attrs)]
|
||||
|
||||
len_new_crit = new_r_crit.shape[0]
|
||||
len_new_fct = new_r_fct.shape[0]
|
||||
len_new_hab = new_r_hab.shape[0]
|
||||
len_new_hyd = new_r_hyd.shape[0]
|
||||
len_new_sub = new_r_sub.shape[0]
|
||||
len_new_connect = new_r_connect.shape[0]
|
||||
len_new_usg = new_r_usg.shape[0]
|
||||
|
||||
lst_new_crit = new_r_crit.id_site.unique().tolist()
|
||||
lst_new_fct = new_r_fct.id_site.unique().tolist()
|
||||
lst_new_hab = new_r_hab.id_site.unique().tolist()
|
||||
lst_new_hyd = new_r_hyd.id_site.unique().tolist()
|
||||
lst_new_sub = new_r_sub.id_site.unique().tolist()
|
||||
lst_new_connect = new_r_connect.id_site.unique().tolist()
|
||||
lst_new_usg = new_r_usg.id_site.unique().tolist()
|
||||
|
||||
tmp = gpd.read_file('/home/colas/Documents/9_PROJETS/1_ZH/MAJ/Actu 2024/BE EPODE - LEZE/KIT INVENTAIRE38 MODIFIE/a envoyer prêt/GEOM/38CG0105_Epode2025.gpkg')
|
||||
tmp_old = gpd.read_postgis('SELECT * FROM zones_humides.v_zoneshumides WHERE site_code = \'38CG0105\'',con)
|
||||
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding:UTF-8 -*-
|
||||
from pycen import con, update_to_sql
|
||||
import geopandas as gpd
|
||||
|
||||
file = "/media/cgeier/SRV/FICHIERS/OUTILS/CARTOGRAPHIE/ESPACE DE TRAVAIL/ETUDES/PGSZH_Belledonne/Inventaire 2023/ZH_Belledonne_MAJ_2023_NB.shp"
|
||||
|
||||
df = gpd.read_file(file)
|
||||
df = (df[df.site_code.isin(['38BB0028','38BB0055','38RD0170'])]
|
||||
.filter(items=['site_code', 'geometry']))
|
||||
df.rename_geometry('geom', inplace=True)
|
||||
df.rename(columns={'site_code': 'id_site'}, inplace=True)
|
||||
|
||||
df_updt = df[df.id_site.isin(['38RD0170'])]
|
||||
update_to_sql(df_updt,con,'r_sites_geom','sites','id_site')
|
||||
|
||||
df_ins = df[df.id_site.isin(['38BB0028','38BB0055'])]
|
||||
df_ins['date'] = '2023-06-21'
|
||||
df_ins.to_postgis('r_sites_geom',con,if_exists='append',index=False,schema='sites')
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-
|
||||
|
||||
import geopandas as gpd
|
||||
from pycen import con
|
||||
|
||||
path0 = '/home/colas/Documents/9_PROJETS/2_PS/TO IMPORT/'
|
||||
file = 'CDisère_PS2016_4Montagnes.shp'
|
||||
dic = {
|
||||
'identifian':'ident',
|
||||
'habitat1' : 'code_hab1',
|
||||
'partpoly1': 'n_hab1',
|
||||
'habitat2' : 'code_hab2',
|
||||
'partpoly2': 'n_hab2',
|
||||
'habitat3' : 'code_hab3',
|
||||
'partpoly3': 'n_hab3',
|
||||
'habitat4' : 'code_hab4',
|
||||
'partpoly4': 'n_hab4',
|
||||
'légende':'legende',
|
||||
'embrou_cod':'niv_embrous',
|
||||
'embrous':'%_embrous',
|
||||
'sol nu_cod':'recouvmnt',
|
||||
'sol nu':'%_recouvmnt',
|
||||
'orchidées':'rmq_phyto',
|
||||
'alliance':'rmq_phytosocio',
|
||||
'maec':'rmq_contract_agri',
|
||||
}
|
||||
dic_auth = {
|
||||
'Anne-Lyse Murro':'MURRO Anne-Lyse',
|
||||
'Lucas Berardi' : 'BERARDI Lucas'
|
||||
}
|
||||
dic_prat = {
|
||||
'Mixte' : 'Fauche, Pâturage',
|
||||
'Adandon':'Abandon',
|
||||
'P�turage':'Pâturage'
|
||||
}
|
||||
dic_stat = {
|
||||
'Aucun' : 'Non communautaire',
|
||||
'Prioriataire' : 'Prioritaire'
|
||||
}
|
||||
dic_date = {
|
||||
'mai 2016' : '2016-05-01',
|
||||
'juin 2016' : '2016-06-01',
|
||||
'juillet 2016' : '2016-07-01',
|
||||
'aout 2016' : '2016-08-01',
|
||||
'août 2016' : '2016-08-01',
|
||||
}
|
||||
keep_cols = ['auteur','date',*dic.values(),'rosette','pratique','statut','remarques','geom']
|
||||
|
||||
def emb_correct(df):
|
||||
l1 = ['GIR3','AU7']
|
||||
l2 = ['BOI1','VIL10','VIL8a']
|
||||
l3 = ['MEA4a','ME']
|
||||
l4 = ['MO3','MA3','VIL14','BD1','VF','CHA2','CHA5','ROM3']
|
||||
l5 = ['BEL1','JA5','AU4']
|
||||
df.loc[df.index.isin(l1),'niv_embrous'] = 1
|
||||
df.loc[df.index.isin(l2),'%_embrous'] = 4
|
||||
df.loc[df.index.isin(l3),'%_embrous'] = 29
|
||||
df.loc[df.index.isin(l4),'%_embrous'] = 30
|
||||
df.loc[df.index.isin(l5),'%_embrous'] = 60
|
||||
return df
|
||||
|
||||
def sol_correct(df):
|
||||
# df.loc[df.index=='GEY1','%_recouvmnt'] = 19
|
||||
df.loc[df.index=='CHA5','%_recouvmnt'] = 21
|
||||
# df.loc[df.index=='GEY2','%_recouvmnt'] = 19
|
||||
# df.loc[df.index=='SN1','%_recouvmnt'] = 19
|
||||
df.loc[df.index=='AU1','%_recouvmnt'] = 21
|
||||
df.loc[(df.recouvmnt==1)&(df['%_recouvmnt']>0),'%_recouvmnt'] = 0
|
||||
df.loc[(df.recouvmnt==2)&(df['%_recouvmnt']>10),'%_recouvmnt'] = 10
|
||||
df.loc[(df.recouvmnt==3)&(df['%_recouvmnt']>20),'%_recouvmnt'] = 20
|
||||
df.loc[(df.recouvmnt==4)&(df['%_recouvmnt']<21),'%_recouvmnt'] = 21
|
||||
return df
|
||||
|
||||
|
||||
# récupération des données
|
||||
sql = 'SELECT site_code,geom FROM ps.v_pelouseseches'
|
||||
v_ps = gpd.read_postgis(sql, con)
|
||||
df0 = gpd.read_file(path0 + file)
|
||||
df0.columns = df0.columns.str.lower()
|
||||
df0.rename(columns=dic, inplace=True)
|
||||
df0.rename_geometry('geom', inplace=True)
|
||||
df = df0[keep_cols].copy()
|
||||
df.set_index('ident', inplace=True)
|
||||
df.pratique.replace(dic_prat,inplace=True)
|
||||
df.statut.replace(dic_stat,inplace=True)
|
||||
df.auteur.replace(dic_auth,inplace=True,regex=True)
|
||||
df.date = df.date.str.lower()
|
||||
df.date.replace(dic_date,inplace=True)
|
||||
df.date = gpd.pd.to_datetime(df.date)
|
||||
df = emb_correct(df)
|
||||
df = sol_correct(df)
|
||||
|
||||
# Correction code Corine Biotope
|
||||
df.loc[df.code_hab2=='41D','code_hab2'] = '41.D'
|
||||
|
||||
# Concaténation des remarques
|
||||
df.loc[~df.rmq_phyto.isna(),'remarques'] = df.loc[~df.rmq_phyto.isna(),'remarques'] +\
|
||||
'; rmq_phyto : ' + df.loc[~df.rmq_phyto.isna(),'rmq_phyto']
|
||||
df.loc[~df.rosette.isna(),'remarques'] = df.loc[~df.rosette.isna(),'remarques'] +\
|
||||
'; rosette : ' + df.loc[~df.rosette.isna(),'rosette']
|
||||
df.loc[~df.rmq_phytosocio.isna(),'remarques'] = df.loc[~df.rmq_phytosocio.isna(),'remarques'] +\
|
||||
'; rmq_phytosocio : ' + df.loc[~df.rmq_phytosocio.isna(),'rmq_phytosocio']
|
||||
df.loc[~df.rmq_contract_agri.isna(),'remarques'] = df.loc[~df.rmq_contract_agri.isna(),'remarques'] +\
|
||||
'; rmq_contract_agri : ' + df.loc[~df.rmq_contract_agri.isna(),'rmq_contract_agri']
|
||||
del df['rmq_phyto']
|
||||
del df['rosette']
|
||||
del df['rmq_phytosocio']
|
||||
del df['rmq_contract_agri']
|
||||
|
||||
|
||||
df.reset_index(drop=False,inplace=True)
|
||||
df.rename(columns={'ident':'id_origine'}, inplace=True)
|
||||
df['table_org'] = file
|
||||
df['structure'] = 'CD Isère'
|
||||
|
||||
# END SCRIPT #
|
||||
|
||||
|
||||
## tri des géométries avant insertion
|
||||
# Identification des superpositions new_site/old_site
|
||||
df_inters = gpd.sjoin(df,v_ps, how='left')
|
||||
del df_inters['index_right']
|
||||
lst_old_site = df_inters.site_code.unique()
|
||||
v_ps = v_ps[v_ps.site_code.isin(lst_old_site)].copy()
|
||||
# Calcul du recouvrement
|
||||
df.reset_index(drop=False,inplace=True)
|
||||
v_ps.loc[:,'surf'] = v_ps.area
|
||||
tmp = gpd.overlay(v_ps,df[['ident','geom']],how='intersection',make_valid=True)
|
||||
tmp['perc_rcvmt'] = 100*tmp.area/tmp['surf']
|
||||
tmp_sitemaj = tmp[(tmp.perc_rcvmt > 10)&(~tmp.ident.duplicated(keep=False))].ident
|
||||
tmp_sitenew = tmp[tmp.perc_rcvmt <= 10].ident.unique()
|
||||
|
||||
|
||||
site_newvsold = {
|
||||
'old' : [*tmp.site_code.unique()],
|
||||
'new' : [*tmp.ident.unique()],
|
||||
}
|
||||
|
||||
df_new = df_inters[df_inters.site_code.isna()]
|
||||
df_inters.drop(df_new.index,inplace=True)
|
||||
df_maj = df_inters[~df_inters.site_code.duplicated(keep=False)]
|
||||
df_inters.drop(df_maj.index,inplace=True)
|
||||
df_rep = df_inters.copy()
|
||||
|
||||
df_new = gpd.pd.concat([df_new,df_rep],axis=0)
|
||||
@@ -0,0 +1,70 @@
|
||||
import geopandas as gpd
|
||||
import os
|
||||
import pycen
|
||||
import numpy as np
|
||||
|
||||
path = '/home/colas/Documents/9_PROJETS/2_PS/TO IMPORT'
|
||||
file = 'PS_AGGREGATION_NB_AG.shp'
|
||||
|
||||
|
||||
def split_auth(col):
|
||||
return col.str.split(r' \(',expand=True).replace('\)','',regex=True)
|
||||
|
||||
def format_auth(col):
|
||||
auth = pycen.pers.get_auteur()
|
||||
for c in col.unique():
|
||||
tmp = c.lower().split(' ')
|
||||
cd1 = (np.array([tmp[0] == n for n in auth.nom.str.lower()]) |
|
||||
np.array([tmp[0] == n for n in auth.prenom.str.lower()]))
|
||||
cd2 = (np.array([tmp[1] == n for n in auth.nom.str.lower()]) |
|
||||
np.array([tmp[1] == n for n in auth.prenom.str.lower()]))
|
||||
r = auth[cd1&cd2].nom_prenom.values[0]
|
||||
col.replace(c,r,inplace=True)
|
||||
return col
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
df = gpd.read_file(os.path.join(path,file))
|
||||
df.columns = df.columns.str.lower()
|
||||
df.dropna(axis=1,how='all', inplace=True)
|
||||
for c in df.columns:
|
||||
if df[c].dtype == object:
|
||||
df[c] = df[c].str.strip()
|
||||
if 'date' in c :
|
||||
df[c] = gpd.pd.to_datetime(df[c])
|
||||
|
||||
n_hab = df.columns[df.columns.str.startswith('n_hab')]
|
||||
df[df[n_hab].sum(axis=1) != 100]
|
||||
|
||||
# Auteurs
|
||||
df[['auteur_split','structure']] = split_auth(df.auteur)
|
||||
df.auteur_split = format_auth(df.auteur_split)
|
||||
del df['auteur']
|
||||
df.rename(columns={'auteur_split':'auteur'},inplace=True)
|
||||
|
||||
# Pratiques
|
||||
df.pratiques.replace([r' \/ '],r', ',regex=True,inplace=True)
|
||||
df.pratiques.replace({
|
||||
'paturage broyage':'pâturage, broyage',
|
||||
'abandon paturage':'abandon, pâturage',
|
||||
'paturage':'pâturage'
|
||||
}, inplace=True)
|
||||
df.type_patur.replace({'N.D':None
|
||||
}, inplace=True)
|
||||
cd3 = (df.pratiques=='pâturage')&(~df.type_patur.isna())
|
||||
df.loc[cd3,'pratiques'] = df.loc[cd3,'pratiques'] +' '+ df.loc[cd3,'type_patur']
|
||||
df.loc[cd3,'type_patur'] = None
|
||||
cd4 = (~df.pratiques.isin(['pâturage','pâturage ?']))&(df.pratiques.str.contains('pâturage'))&(~df.type_patur.isna())
|
||||
df.loc[cd4,'pratiques'] = df.loc[cd4,'pratiques'].str.split(', ',expand=True)[0] + ' ' + df.loc[cd4,'type_patur'] + ', ' + df.loc[cd4,'pratiques'].str.split(', ',expand=True)[1]
|
||||
df.loc[cd4,'type_patur'] = None
|
||||
|
||||
df.pratiques.replace({
|
||||
'pâturage caprin - ovin':'pâturage caprin, pâturage ovin',
|
||||
'jardin':'tonte',
|
||||
'pâturage anin' : 'pâturage asin',
|
||||
'pâturage lama' : 'pâturage asin',
|
||||
'abandon ?' : 'incertain',
|
||||
'pâturage ?' : 'incertain'
|
||||
}, inplace=True)
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-
|
||||
|
||||
|
||||
import pandas as pd
|
||||
import geopandas as gpd
|
||||
import pycen
|
||||
|
||||
|
||||
|
||||
path0 = '/home/colas/Documents/9_PROJETS/2_PS/TO IMPORT/'
|
||||
path = 'cartohabitatsplatiere/'
|
||||
file = 'Habitats I33 2008.gpkg'
|
||||
df = gpd.read_file(path0+path+file)
|
||||
df.rename_geometry('geom', inplace=True)
|
||||
|
||||
if file == 'Habitats I33 2008.gpkg' :
|
||||
df.columns = df.columns.str.lower()
|
||||
df.rename(columns={'date_maj':'date'}, inplace=True)
|
||||
df['remarques'] = \
|
||||
'détails : ' + df['type_détaillé'] + ';' +\
|
||||
' regroupement : ' + df['type_regroupé'] + ';'\
|
||||
' code_n2000 : ' + df['code_n2000'] + ';'\
|
||||
' age : ' + df['age'] + ';'
|
||||
del df['id']
|
||||
del df['code_enjeu']
|
||||
del df['enjeu_numérique']
|
||||
del df['complexe_hab']
|
||||
del df['echelle']
|
||||
del df['entretien']
|
||||
del df['type_détaillé']
|
||||
del df['type_regroupé']
|
||||
del df['surface']
|
||||
del df['num_site']
|
||||
del df['code_n2000']
|
||||
del df['age']
|
||||
# df.set_index('num_site',inplace=True)
|
||||
df['auteur'] = 'PONT Bernard'
|
||||
df['structure'] = "AAIP"
|
||||
|
||||
lst_hab = ['34.1','34.3','34.4','34.7','35.2','62.3','64.1']
|
||||
df = df[df.code_cb.str.contains('|'.join(lst_hab))]
|
||||
|
||||
lst_hab2 = ['41','42','43','44','81','82','83']
|
||||
df = df[~df.code_cb.str.contains('|'.join(lst_hab2))]
|
||||
|
||||
df.replace({'IC':'Communautaire'}, inplace=True)
|
||||
|
||||
|
||||
df.index.name = 'ident'
|
||||
df.reset_index(inplace=True, drop=False)
|
||||
df.rename(columns={'code_cb':'code_hab1'}, inplace=True)
|
||||
df['n_hab1'] = 100
|
||||
|
||||
ps = pycen.ps.get_sitesGeom()
|
||||
# nv = gpd.read_file(path0+'PS_nature_vivante_2014.shp')
|
||||
|
||||
|
||||
# nv.geometry = nv.buffer(50)
|
||||
intersect = gpd.sjoin(df,ps,op='intersects')['ident'].tolist()
|
||||
drop_index = df[df['ident'].isin(intersect)].index
|
||||
df.drop(drop_index,inplace=True)
|
||||
df.reset_index(inplace=True, drop=True)
|
||||
# df.to_file(path0+path+'Habitats I33 2008 (manquants).gpkg', driver='GPKG')
|
||||
# df = gpd.read_file(path0+path+'Habitats I33 2008 (manquants).gpkg')
|
||||
@@ -0,0 +1,9 @@
|
||||
import geopandas as gpd
|
||||
import os
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from pycen import con
|
||||
|
||||
PATH = "/home/colas/Documents/9_PROJETS/1_ZH/MAJ/GERECO - Schéma_strat_ZH_Huez"
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
from pathlib import Path
|
||||
from marshmallow import (
|
||||
Schema,
|
||||
fields,
|
||||
validates_schema,
|
||||
ValidationError,
|
||||
post_load,
|
||||
)
|
||||
|
||||
BACKEND_DIR = Path(__file__).absolute().parent.parent.parent
|
||||
ROOT_DIR = BACKEND_DIR.parent
|
||||
CUSTOM_STATIC_FOLDER = fields.String(load_default=ROOT_DIR / "1_Packages")
|
||||
print(CUSTOM_STATIC_FOLDER)
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
# 2024-11-26
|
||||
# LE script permet d'intégrer de nouvelles géométries
|
||||
# dans la table sites.r_sites_geom. Les AUTEURS ont été
|
||||
# intégrés manuellement.
|
||||
|
||||
import geopandas as gpd
|
||||
from pycen import con, zh as ZH
|
||||
from pycen.tools import dropZ, Polygons_to_MultiPolygon
|
||||
from os import path
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
zh = ZH()
|
||||
r_geom = zh.get_sitesGeom()
|
||||
r_geom = gpd.read_postgis('''
|
||||
SELECT r_sites_geom.* FROM sites.r_sites_geom
|
||||
JOIN sites.sites ON sites.id = r_sites_geom.id_site AND sites.id_type_milieu = 1
|
||||
''',con)
|
||||
r_geom.dropna(how="all",axis=1,inplace=True)
|
||||
r_geom.drop(columns=['id','date_insert','id_origine','id_lot'],inplace=True)
|
||||
|
||||
|
||||
PATH = '/home/colas/Documents/9_PROJETS/1_ZH/MAJ/Actu 2024/CBNA/zh38'
|
||||
file = 'zh_to_integ.gpkg'
|
||||
df = gpd.read_file(path.join(PATH,file))
|
||||
df.rename_geometry('geom', inplace=True)
|
||||
df = dropZ(df)
|
||||
|
||||
# DEL geo A SUPP
|
||||
del_id=df[df.lien_zh=='A SUPP'].index.tolist()
|
||||
df.drop(del_id,inplace=True)
|
||||
|
||||
lstdel_id2 = [
|
||||
'38RH0171','38RH0066','38RH0077','38BO0144','38BO0109',
|
||||
'38BO0105','38RH0012','38BO0139','38BO0200','38RH0292',
|
||||
'38BO0105 + combl vid'
|
||||
]
|
||||
del_id2 = df[df.lien_zh.isin(lstdel_id2)].index.tolist()
|
||||
df.drop(del_id2,inplace=True)
|
||||
|
||||
lstdel_id3 = [
|
||||
'38RH0293', '38RH0297', '38RH0296', '38RH0294', '38BO0331',
|
||||
'38RH0295'
|
||||
]
|
||||
del_id3 = df[df.lien_zh.isin(lstdel_id3)].index.tolist()
|
||||
df.drop(del_id3,inplace=True)
|
||||
|
||||
ins = df[df.lien_zh!='aucun'].copy()
|
||||
ins.lien_zh.unique()
|
||||
|
||||
# # Fait
|
||||
# r_geom[r_geom.id_site=='38RH0171']
|
||||
# r_geom[r_geom.id_site=='38RH0066']
|
||||
# r_geom[r_geom.id_site=='38RH0077']
|
||||
# r_geom[r_geom.id_site=='38BO0144']
|
||||
# r_geom[r_geom.id_site=='38BO0109']
|
||||
# r_geom[r_geom.id_site=='38BO0105']
|
||||
# r_geom[r_geom.id_site=='38RH0012']
|
||||
|
||||
# # Fait, Ne pas reproduire.
|
||||
# BO139 = r_geom[r_geom.id_site=='38BO0139'].copy()
|
||||
# BO200 = r_geom[r_geom.id_site=='38BO0200'].copy()
|
||||
# RH292 = r_geom[r_geom.id_site=='38RH0292'].copy()
|
||||
# BO139.date = '2024-11-26'
|
||||
# BO200.date = '2024-11-26'
|
||||
# RH292.date = '2024-11-26'
|
||||
# BO139.geom = gpd.GeoSeries([
|
||||
# BO139.geom.values[-1],
|
||||
# *ins[ins.lien_zh=='38BO0139'].geom.values
|
||||
# ],crs=2154).unary_union
|
||||
# BO200.geom = gpd.GeoSeries([
|
||||
# BO200.geom.values[-1],
|
||||
# *ins[ins.lien_zh=='38BO0200'].geom.values
|
||||
# ],crs=2154).unary_union
|
||||
# RH292.geom = gpd.GeoSeries([
|
||||
# RH292.geom.values[-1],
|
||||
# *ins[ins.lien_zh=='38RH0292'].geom.values
|
||||
# ],crs=2154).unary_union
|
||||
# Polygons_to_MultiPolygon(BO139).to_postgis('r_sites_geom',con,schema='sites',if_exists='append',index=False)
|
||||
# Polygons_to_MultiPolygon(BO200).to_postgis('r_sites_geom',con,schema='sites',if_exists='append',index=False)
|
||||
# Polygons_to_MultiPolygon(RH292).to_postgis('r_sites_geom',con,schema='sites',if_exists='append',index=False)
|
||||
|
||||
# Traitement zh id3
|
||||
gdf = gpd.GeoDataFrame()
|
||||
for i in ins.lien_zh.unique():
|
||||
if i == 'A prospecter':
|
||||
continue
|
||||
tmp = gpd.GeoDataFrame(
|
||||
{'site_code':[i]},
|
||||
geometry=[ins[ins.lien_zh==i].unary_union],
|
||||
crs=2154
|
||||
).rename_geometry('geom')
|
||||
gdf = gpd.pd.concat([gdf,tmp])
|
||||
|
||||
# Traitement ZH id4, après tri des données avec Mathieu Juton
|
||||
df = gpd.read_file(path.join(PATH,file),layer='zh_to_integ')
|
||||
df.rename_geometry('geom', inplace=True)
|
||||
del_id=df[df.lien_zh=='A SUPP'].index.tolist()
|
||||
df.drop(del_id,inplace=True)
|
||||
id_updtgeo = [
|
||||
'38BI0086', '38BO0128', '38BO0160 + remove trou', '38BO0181',
|
||||
'38BO0182', '38CG0001', '38CG0002', '38CG0019',
|
||||
'38CG0023 + bouche trou', '38CG0025 + remove vide', '38CG0027',
|
||||
'38CG0031', '38CG0147', '38CG0148', '38RH0054', '38RH0076',
|
||||
'38RH0122', '38RH0123 + remove vide', '38RH0132 + remove vide',
|
||||
'38RH0135 + remove route', '38RH0143', '38RH0148',
|
||||
'38RH0148 + remove route'
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,173 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-
|
||||
|
||||
from statistics import geometric_mean
|
||||
import geopandas as gpd
|
||||
from shapely import wkb
|
||||
from pycen import con,con_bdcen,update_to_sql
|
||||
from pycen.tools import Polygons_to_MultiPolygon
|
||||
from sys import exit
|
||||
|
||||
def recreate_history(n_site,o_site):
|
||||
req = '''
|
||||
UPDATE sites.sites SET date_fin = (
|
||||
SELECT max(date_deb) FROM sites.sites WHERE id IN ('{site_new}')
|
||||
) WHERE "id" IN ('{site_old}');
|
||||
INSERT INTO sites.r_site_maj (id_site_new,id_site_old) VALUES ('{site_new}','{site_old}');
|
||||
'''.format(site_new=n_site,site_old=o_site)
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(req)
|
||||
|
||||
|
||||
def modif_geomcover(old_geom, new_geom,how='maj',rcv=0.999):
|
||||
# print(i)
|
||||
sql = """
|
||||
with w1 as (
|
||||
SELECT s1.site_code, s1.geom geom_in, ST_ExteriorRing((ST_Dump(ST_Buffer(s2.geom,0.001))).geom) geom_split, s2.geom geom_over
|
||||
FROM (select * from ps.v_pelouseseches where site_code = '{geom_old}') s1, (select * from ps.v_pelouseseches where site_code = '{geom_new}') s2
|
||||
),
|
||||
w2 as (
|
||||
SELECT site_code, geom_in, ST_Collect(geom_split) geom_split, geom_over from w1 group by 1,2,4
|
||||
),
|
||||
w3 as (
|
||||
SELECT site_code, geom_in,round(st_area(geom_in)) area_in, (ST_Dump(ST_Split(geom_in,geom_split))).geom geom_split, geom_over from w2
|
||||
)
|
||||
SELECT site_code, geom_in,area_in,round(st_area(st_union(geom_split))) area_split, st_multi(st_union(geom_split)) geom_split, geom_over from w3
|
||||
WHERE ST_Within(geom_split,ST_Buffer(geom_over,0.02)) = False
|
||||
group by 1,2,3,6;
|
||||
""".format(geom_old=old_geom,geom_new=new_geom)
|
||||
res_split = gpd.read_postgis(sql,con, geom_col='geom_split')
|
||||
res_split.geom_in = [wkb.loads(x,hex=True) for x in res_split.geom_in]
|
||||
res_split.set_geometry('geom_in',inplace=True, crs=2154)
|
||||
if res_split.empty:
|
||||
print([old_geom,new_geom,'EMPTY'])
|
||||
else:
|
||||
if res_split.area_split[0] < (res_split.area_in[0]*rcv) :
|
||||
spl = res_split.area_split[0]
|
||||
_in = res_split.area_in[0]
|
||||
print([old_geom,new_geom,_in,spl,(_in/spl)])
|
||||
# continue
|
||||
# raise ValueError(j)
|
||||
else:
|
||||
# print('OK')
|
||||
gdf = gpd.read_postgis("SELECT * FROM sites.r_sites_geom WHERE id_site = '%s'"%old_geom, con)
|
||||
# df_aut = gpd.pd.read_sql_query('')
|
||||
gdf.date = gpd.pd.to_datetime(gdf.date)
|
||||
gdf.geom = res_split.geom_split
|
||||
|
||||
if how=='maj':
|
||||
gdf = gdf.loc[gdf.groupby('id_site').date.idxmax(),['id','geom']]
|
||||
update_to_sql(gdf, con, 'r_sites_geom', 'sites', 'id')
|
||||
elif how=='insert':
|
||||
gdf = gdf.loc[gdf.groupby('id_site').date.idxmax()]
|
||||
gdf.drop(columns=['id','date_insert'],inplace=True,errors='ignore')
|
||||
gdf.to_postgis(
|
||||
name='r_sites_geom', con=con, schema='sites', if_exists='append', geom_col='geom'
|
||||
)
|
||||
print('END insert')
|
||||
else:
|
||||
raise ValueError([old_geom, new_geom])
|
||||
|
||||
|
||||
sql = """SELECT
|
||||
v1.site_code site_code_old, v1.geom geom_old, v2.site_code site_code_new, v2.geom geom_new,
|
||||
v1."source" source_old,v2."source" source_new, v1.id_origine orig_old,v2.id_origine orig_new
|
||||
FROM ps.v_pelouseseches v1, ps.v_pelouseseches v2
|
||||
WHERE ST_OVERLAPS(v1.geom,v2.geom) = TRUE
|
||||
AND v1.date_geom < v2.date_geom
|
||||
AND v1.site_code <> v2.site_code;"""
|
||||
df = gpd.read_postgis(sql,con,geom_col='geom_new')
|
||||
df.geom_old = [wkb.loads(x,hex=True) for x in df.geom_old]
|
||||
df.set_geometry('geom_old',inplace=True, crs=2154)
|
||||
|
||||
v_ps = gpd.read_postgis('SELECT * FROM ps.v_pelouseseches', con)
|
||||
|
||||
|
||||
sql = """SELECT
|
||||
v1.site_code site_code_old, v1.geom geom_old, v2.site_code site_code_new, v2.geom geom_new,
|
||||
v1."source" source_old,v2."source" source_new, v1.id_origine orig_old,v2.id_origine orig_new
|
||||
FROM ps.v_pelouseseches v1, ps.v_pelouseseches v2
|
||||
WHERE ST_OVERLAPS(v1.geom,v2.geom) = TRUE
|
||||
AND v1.date_geom = v2.date_geom
|
||||
AND v1.site_code <> v2.site_code;"""
|
||||
dfx = gpd.read_postgis(sql,con,geom_col='geom_new')
|
||||
print(dfx.shape[0])
|
||||
dfx.apply(lambda x: modif_geomcover(old_geom=x.site_code_old,new_geom=x.site_code_new,how='maj',rcv=0.999),axis=1)
|
||||
|
||||
idem = df[(df.geom_old.area.round()/df.geom_new.area.round()).between(0.98,1.02) & (df.source_old=='cr_CHARTREUSE_habitats_CBNA_2000-2012')]
|
||||
idem.apply(lambda x: recreate_history(o_site=x.site_code_old,n_site=x.site_code_new),axis=1)
|
||||
|
||||
df[df.source_old=='cr_VERCORS_habitats_CBNA_1999-2007']\
|
||||
.apply(lambda x: modif_geomcover(old_geom=x.site_code_old,new_geom=x.site_code_new,how='maj',rcv=0.999),axis=1)
|
||||
df[df.source_old=='cr_VERCORS_habitats_CBNA_1999-2007']\
|
||||
.apply(lambda x: modif_geomcover(old_geom=x.site_code_old,new_geom=x.site_code_new,how='insert',rcv=0.9),axis=1)
|
||||
# modif_geomcover('38VERC0654', '38VERC4644',how='insert',rcv=0.9)
|
||||
# recreate_history(o_site='38VERC0760',n_site='38VERC3866')
|
||||
# recreate_history(o_site='38VERC0712',n_site='38VERC3859')
|
||||
# recreate_history(o_site='38VERC0687',n_site='38VERC3756')
|
||||
# recreate_history(o_site='38VERC0779',n_site='38VERC3768')
|
||||
# recreate_history(o_site='38VERC4193',n_site='38VERC4635')
|
||||
# recreate_history(o_site='38VERC4204',n_site='38VERC4637')
|
||||
# recreate_history(o_site='38VERC4242',n_site='38VERC4642')
|
||||
# recreate_history(o_site='38VERC4253',n_site='38VERC4644')
|
||||
# recreate_history(o_site='38VERC4258',n_site='38VERC4645')
|
||||
# recreate_history(o_site='38CHAR0735',n_site='38CHAR0045')
|
||||
# recreate_history(o_site='38CHAR0766',n_site='38GRES0136')
|
||||
# recreate_history(o_site='38CHAR0694',n_site='38VERC0215')
|
||||
# recreate_history(o_site='38TRIE2441',n_site='38TRIE1337')
|
||||
# recreate_history(o_site='38VERC0651',n_site='38VERC3762')
|
||||
# recreate_history(o_site='38VERC0663',n_site='38VERC3846')
|
||||
# recreate_history(o_site='38VERC0671',n_site='38VERC3849')
|
||||
# recreate_history(o_site='38VERC0672',n_site='38VERC3851')
|
||||
# recreate_history(o_site='38VERC4260',n_site='38VERC4646')
|
||||
# recreate_history(o_site='38VERC4268',n_site='38VERC4647')
|
||||
# recreate_history(o_site='38VERC4270',n_site='38VERC4648')
|
||||
# recreate_history(o_site='38CHAR0677',n_site='38CHAR0100')
|
||||
# recreate_history(o_site='38CHAR0699',n_site='38CHAR0072')
|
||||
# recreate_history(o_site='38CREM0404',n_site='38CREM0104')
|
||||
# recreate_history(o_site='38CREM0405',n_site='38CREM0105')
|
||||
# recreate_history(o_site='38CREM0412',n_site='38CREM0178')
|
||||
# recreate_history(o_site='38CREM0417',n_site='38CREM0114')
|
||||
# recreate_history(o_site='38CREM0420',n_site='38CREM0064')
|
||||
# recreate_history(o_site='38VERC0735',n_site='38VERC3862')
|
||||
# recreate_history(o_site='38VERC0744',n_site='38VERC3764')
|
||||
# recreate_history(o_site='38VERC0753',n_site='38VERC3865')
|
||||
# recreate_history(o_site='38VERC1194',n_site='38VERC3735')
|
||||
# recreate_history(o_site='38VERC1198',n_site='38VERC3736')
|
||||
# recreate_history(o_site='38VERC1207',n_site='38VERC3738')
|
||||
# recreate_history(o_site='38TRIE1015',n_site='38VERC3714')
|
||||
# recreate_history(o_site='38TRIE2467',n_site='38TRIE2630')
|
||||
# recreate_history(o_site='38PCHA0994',n_site='38GRES0844')
|
||||
# recreate_history(o_site='38PCHA0994',n_site='38GRES0844')
|
||||
# recreate_history(o_site='38VERC1236',n_site='38VERC4705')
|
||||
# recreate_history(o_site='38VERC1233',n_site='38VERC4706')
|
||||
# recreate_history(o_site='38VERC1242',n_site='38VERC1237')
|
||||
# recreate_history(o_site='38VERC1243',n_site='38VERC4726')
|
||||
# recreate_history(o_site='38VERC1260',n_site='38VERC4724')
|
||||
# recreate_history(o_site='38VERC4027',n_site='38VERC4743')
|
||||
# recreate_history(o_site='38VERC4085',n_site='38VERC4084')
|
||||
|
||||
# for i,j in df.iterrows():
|
||||
# update_to_sql(gdf, con, 'r_sites_geom', 'sites', 'id')
|
||||
|
||||
|
||||
|
||||
df.apply(lambda x: modif_geomcover(old_geom=x.site_code_old,new_geom=x.site_code_new),axis=1)
|
||||
# df.iloc[57:].apply(lambda x: modif_geomcover(old_geom=x.site_code_old,new_geom=x.site_code_new),axis=1)
|
||||
|
||||
df2 = df[df.source_old=='PS_Beaumont_2018_Drac_Nature.shp']
|
||||
df2 = df[df.source_old=='cr_VERCORS_habitats_CBNA_1999-2007']
|
||||
df2.apply(lambda x: modif_geomcover(old_geom=x.site_code_old,new_geom=x.site_code_new),axis=1)
|
||||
# 38TRIE0678 38TRIE0721
|
||||
|
||||
|
||||
vrc = df[df.source_old=='cr_VERCORS_habitats_CBNA_1999-2007'].copy()
|
||||
s_vrc = gpd.read_postgis('SELECT * FROM pelouse_seche."ps_TRIEVES+VERCORS_habitats_CBNA_2014";',con=con_bdcen)
|
||||
p_vrc = gpd.read_postgis('SELECT v.*,ST_PointOnSurface(v.geom) geom_point FROM pelouse_seche."ps_TRIEVES+VERCORS_habitats_CBNA_2014" v;',con=con_bdcen, geom_col='geom_point')
|
||||
pvrc = gpd.read_postgis("SELECT v.*,ST_PointOnSurface(v.geom) geom_point FROM ps.v_pelouseseches v WHERE v.site_code IN ('%s');"%("','".join(vrc.site_code_old)),con=con, geom_col='geom_point')
|
||||
t1 = s_vrc.geom.intersects(pvrc.geom_point.unary_union)
|
||||
t2 = p_vrc.geom_point.intersects(vrc.geom_old.unary_union)
|
||||
INS = s_vrc[t1|t2].copy()
|
||||
INS.to_postgis(
|
||||
'ps_covered',con,geom_col='geom',if_exists='replace'
|
||||
)
|
||||
@@ -0,0 +1,75 @@
|
||||
from pycen import (
|
||||
v_pelouseseches as ps,
|
||||
con, con_bdcen,
|
||||
update_to_sql
|
||||
)
|
||||
import geopandas as gpd
|
||||
|
||||
|
||||
def update_psInf1200(df):
|
||||
from rasterstats import zonal_stats
|
||||
path0 = '/home/cgeier/Documents/9_PROJETS/2_PS/'
|
||||
path2_mnt = path0+'MNT/'
|
||||
file_mnt5 = 'MNT_5m.tif'
|
||||
|
||||
zonal_tmp = zonal_stats(df,path2_mnt+file_mnt5,stats="max",nodata=0,all_touched=True)
|
||||
zonal = gpd.pd.DataFrame(zonal_tmp)
|
||||
zonal.columns = ['max_alti']
|
||||
tmp = gpd.pd.concat([df.reset_index(drop=True),zonal], axis=1)
|
||||
tmp = tmp.set_geometry('geom', crs=2154)
|
||||
tmp['infeq_1200'] = tmp.max_alti <= 1200
|
||||
|
||||
PS = (tmp[['site_code','infeq_1200']]
|
||||
.rename(columns={'site_code':'id_site'},errors='ignore')
|
||||
)
|
||||
|
||||
PS.to_sql('r_infeq_1200m',con,'ps',if_exists='append',index=False)
|
||||
# update_to_sql(PS,con,'r_infeq_1200m','ps','id_site')
|
||||
|
||||
|
||||
ps_all = gpd.read_postgis('''
|
||||
SELECT vp.*,s7.infeq_1200
|
||||
FROM ps."v_pelouseseches_all" vp
|
||||
LEFT JOIN ps.r_infeq_1200m s7 ON vp.site_code::text = s7.id_site::text
|
||||
ORDER BY vp.site_code DESC NULLS LAST;
|
||||
''', con)
|
||||
isnot_1200 = ps_all.infeq_1200.isna()
|
||||
ps_all[~ps_all.infeq_1200]
|
||||
|
||||
update_psInf1200(ps_all[isnot_1200])
|
||||
|
||||
|
||||
|
||||
metro = gpd.read_file("/home/colas/Documents/tmp/PS_ACTU_METRO/Perimètre_GAM.geojson")
|
||||
metro.rename_geometry('geom', inplace=True)
|
||||
ps_agg = gpd.read_postgis('SELECT * FROM "pelouse_seche"."c_ps_inventaire_agreg"',con_bdcen)
|
||||
ps_vps = gpd.read_postgis('SELECT * FROM ps."v_pelouseseches"',con)
|
||||
ps_noalti = gpd.read_postgis('SELECT * FROM ps."v_pelouseseches_noalti"',con)
|
||||
|
||||
psdate_cols = ps_all.columns[ps_all.columns.str.startswith('date')]
|
||||
|
||||
ps_metro = ps_vps[ps_vps.intersects(metro.unary_union)].copy()
|
||||
ag_metro = ps_agg[ps_agg.intersects(metro.unary_union)].copy()
|
||||
|
||||
is_cbna = ps_metro.source.str.contains('CBNA',na=False)
|
||||
is_agg = ps_metro.id_origine.isin(ag_metro.id.tolist())
|
||||
|
||||
not_intersect = ~ps_metro.centroid.intersects(ag_metro.buffer(0).unary_union)
|
||||
|
||||
ps_metro_cbna = ps_metro[is_cbna].copy()
|
||||
|
||||
|
||||
termo = ps_metro[not_intersect & is_cbna].copy()
|
||||
|
||||
ps_metro[psdate_cols] = ps_metro[psdate_cols].astype(str)
|
||||
termo[psdate_cols] = termo[psdate_cols].astype(str)
|
||||
termo.to_file('/home/colas/Documents/tmp/PS_ACTU_METRO/ps_actu_metro.gpkg',layer='ps_termo',driver='GPKG')
|
||||
ps_metro.to_file('/home/colas/Documents/tmp/PS_ACTU_METRO/ps_actu_metro.gpkg',layer='ps_metro',driver='GPKG')
|
||||
ag_metro.to_file('/home/colas/Documents/tmp/PS_ACTU_METRO/ps_actu_metro.gpkg',layer='ag_metro',driver='GPKG')
|
||||
|
||||
|
||||
ps_termo = gpd.read_file('/home/colas/Documents/tmp/PS_ACTU_METRO/ps_actu_metro.gpkg',layer='ps_termo')
|
||||
updt_termo = ps_termo[['site_code']].copy()
|
||||
updt_termo.columns = ['id']
|
||||
updt_termo['id_type_milieu'] = 99
|
||||
update_to_sql(updt_termo,con,'sites','sites','id')
|
||||
@@ -0,0 +1,61 @@
|
||||
from pycen import con
|
||||
|
||||
sql1 = """
|
||||
DROP VIEW IF EXISTS zones_humides.v_zh_ponctuelles;
|
||||
CREATE VIEW zones_humides.v_zh_ponctuelles AS
|
||||
SELECT
|
||||
id,
|
||||
territoire,
|
||||
commune,
|
||||
lieu_dit,
|
||||
observer,
|
||||
datemodif,
|
||||
x,
|
||||
y,
|
||||
code_insee,
|
||||
descripti2,
|
||||
geom,
|
||||
qui,
|
||||
statut,
|
||||
source,
|
||||
comment,
|
||||
type,
|
||||
ponctuelle,
|
||||
classe
|
||||
FROM zones_humides.zh_ponctuelles
|
||||
WHERE in_zh is False
|
||||
"""
|
||||
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(sql1)
|
||||
|
||||
|
||||
|
||||
sql1 = """
|
||||
DROP VIEW IF EXISTS zones_humides.v_zh_ponctuelles;
|
||||
CREATE VIEW zones_humides.v_zh_ponctuelles AS
|
||||
SELECT
|
||||
id,
|
||||
territoire,
|
||||
commune,
|
||||
lieu_dit,
|
||||
observer,
|
||||
datemodif,
|
||||
x,
|
||||
y,
|
||||
code_insee,
|
||||
descripti2,
|
||||
geom,
|
||||
qui,
|
||||
statut,
|
||||
source,
|
||||
comment,
|
||||
type,
|
||||
ponctuelle,
|
||||
classe
|
||||
FROM zones_humides.zh_ponctuelles
|
||||
WHERE in_zh is True
|
||||
"""
|
||||
|
||||
with con.begin() as cnx:
|
||||
cnx.execute(sql1)
|
||||
Reference in New Issue
Block a user