147 lines
4.8 KiB
Python
147 lines
4.8 KiB
Python
#!/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)
|