Python_scripts/3_AZALEE/update_psInf1200.py
2024-02-26 15:36:37 +01:00

74 lines
2.6 KiB
Python

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/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.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'})
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()
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')