#!/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 user = 'cen_admin' pwd = '#CEN38@venir' adr = '192.168.0.189' base = 'bd-cen-38' url = URL.create('postgresql+psycopg2', username=user, password=pwd, host=adr, database=base, ) 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"' con = create_engine(url) 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)