init depot renew

This commit is contained in:
2026-09-22 11:58:57 +02:00
commit e9fa6a7309
205 changed files with 39721 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
import pandas as pd
import geopandas as gpd
from pycen import con_gn
from os import path
dict_sicen = {
'nom latin/complet':'nom_complet',
'date obs.':'date_debut',
'règne':'regne',
'observateurs':'observateu',
'nom usuel/simplifié':'nom_vernac',
}
dict_biodiv = {
'Salix alba L., 1753 [nom. et typ. cons.]':'Salix alba L., 1753',
'Euphorbia verrucosa L., 1753':'Euphorbia flavicoma subsp. verrucosa (Fiori) Pignatti, 1973',
'Ononis spinosa L., 1753 [nom. et typ. cons.]':'Ononis spinosa L., 1753',
'Schedonorus arundinaceus (Schreb.) Dumort., 1824 [nom. cons.]':'Schedonorus arundinaceus (Schreb.) Dumort., 1824',
}
dict_gn = {
'group1_inp':'group1_inpn',
'group2_inp':'group2_inpn'
}
PATH = "/media/cgeier/SRV/FICHIERS/SITES/SITES GERES/AVAL_AVALON/Scientifique et technique/Données historiques/Marais d'Avalon"
biodiv1 = gpd.read_file(path.join(PATH,'Biodi_Aura_Mare Ratier','POINT_2023_12_13_08h35m51.shp'))
# biodiv2 = gpd.read_file(path.join(PATH,'Biodiv_Aura_Marais','POINT_2023_12_13_08h41m24.shp'))
biodiv3 = gpd.read_file(path.join(PATH,'Biodiv_Aura_Muraillat','POINT_2023_12_13_08h39m22.shp'))
biodiv = pd.concat([biodiv1,biodiv3])
# biodiv.nom_valide.replace(dict_biodiv,inplace=True)
gn = gpd.read_file(path.join(PATH,'Geonature_ENS Avalon','POINT_2023_12_13_08h41m24.shp'),encoding='Windows-1252')
gn.rename(columns=dict_gn,inplace=True)
sicen = pd.read_excel(path.join(PATH,'SICEN','vtOv_WyE.xlsx'),'undefined')
sicen.columns = sicen.columns.str.lower()
sicen.rename(columns=dict_sicen,inplace=True)
sql = """
SELECT cd_nom,cd_ref, group1_inpn,group2_inpn FROM taxonomie.taxref
WHERE cd_nom IN {}
"""
tax = pd.read_sql(sql.format(tuple(sicen.cd_nom.unique())),con_gn)
sicen = sicen.merge(tax,on='cd_nom',how='left',copy=True)
sql = """
SELECT cd_nom,cd_ref,regne, group1_inpn,group2_inpn FROM taxonomie.taxref
WHERE cd_nom IN {}
"""
tax = pd.read_sql(sql.format(tuple(biodiv.cd_ref.unique())),con_gn)
biodiv = biodiv.merge(tax,right_on='cd_nom',left_on='cd_ref',how='left',copy=False,suffixes=('_x', ''))
keep_cols = ['date_debut','cd_nom','cd_ref','nom_valide','nom_vernac','regne','group1_inpn','group2_inpn','classe','ordre','famille','observateu']
df = pd.concat([
gn[keep_cols],
sicen[keep_cols],
biodiv[keep_cols],
])
df.date_debut = pd.to_datetime(df.date_debut)
before = df[df.date_debut<'2016-01-01']
after = df[df.date_debut>='2016-01-01']
before.date_debut = before.date_debut.astype(str)
after.date_debut = after.date_debut.astype(str)
before.to_excel(path.join(PATH,'avant 2016.xlsx'),encoding='Windows-1252')
after.to_excel(path.join(PATH,'2016 et +.xlsx'),encoding='Windows-1252')
+256
View File
@@ -0,0 +1,256 @@
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import os
from pathlib import Path
import pandas as pd
import geopandas as gpd
path_fichsite = '/media/cgeier/SRV/FICHIERS/OPERATIONS (EX ETUDES)/ETUDES EN COURS/CORRIDORS/CVB_Bourbre/#42_Mesures compensatoires/BM/Evaluation des sites'
path_geom = '/media/cgeier/SRV/FICHIERS/OUTILS/CARTOGRAPHIE/ESPACE DE TRAVAIL/ETUDES/CVB_Bourbre/Cartographie CVB Bourbre 2021/Mesures compensatoires/0_FINAL'
c_geom = 'mc_isere_CVBbourbre.gpkg'
c_geom_det = 'mc_isere_CVBbourbre_détaillé.gpkg'
pathout = '/home/colas/Documents/tmp/CVB_Bourbre'
dic = {
'Code cadastral' : 'N° cadast',
"Date d'évaluation": 'date',
"Date d'Evaluation": 'date',
'RESULTAT' : 'Note',
'APPARTENANCE A UN CORRIDOR SRCE' : 'corridor',
'PATRIMOINE NATUREL' : 'patrim_nat',
'CONNECTIVITE' : 'connectiv',
'POTENTIEL DE RESTAURATION' : 'potentiel_restau',
'Foncier ?' : 'foncier',
}
gdf = gpd.read_file(Path(path_geom) / c_geom)
gdf.loc[(gdf['N° cadast']=='0A0816'),'Note'] = 35.59
gdf.loc[gdf['N° cadast']=='AB0063','Note'] = 48.18
gdf.loc[gdf['N° cadast']=='AO0775','N° cadast'] = '0A0775'
gdf.loc[gdf['N° cadast']=='A0321','N° cadast'] = '0A0321'
gdf.loc[gdf['N° cadast']=='D0430','N° cadast'] = '0D0430'
gdf.loc[gdf['N° cadast']=='D0719','N° cadast'] = '0D0719'
gdf.loc[gdf['N° cadast']=='AB0006','N° cadast'] = 'AB0009'
gdf.loc[gdf['N° cadast']=='AM0154','N° cadast'] = 'CM0154'
gdf.loc[gdf['N° cadast']=='AM1032','N° cadast'] = 'AM0132'
gdf.loc[gdf['N° cadast']=='AK0098','N° cadast'] = 'AI0098'
gdf.loc[gdf['N° cadast']=='AI00109','N° cadast'] = 'AI0109'
gdf.loc[gdf['N° cadast']=='00645','N° cadast'] = '0F0645'
gdf.loc[gdf['N° cadast']=='DS0252','N° cadast'] = '0C0252'
gdf.loc[gdf['Commune']=='Trep','Commune'] = 'Trept'
gdf.loc[gdf['Commune']=='Villefoantaine','Commune'] = 'Villefontaine'
gdf.loc[gdf['Commune']=='Villefonatine','Commune'] = 'Villefontaine'
gdf.loc[gdf['Commune']=='La Verpillère','Commune'] = 'La Verpillière'
gdf.loc[gdf['Commune']=='La Veprillière','Commune'] = 'La Verpillière'
gdf.loc[gdf['Commune']=='Vaulx_Milieu','Commune'] = 'Vaulx-Milieu'
gdf.loc[gdf['Commune']=='Valx-Milieu','Commune'] = 'Vaulx-Milieu'
gdf.loc[gdf['Commune']=='Saint-Qentin-Fallavier','Commune'] = 'Saint-Quentin-Fallavier'
def recup_details_note_parcelle(path):
DF = pd.DataFrame()
for roots, dirs, files in os.walk(path):
print(dirs)
for f in files:
if not f.endswith('.xlsx'):
continue
if f in ['fichier de saisie.xlsx', 'MC-Evaluation des sites.xlsx']:
continue
if f.startswith('.~'):
continue
if f.__contains__('origine'):
continue
print(f)
xl = pd.ExcelFile(Path(roots)/f)
xl.sheet_names
for sht in xl.sheet_names:
if sht.__contains__('AM0132'):
continue
df = pd.read_excel(Path(roots)/f, usecols="C:D",nrows=50, sheet_name=sht)
df.drop_duplicates(inplace=True)
if df.empty:
continue
index = df.columns[0]
df.set_index(index, inplace=True)
lst_index = [*dic.keys() ]
df = df[df.index.isin(lst_index)]
if df.empty:
continue
df = df.T
df.reset_index(inplace=True, drop=True)
df.rename(columns=dic, inplace=True)
df.columns.name = None
df['sites'] = f
df['feuillet'] = sht
if df.columns.duplicated(keep=False).any():
merge_col = df.columns[df.columns.duplicated(keep=False)]
if not DF.empty and not df['N° cadast'].isin(DF['N° cadast']).all() :
DF = pd.concat([DF,df],ignore_index=True)
else:
DF = pd.concat([DF,df],ignore_index=True)
return DF
def normalize_colcadast(col):
col = col.replace([', ',' \+ ',' \(','\)'],['/','/','',''],regex=True)
col = col.replace(['\+'],['/'],regex=True)
return col
def split_cadast(df,col):
tmp = df[col].str.split('/',expand=True).stack().reset_index(-1,drop=True)
tmp.name = 'split'
df = pd.merge(df,tmp,right_index=True,left_index=True)
df.drop_duplicates(inplace=True)
df.drop_duplicates(subset=['Note','split'],inplace=True)
del df[col]
df.rename(columns={'split':col},inplace=True)
df.reset_index(inplace=True,drop=True)
return df
df21 = recup_details_note_parcelle(Path(path_fichsite)/'2021')
df20 = recup_details_note_parcelle(Path(path_fichsite)/'2020')
df19 = recup_details_note_parcelle(Path(path_fichsite)/'2019')
df21['N° cadast'] = normalize_colcadast(df21['N° cadast'])
df20['N° cadast'] = normalize_colcadast(df20['N° cadast'])
df19['N° cadast'] = normalize_colcadast(df19['N° cadast'])
df21 = split_cadast(df21,'N° cadast')
df20 = split_cadast(df20,'N° cadast')
df19 = split_cadast(df19,'N° cadast')
# Notes réalisé en 2021 mais publié avec son année d'origine
N19 = ['AB0008']
N20 = ['0C0366']
DF21 = df21[~df21['N° cadast'].isin([*N19,*N20])]
# Notes non présentes en 2021
tmp20 = df20[
(~df20['N° cadast'].isin(df21['N° cadast']))
&(df20['N° cadast'].isin(gdf['N° cadast']))
]
tmp19 = df19[
(~df19['N° cadast'].isin(df21['N° cadast']))
&(~df19['N° cadast'].isin(df20['N° cadast']))
&(df19['N° cadast'].isin(gdf['N° cadast']))
]
df = pd.concat([df21,df20,df19])
df.reset_index(inplace=True,drop=True)
df.loc[df['N° cadast']=='0C1003','N° cadast'] = '0C1003.4.5.6'
lsttmp = df[df['N° cadast'].isin(['0C1004','0C1005','0C1006'])].index
df.drop(lsttmp,inplace=True)
df.reset_index(inplace=True,drop=True)
cols_note = ['Note','corridor','patim_nat','connectiv','potentiel_restau','foncier']
df[cols_note] = df[cols_note].astype(float).round(2)
df[cols_note] = df[cols_note].fillna(0)
# df.drop(columns=['sites','feuillet'], inplace=True)
df['N_withFon'] = round(df['corridor'] + df['patim_nat'] + df['connectiv'] + df['potentiel_restau'] + df['foncier'], 2)
df['N_withoutFon'] = round(df['corridor'] + df['patim_nat'] + df['connectiv'] + df['potentiel_restau'], 2)
c_df = df.copy()
GDF = pd.merge(gdf,c_df,on=['N° cadast','Note'],how='left')
df['T_withFon'] = df['N_withFon'].eq(df['Note'])
df['T_withoutFon'] = df['N_withoutFon'].eq(df['Note'])
GDF['T_withFon'] = GDF['N_withFon'].eq(GDF['Note'])
GDF['T_withoutFon'] = GDF['N_withoutFon'].eq(GDF['Note'])
TT = GDF[~(GDF['T_withFon'] | GDF['T_withoutFon'])]
tt = df[~(df['T_withFon'] | df['T_withoutFon'])]
TT[(TT.sites.isna())&(TT.annee==2021)]
TT[(TT.sites.isna())&(TT.annee==2020)]
TT[(TT.sites.isna())&(TT.annee==2019)]
TT[(~TT.sites.isna())]
#####################
#####################
#####################
gdf.loc[gdf['N° cadast']=='AO0775','N° cadast'] = '0A0775'
gdf.loc[gdf['N° cadast']=='A0321','N° cadast'] = '0A0321'
gdf.loc[gdf['N° cadast']=='D0430','N° cadast'] = '0D0430'
gdf.loc[gdf['N° cadast']=='D0719','N° cadast'] = '0D0719'
gdf.loc[gdf['N° cadast']=='AB0006','N° cadast'] = 'AB0009'
gdf.loc[gdf['N° cadast']=='AM0154','N° cadast'] = 'CM0154'
gdf.loc[gdf['N° cadast']=='AM1032','N° cadast'] = 'AM0132'
gdf.loc[gdf['N° cadast']=='AK0098','N° cadast'] = 'AI0098'
gdf.loc[gdf['N° cadast']=='AI00109','N° cadast'] = 'AI0109'
gdf.loc[gdf['N° cadast']=='00645','N° cadast'] = '0F0645'
gdf.loc[gdf['N° cadast']=='DS0252','N° cadast'] = '0C0252'
gdf.loc[gdf['Commune']=='Trep','Commune'] = 'Trept'
gdf.loc[gdf['Commune']=='Villefoantaine','Commune'] = 'Villefontaine'
gdf.to_file(pathout+'/'+ c_geom, driver='GPKG')
#####################
#####################
#####################
path = '/media/cgeier/SRV/FICHIERS/OUTILS/CARTOGRAPHIE/ESPACE DE TRAVAIL/ETUDES/CVB_Bourbre/Cartographie CVB Bourbre 2021/Mesures compensatoires'
l1 = 'LOT 1.shp'
l2 = 'LOT 2.shp'
l3 = 'LOT 3.shp'
l4 = 'LOT 4 VALIDE PARTENAIRE.shp'
gdf1 = gpd.read_file(Path(path)/l1)
gdf2 = gpd.read_file(Path(path)/l2)
gdf3 = gpd.read_file(Path(path)/l3)
gdf4 = gpd.read_file(Path(path)/'SIG lot 4 SAFER'/l4)
print(gdf1[gdf1.Parcelle.str.contains('AI0098|AK0068|DS0252')])
print(gdf2[gdf2.Parcelle.str.contains('AI0098|AK0068|DS0252')])
print(gdf3[gdf3.Parcelle.str.contains('AI0098|AK0068|DS0252')])
print(gdf4[gdf4.Parcelle.str.contains('AI0098|AK0068|DS0252',na=False)])
#####################
#####################
#####################
#####################
dic = {
'corridor' : 'N_corridor',
'patim_nat' : 'N_patrim_nat',
'connectiv' : 'N_connectiv',
'potentiel_restau' : 'N_pot_rest',
'foncier' : 'N_foncier',
'T_withFon' : 'N_withFon',
}
GDF.rename(columns=dic,inplace=True)
tmp = DF['N° cadast'].str.split('/',expand=True).stack().reset_index(-1,drop=True)
tmp.name = 'split'
df2019 = pd.merge(DF,tmp,right_index=True,left_index=True)
df2020 = pd.merge(DF,tmp,right_index=True,left_index=True)
df2020.drop_duplicates(inplace=True)
df2020.drop_duplicates(subset=['Note','split'],inplace=True)
tmp = df2020[(~df2020.split.isin(df21.split))&(df2020.split.isin(gdf['N° cadast']))]
tmp = df2019[(~df2019.split.isin(df2021.split))&(~df2019.split.isin(df2020.split))&(df2019.split.isin(gdf['N° cadast']))]
df2021 = pd.merge(DF,tmp,right_index=True,left_index=True)
df2021.drop_duplicates(inplace=True)
df2021.drop_duplicates(subset=['Note','split'],inplace=True)
DF_FINAL = pd.concat([df2021,tmp])
DF_FINAL = pd.concat([DF_FINAL,tmp])
df2021[~df2021['split'].isin(gdf['N° cadast'])].shape
df2021[df2021['split'].isin(gdf['N° cadast'])].shape
+98
View File
@@ -0,0 +1,98 @@
import geopandas as gpd
import json
from shapely.geometry import shape
from pycen import con_gn
PATH = '/home/colas/Documents/tmp/AVAL/'
gnaura = gpd.pd.read_csv(PATH+'BIODIVAURA_synthese_observations_2025-06-16T10_23_13.147Z.csv',sep=';')
gncen38 = gpd.pd.read_csv(PATH+'GN_synthese_observations_2025-06-16T10_23_43.122Z.csv',sep=';',dtype={'niveau_precision_diffusion':str})
gnaura = gpd.GeoDataFrame(gnaura, geometry=gpd.points_from_xy(gnaura.x_centroid_4326,gnaura.y_centroid_4326),crs=4326)
gncen38 = gpd.GeoDataFrame(gncen38, geometry=gpd.points_from_xy(gncen38.x_centroid_4326,gncen38.y_centroid_4326),crs=4326)
gnaura.dropna(how='all',inplace=True,axis=1)
gncen38.dropna(how='all',inplace=True,axis=1)
# Suppression des données CEN38 dans gnaura
lstdrop = gnaura[gnaura.uuid_perm_sinp.isin(gncen38.uuid_perm_sinp)].index
gnaura.drop(lstdrop,inplace=True)
# Completion phylogenie BIODIVAURA
sql = """
SELECT
t.cd_ref,
t.regne,
-- t.phylum,
-- t.classe,
-- t.ordre,
-- t.famille,
t.group1_inpn,
t.group2_inpn,
--t.nom_vern,
--t.nom_complet,
--t.nom_valide,
--t.lb_nom,
--s.*
--s.rq_statut,
--s.code_statut,
--s.cd_type_statut,
--s.label_statut,
--s.full_citation,
--s.doc_url
t.group3_inpn
FROM taxonomie.taxref t
--JOIN taxonomie.v_bdc_status s USING (cd_nom)
WHERE t.cd_ref IN {cd_nom}
;""".format(cd_nom = tuple(gnaura.cd_ref.unique()))
phylo = gpd.pd.read_sql_query(sql,con_gn)
gnaura = gnaura.merge(phylo,how='left',left_on='cd_ref',right_on='cd_ref',copy=False)
# Suppression des données polygones dans gnaura
# gnaura = gnaura[~gnaura.geojson_4326.str.contains('polygon',case=False,na=False)]
# Compilation des données
compil = gpd.pd.concat([gncen38,gnaura])
aura_imprecise = compil[compil.geojson_4326.str.contains('polygon',case=False,na=False)].copy()
compilF = compil[~compil.geojson_4326.str.contains('polygon',case=False,na=False)].copy()
compilF.to_csv(PATH+'compile_38&AURA_synthese_observations_2025-06-16.csv',sep=';',index=False)
compilF.to_crs(2154).to_file(PATH+'compile_38&AURA_synthese_observations.geojson')
# Ecriture des données imprécises
geom = [shape(json.loads(i)) for i in aura_imprecise.geojson_4326]
gdf_imprecis = gpd.GeoDataFrame(aura_imprecise,geometry=geom,crs=4326)
aura_imprecise.to_csv(PATH+'AURA_synthese_observations_imprecise_2025-06-16.csv',sep=';',index=False)
gdf_imprecis.to_crs(2154).to_file(PATH+'AURA_synthese_observations_imprecise.geojson')
# Génération du fichier liste_sp
liste_sp = compilF[['cd_ref','date_debut','date_fin','nom_valide','nom_vernaculaire','regne','group1_inpn','group2_inpn','group3_inpn','classe','ordre','famille','nombre_min','nombre_max','observateurs','fournisseur','communes','x_centroid_4326','y_centroid_4326']].copy()
liste_sp.sort_values(by=['cd_ref','date_debut'],inplace=True)
liste_sp.drop_duplicates(subset='cd_ref',keep='last',inplace=True)
liste_sp.to_excel(PATH+'liste_sp_AVAL.xlsx',index=False,sheet_name='liste_sp')
# intersection des sites
gdf = gpd.read_file(PATH+'AVAL_ZO_Zone tampon_600m.gpkg')[['nom_ens','geometry']]
dfF = (compilF.to_crs(2154).sjoin(gdf, how='left')
.drop(columns=['geometry','index_right',"Unnamed: 0"],errors='ignore')
)
dfF = dfF[[
'nom_ens','id_synthese', 'date_debut', 'date_fin', 'heure_debut',
'heure_fin', 'cd_nom', 'cd_ref', 'nom_valide', 'nom_vernaculaire',
'nom_cite', 'regne', 'group1_inpn', 'group2_inpn', 'group3_inpn',
'classe', 'ordre', 'famille', 'rang_taxo', 'nombre_min', 'nombre_max',
'alti_min', 'alti_max', 'observateurs', 'determinateur', 'communes',
'geometrie_wkt_4326', 'x_centroid_4326', 'y_centroid_4326', 'nom_lieu',
'comment_releve', 'comment_occurrence', #'validateur',
'niveau_validation', 'jdd_nom', 'jdd_uuid', 'jdd_id', 'ca_nom',
'ca_uuid', 'ca_id', 'precision_geographique', 'nature_objet_geo',
'type_regroupement', 'technique_observation', 'biologique_statut',
'etat_biologique', 'biogeographique_statut', 'naturalite',
'preuve_existante', 'stade_vie', 'sexe', #'niveau_precision_diffusion',
'objet_denombrement', 'type_denombrement', 'niveau_sensibilite',
'statut_observation', 'floutage_dee', 'statut_source', 'type_info_geo',
'methode_determination', 'comportement', 'id_origine', 'uuid_perm_sinp',
'uuid_perm_grp_sinp', 'date_creation', 'date_modification',
'champs_additionnels', 'fournisseur', 'geojson_4326',
'statut_biologique', 'type_source', 'type_precision',
'sensibilite', 'confidentialite'
]]
dfF.rename(columns={'nom':'nom_site'},inplace=True)
dfF.to_csv(PATH+'compile_38&AURA_synthese_observations_2025-06-16.csv', sep=";")
+98
View File
@@ -0,0 +1,98 @@
import geopandas as gpd
import json
from shapely.geometry import shape
from pycen import con_gn
PATH = '/home/colas/Documents/tmp/CHARVAS/'
gnaura = gpd.pd.read_csv(PATH+'GN_AURA_synthese_observations_2025-01-17T09_01_44.977Z.csv',sep=';')
gncen38 = gpd.pd.read_csv(PATH+'GN_CEN38_synthese_observations_2025-01-17T09_02_45.818Z.csv',sep=';',dtype={'niveau_precision_diffusion':str})
gnaura = gpd.GeoDataFrame(gnaura, geometry=gpd.points_from_xy(gnaura.x_centroid_4326,gnaura.y_centroid_4326),crs=4326)
gncen38 = gpd.GeoDataFrame(gncen38, geometry=gpd.points_from_xy(gncen38.x_centroid_4326,gncen38.y_centroid_4326),crs=4326)
gnaura.dropna(how='all',inplace=True,axis=1)
gncen38.dropna(how='all',inplace=True,axis=1)
# Suppression des données CEN38 dans gnaura
lstdrop = gnaura[gnaura.uuid_perm_sinp.isin(gncen38.uuid_perm_sinp)].index
gnaura.drop(lstdrop,inplace=True)
# Completion phylogenie BIODIVAURA
sql = """
SELECT
t.cd_ref,
t.regne,
-- t.phylum,
-- t.classe,
-- t.ordre,
-- t.famille,
t.group1_inpn,
t.group2_inpn,
--t.nom_vern,
--t.nom_complet,
--t.nom_valide,
--t.lb_nom,
--s.*
--s.rq_statut,
--s.code_statut,
--s.cd_type_statut,
--s.label_statut,
--s.full_citation,
--s.doc_url
t.group3_inpn
FROM taxonomie.taxref t
--JOIN taxonomie.v_bdc_status s USING (cd_nom)
WHERE t.cd_ref IN {cd_nom}
;""".format(cd_nom = tuple(gnaura.cd_ref.unique()))
phylo = gpd.pd.read_sql_query(sql,con_gn)
gnaura = gnaura.merge(phylo,how='left',left_on='cd_ref',right_on='cd_ref',copy=False)
# Suppression des données polygones dans gnaura
# gnaura = gnaura[~gnaura.geojson_4326.str.contains('polygon',case=False,na=False)]
# Compilation des données
compil = gpd.pd.concat([gncen38,gnaura])
aura_imprecise = compil[compil.geojson_4326.str.contains('polygon',case=False,na=False)].copy()
compilF = compil[~compil.geojson_4326.str.contains('polygon',case=False,na=False)].copy()
compilF.to_csv(PATH+'compile_38&AURA_synthese_observations_2025-01-17.csv',sep=';',index=False)
compilF.to_crs(2154).to_file(PATH+'compile_38&AURA_synthese_observations.geojson')
# Ecriture des données imprécises
geom = [shape(json.loads(i)) for i in aura_imprecise.geojson_4326]
gdf_imprecis = gpd.GeoDataFrame(aura_imprecise,geometry=geom,crs=4326)
aura_imprecise.to_csv(PATH+'AURA_synthese_observations_imprecise_2025-01-17.csv',sep=';',index=False)
gdf_imprecis.to_crs(2154).to_file(PATH+'AURA_synthese_observations_imprecise.geojson')
# Génération du fichier liste_sp
liste_sp = compilF[['cd_ref','date_debut','date_fin','nom_valide','nom_vernaculaire','regne','group1_inpn','group2_inpn','group3_inpn','classe','ordre','famille','nombre_min','nombre_max','observateurs','fournisseur','communes','x_centroid_4326','y_centroid_4326']].copy()
liste_sp.sort_values(by=['cd_ref','date_debut'],inplace=True)
liste_sp.drop_duplicates(subset='cd_ref',keep='last',inplace=True)
liste_sp.to_excel(PATH+'liste_sp_CHAR.xlsx',index=False,sheet_name='liste_sp')
# intersection des sites
gdf = gpd.read_file(PATH+'emprise_extrac_explode_sp.gpkg')[['nom','geometry']]
dfF = (compilF.to_crs(2154).sjoin(gdf, how='left')
.drop(columns=['geometry','index_right',"Unnamed: 0"],errors='ignore')
)
dfF = dfF[[
'nom','id_synthese', 'date_debut', 'date_fin', 'heure_debut',
'heure_fin', 'cd_nom', 'cd_ref', 'nom_valide', 'nom_vernaculaire',
'nom_cite', 'regne', 'group1_inpn', 'group2_inpn', 'group3_inpn',
'classe', 'ordre', 'famille', 'rang_taxo', 'nombre_min', 'nombre_max',
'alti_min', 'alti_max', 'observateurs', 'determinateur', 'communes',
'geometrie_wkt_4326', 'x_centroid_4326', 'y_centroid_4326', 'nom_lieu',
'comment_releve', 'comment_occurrence', 'validateur',
'niveau_validation', 'jdd_nom', 'jdd_uuid', 'jdd_id', 'ca_nom',
'ca_uuid', 'ca_id', 'precision_geographique', 'nature_objet_geo',
'type_regroupement', 'technique_observation', 'biologique_statut',
'etat_biologique', 'biogeographique_statut', 'naturalite',
'preuve_existante', 'niveau_precision_diffusion', 'stade_vie', 'sexe',
'objet_denombrement', 'type_denombrement', 'niveau_sensibilite',
'statut_observation', 'floutage_dee', 'statut_source', 'type_info_geo',
'methode_determination', 'comportement', 'id_origine', 'uuid_perm_sinp',
'uuid_perm_grp_sinp', 'date_creation', 'date_modification',
'champs_additionnels', 'fournisseur', 'geojson_4326',
'statut_biologique', 'type_source', 'type_precision',
'sensibilite', 'confidentialite'
]]
dfF.rename(columns={'nom':'nom_site'},inplace=True)
dfF.to_csv(PATH+'compile_38&AURA_synthese_observations_2025-01-17.csv', sep=";")
+49
View File
@@ -0,0 +1,49 @@
from pycen import con_fon, con_gn
import geopandas as gpd
zh = gpd.read_postgis('SELECT * FROM gn_exports.v_synthese_zh_rhomeosite', con_gn)
_ens = gpd.read_postgis('SELECT * FROM sites.sites', con_fon,geom_col='geom')
_ens.sort_values('site_id',inplace=True)
_ens.site_id = _ens.site_id.str.replace('_ZI','')
site = gpd.read_postgis('SELECT * FROM _tdbfcen.vm_sites_cen_2026_shp',con_fon)
site['area_mastery'] = site.area / 10000
ens = _ens[_ens.site_id.isin(site.id_site_cen.tolist())]
# ens = gpd.pd.concat([ens,_ens[(_ens.site_id.str.strip('_ZO').isin(site[~site.id_site_cen.isin(ens.site_id)].id_site_cen.tolist()))]])
# ens.site_id = ens.site_id.str.strip('_ZO')
ens['area_total'] = ens.area / 10000
zh_over_ens = zh.overlay(ens).dissolve('site_id')
zh_over_ens['area_zh_total'] = zh_over_ens.area / 10000
zh_over_ens.to_file('/home/cgeier/Téléchargements/foret_sitecen/overlay_ens_zh.geojson',driver='GeoJSON')
foret = gpd.read_file('/home/cgeier/Téléchargements/foret_sitecen/ign_masque_foret.geojson')
over = foret.overlay(site).dissolve('id_site_cen')
over['area_forest_master'] = over.area / 10000
over.to_file('/home/cgeier/Téléchargements/foret_sitecen/overlay_sites_foret.geojson',driver='GeoJSON')
peup = gpd.read_file('/home/cgeier/Téléchargements/foret_sitecen/peuplier_onsites.geojson')
p_over = peup.overlay(site).dissolve('id_site_cen')
p_over['area_peuplier_master'] = p_over.area / 10000
p_over.to_file('/home/cgeier/Téléchargements/foret_sitecen/overlay_sites_peupleraie.geojson',driver='GeoJSON')
zh_over = zh.overlay(site).dissolve('id_site_cen')
zh_over['area_zh_master'] = zh_over.area / 10000
zh_over.to_file('/home/cgeier/Téléchargements/foret_sitecen/overlay_site_maitrise_zh.geojson',driver='GeoJSON')
df = (
ens[['site_id','site_nom','geom','area_total']]
.merge(over[['area_mastery','area_forest_master']].reset_index(drop=False), how='left', right_on='id_site_cen',left_on='site_id')
.drop(columns='id_site_cen')
.merge(p_over[['area_peuplier_master']].reset_index(drop=False), how='left', right_on='id_site_cen',left_on='site_id')
.drop(columns='id_site_cen')
.merge(zh_over_ens[['area_zh_total']].reset_index(drop=False), on='site_id', how='left')
.merge(zh_over[['area_zh_master']].reset_index(drop=False), how='left', right_on='id_site_cen',left_on='site_id')
.drop(columns='id_site_cen')
.sort_values('site_id')
.fillna(0)
)
df = df[~df.site_id.isin(['CACH','N2GL','N2IP','RNGL','RNIP','NDDM'])]
df.to_file('/home/cgeier/Téléchargements/foret_sitecen/sites_foret.geojson',driver='GeoJSON')
+34
View File
@@ -0,0 +1,34 @@
import geopandas as gpd
from os import path
from pycen import con
PATH = '/home/colas/Documents/9_PROJETS/1_ZH/MAJ/GERECO - Schéma_strat_ZH_Huez/Inventaire_2016_GERECO'
F1 = 'Inf1000m2_NonSurfaciques.shp'
F2 = 'Inf1000m2_Surfaciques.shp'
df1 = gpd.read_file(path.join(PATH,F1))
del df1['id']
df1.rename_geometry('geom',inplace=True)
df2 = gpd.read_file(path.join(PATH,F2))
del df2['id']
del df2['SurfHa']
df2['geom'] = df2.centroid
df2.set_geometry('geom', crs=2154, inplace=True)
del df2['geometry']
df = (gpd.pd.concat([df1,df2])
.rename(columns={'NOM_ZH':'comment'}))
df['qui'] = 'GERECKO'
df['source'] = "Bureau d'étude"
df['ponctuelle'] = 'Oui'
df['type'] = 'Inconnu'
df['classe'] = 'Inconnu'
df['x'] = df.geom.x
df['y'] = df.geom.y
df['datemodif'] = '2016-01-01'
df['observer'] = 'GERECKO'
df.to_postgis(
'zh_ponctuelle',con,'zones_humides',if_exists='append', index=False
)