ar_redadeg/scripts_v2/phase_4.py

239 lines
6 KiB
Python
Raw Normal View History

2021-12-04 11:48:55 +00:00
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Libraries
#
import os
import sys
import datetime
import time
import configparser
import psycopg2
import subprocess
#from logguer import log_verif
# ==============================================================================
# répertoire courant
script_dir = os.path.dirname(os.path.abspath(__file__))
# jour courant
date = datetime.datetime.now()
# lecture du fichier de configuration qui contient les infos de connection
config = configparser.ConfigParser()
config.read( script_dir + '/config.ini')
#fichier_log = str(date.year)+str(date.month)+str(date.day)+"_"+str(date.hour)+str(date.minute)
fichier_log = str(date.year)+str(date.month)+str(date.day)
# ==============================================================================
def initConnRedadegDB():
# connexion à la base postgresql
try:
global db_redadeg_pg_conn
db_redadeg_pg_conn = psycopg2.connect(db_redadeg_conn_str)
db_redadeg_pg_conn.set_session(autocommit=True)
print(" Connexion à la base "+db_redadeg_db+" sur "+db_redadeg_host+" réussie ")
except Exception as err:
print(" Connexion à la base "+db_redadeg_db+" sur "+db_redadeg_host+ " impossible ")
try:
err.pgcode
print(" PostgreSQL error code : " + err.pgcode)
sys.exit()
except:
print(" " + str(err),0)
sys.exit()
# ==============================================================================
def closeConnRedadegDB():
try:
db_redadeg_pg_conn.close()
print(" Fermeture de la connexion à la base "+db_redadeg_db+" sur "+db_redadeg_host)
except:
pass
#
# Functions
#
#
# Start processing
#
startTime = time.perf_counter()
# on récupère les arguments passés
list_of_args = sys.argv
millesime=""
secteur=""
typemaj=""
# et on fait des tests
try:
if len(list_of_args[1]) != 4:
print("Pas de millésime en argument")
sys.exit()
else:
millesime = list_of_args[1]
# ok : tout est bon on peut commencer
# sortie des tests
except SystemExit:
print("Erreur dans les arguments --> stop")
sys.exit()
except:
print("oups : vérifiez vos arguments passés au script !")
print("stop")
sys.exit()
print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
print("")
print(" Export des données phase 3 pour la phase 5 pour le millésime "+str(millesime))
print("")
print(" Lecture du fichier de configuration ")
print("")
# BD Ar Redadeg
global db_redadeg_host
global db_redadeg_db
db_redadeg_host = config.get('redadeg_database', 'host')
db_redadeg_port = config.get('redadeg_database', 'port')
db_redadeg_db = config.get('redadeg_database', 'db')+"_"+str(millesime)
db_redadeg_user = config.get('redadeg_database', 'user')
db_redadeg_passwd = config.get('redadeg_database', 'passwd')
# chaîne de connection
global db_redadeg_conn_str
db_redadeg_conn_str = "host="+db_redadeg_host+" port="+db_redadeg_port+" dbname="+db_redadeg_db+" user="+db_redadeg_user+" password="+db_redadeg_passwd
initConnRedadegDB()
# le cursor
db_redadeg_cursor = db_redadeg_pg_conn.cursor()
print("")
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
try:
print(" Export des PK en geojson par secteur (pour les cartes umap phase 5)")
# on commence par chercher la table des secteurs pour récupérer les id
# puis boucler dessus
sql_get_secteurs = """
SELECT id
FROM secteur
WHERE id > 0 AND id <> 999
ORDER BY id ;"""
db_redadeg_cursor.execute(sql_get_secteurs)
secteur_ids = db_redadeg_cursor.fetchall()
# on boucle
for secteur in secteur_ids:
# on fait la commande d'export
export_cmd = ["ogr2ogr", "-f", "GeoJSON",
f"../data/{millesime}/phase_4_pk_{secteur[0]}.geojson",
f"PG:host={db_redadeg_host} port={db_redadeg_port} user={db_redadeg_user} password={db_redadeg_passwd} dbname={db_redadeg_db}",
"-sql", f"SELECT pk_id, secteur_id, the_geom FROM phase_3_pk_4326 WHERE secteur_id = {secteur[0]} ;"]
# on exporte
subprocess.check_output(export_cmd)
print(f" secteur {secteur[0]} : fait")
print(" exports GeoJSON terminé")
print("")
print(" Import des PK dans la table phase_5_pk_ref")
sql_transfert = "TRUNCATE TABLE phase_5_pk_ref ; "
2021-12-04 11:48:55 +00:00
sql_transfert += "INSERT INTO phase_5_pk_ref SELECT * FROM phase_3_pk ORDER BY pk_id ;"
db_redadeg_cursor.execute(sql_transfert)
print(" fait")
2021-12-04 11:48:55 +00:00
print(" Import des PK dans la table phase_5_pk")
sql_transfert = "TRUNCATE TABLE phase_5_pk ; "
sql_transfert += "INSERT INTO phase_5_pk SELECT * FROM phase_3_pk ORDER BY pk_id ;"
db_redadeg_cursor.execute(sql_transfert)
2021-12-04 11:48:55 +00:00
print(" fait")
2022-03-08 21:10:28 +00:00
print(" Remplissage de la couche phase_5_trace depuis phase_2_trace_secteur")
sql_truncate = "TRUNCATE TABLE phase_5_trace ;"
db_redadeg_cursor.execute(sql_truncate)
sql_load = """
INSERT INTO phase_5_trace
SELECT
secteur_id,
the_geom
FROM phase_2_trace_secteur ;"""
db_redadeg_cursor.execute(sql_load)
print(" fait")
print(" Vacuum")
sql_vacuum = "VACUUM FULL phase_5_trace ;"
db_redadeg_cursor.execute(sql_vacuum)
print(" fait")
print("")
2021-12-04 11:48:55 +00:00
print("")
print("")
except Exception as err:
print(" ERREUR : " + str(err))
closeConnRedadegDB()
sys.exit()
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
db_redadeg_cursor.close()
closeConnRedadegDB()
# pour connaître le temps d'exécution
print("")
print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
print("F I N")
print("")
stopTime = time.perf_counter()
# version simple en secondes
#print(f"Exécuté en {stopTime - startTime:0.4f} secondes")
# version en h min s
hours, rem = divmod(stopTime - startTime, 3600)
minutes, seconds = divmod(rem, 60)
print("Exécuté en {:0>2}:{:0>2}:{:05.2f}".format(int(hours),int(minutes),seconds))