init depot renew
This commit is contained in:
Executable
+137
@@ -0,0 +1,137 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: UTF-8 -*-
|
||||
#Nom : : foncier_insert_table.py
|
||||
#Description : Correspondance entre les sites et les parcelles cadastrales.
|
||||
#Copyright : 2021, CEN38
|
||||
#Auteur : Colas Geier
|
||||
#Version : 1.0
|
||||
|
||||
import pandas as pd
|
||||
import geopandas as gpd
|
||||
from sqlalchemy import create_engine #, func
|
||||
# from sqlalchemy.orm import sessionmaker
|
||||
import psycopg2
|
||||
import datetime as dt
|
||||
import sys
|
||||
import gc
|
||||
from pycen import con_fon
|
||||
|
||||
|
||||
# Parametres généraux
|
||||
epsg = '2154'
|
||||
crs = 'EPSG:%s'%epsg
|
||||
chunk = None
|
||||
pci_annee = '2021'
|
||||
matrice_annee = '2021'
|
||||
start_time = dt.datetime.today()
|
||||
def time_exec (init_time):
|
||||
time = dt.datetime.today() - init_time
|
||||
return str(time)
|
||||
|
||||
def get_data(table,schema,engine=con_fon,chunk=chunk):
|
||||
sql = "SELECT * FROM {0}.{1}".format(schema, table)
|
||||
tmp = gpd.read_postgis(
|
||||
sql = sql,
|
||||
con = con_fon,
|
||||
geom_col = 'geom',
|
||||
crs = crs,
|
||||
chunksize = chunk, )
|
||||
|
||||
# Mise en forme des données
|
||||
# start_time = dt.datetime.today()
|
||||
if chunk:
|
||||
df = pd.concat(tmp, ignore_index=True)
|
||||
else:
|
||||
df = tmp.copy()
|
||||
|
||||
return df
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
###############
|
||||
# Get sites
|
||||
tab_site = 'sites'
|
||||
sch_site = 'sites'
|
||||
tab_fon = 'cadastre_site'
|
||||
sch_fon = 'foncier'
|
||||
print('''IMPORT data from schema: '%s' , table : '%s' '''%(sch_site,tab_site))
|
||||
# sql = "SELECT * FROM {0}.{1}".format(sch_site, tab_site)
|
||||
sql = '''
|
||||
SELECT * FROM {0}.{1}
|
||||
WHERE site_id = 'CRAS'
|
||||
--WHERE site_id NOT IN (SELECT DISTINCT site_id FROM {2}.{3})
|
||||
'''.format(sch_site, tab_site, sch_fon, tab_fon)
|
||||
site = gpd.read_postgis(
|
||||
# table_name = table_in,
|
||||
sql = sql,
|
||||
con = con_fon,
|
||||
geom_col = 'geom',
|
||||
# schema = schema_in,
|
||||
crs = crs,
|
||||
chunksize = chunk, )
|
||||
# union_site = gpd.GeoSeries(site.geom.cascaded_union)
|
||||
if site.empty:
|
||||
print('Pas de nouveaux sites à lier au cadastre ====> EXIT')
|
||||
sys.exit()
|
||||
|
||||
#################
|
||||
# Get parcelles
|
||||
tab_parc = 'cadastre'
|
||||
sch_parc = 'parcelles'
|
||||
print('''IMPORT data from schema: '%s' , table : '%s' '''%(sch_parc,tab_parc))
|
||||
sql = """SELECT * FROM {sch}.{tab} WHERE ST_Intersects (geom, 'SRID={epsg};{poly}')
|
||||
AND par_id NOT IN (SELECT par_id FROM {sch}.parcelles_cen)""".format(
|
||||
sch=tab_parc, tab=sch_parc, epsg=epsg, poly=site.unary_union
|
||||
)
|
||||
parc = gpd.read_postgis(
|
||||
sql = sql,
|
||||
con = con_fon,
|
||||
geom_col = 'geom',
|
||||
crs = crs,
|
||||
chunksize = chunk, )
|
||||
|
||||
parc_cent = parc.copy()
|
||||
# parc_cent.geom = parc_cent.representative_point()
|
||||
# parc_cent.geom = parc_cent.centroid
|
||||
res = gpd.sjoin(site, parc_cent, predicate='intersects')
|
||||
|
||||
|
||||
print('RUN fonction "import_parcelles_cen" pour {} lignes '.format(res.shape[0]))
|
||||
# lst_site = res.site_id.unique()
|
||||
start_time = dt.datetime.today()
|
||||
res['sql'] = "SELECT cadastre.import_parcelles_cen('"+res.par_id+"','"+res.site_id+"',"+str(start_time.year)+");"
|
||||
|
||||
with con_fon.begin() as cnx:
|
||||
res['sql'].map(lambda x: cnx.execute(x))
|
||||
|
||||
|
||||
###############
|
||||
# Get cptprop
|
||||
lst_parid = "','".join(res.par_id.unique())
|
||||
sql = '''
|
||||
SELECT * FROM cadastre.cadastre
|
||||
JOIN cadastre.lots USING (lot_id)
|
||||
WHERE lots.par_id IN ('{lst_parid}')'''.format(lst_parid=lst_parid)
|
||||
cptprop = pd.read_sql(
|
||||
sql = sql,
|
||||
con = con_fon,)
|
||||
cptprop.drop_duplicates('dnupro', inplace=True)
|
||||
|
||||
start_time = dt.datetime.today()
|
||||
print('RUN fonction "import_cptprop_cen" pour {} lignes '.format(cptprop.shape[0]))
|
||||
|
||||
|
||||
cptprop['sql'] = "SELECT cadastre.import_cptprop_cen('"+cptprop.dnupro+"',"+str(start_time.year)+");"
|
||||
|
||||
with con_fon.begin() as cnx:
|
||||
cptprop['sql'].map(lambda x: cnx.execute(x))
|
||||
time_exec(start_time)
|
||||
print('END fonction : import_cptprop_cen .......... %s'%time_exec(start_time))
|
||||
|
||||
site_id = 'GDMA'
|
||||
with con_fon.begin() as cnx:
|
||||
cnx.execute("SELECT admin_sig.refresh_mview_foncier('{site_id}')"\
|
||||
.format(
|
||||
site_id=site_id
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user