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 from pycen import update_to_sql path0 = '/home/colas/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,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'}) PS.to_sql('r_infeq_1200m',con,'ps',if_exists='append',index=False) # update_to_sql(PS,con,'r_infeq_1200m','ps','id_site') 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_all = gpd.read_postgis('SELECT * FROM ps."v_pelouseseches_all"',con) 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')