Update phase_3_compute.py

This commit is contained in:
MaelREBOUX 2021-11-01 11:57:37 +01:00
parent e57ee6478c
commit 970eb10fef

View file

@ -94,6 +94,37 @@ SELECT node, edge FROM t ORDER BY seq DESC LIMIT 1;"""
return([node_end, edge]) return([node_end, edge])
# ==============================================================================
def getPgrNodeInfos(node_id):
# cette fonction va chercher les infos où il faut pour le PK
cursor = db_redadeg_pg_conn.cursor()
# géométrie…
sql_get_from_pgr_node = """
SELECT
the_geom,
TRUNC(ST_X(the_geom)::numeric,1) AS x,
TRUNC(ST_Y(the_geom)::numeric,1) AS y,
TRUNC(ST_X(ST_Transform(the_geom,4326)::geometry(Point, 4326))::numeric,8) AS long,
TRUNC(ST_Y(ST_Transform(the_geom,4326)::geometry(Point, 4326))::numeric,8) AS lat
FROM phase_3_troncons_pgr_vertices_pgr v WHERE id = """+ str(node_id) +""";"""
#print(sql_get_from_pgr_node)
cursor.execute(sql_get_from_pgr_node)
data = cursor.fetchone()
the_geom = data[0]
x = data[1]
y = data[2]
long = data[3]
lat = data[4]
cursor.close()
return([the_geom,x,y,long,lat])
# #
# Start processing # Start processing
@ -197,6 +228,8 @@ try:
print(" "+str(secteur_nb_km)+" km / pk à créer") print(" "+str(secteur_nb_km)+" km / pk à créer")
print("") print("")
# cette variable pour stocker la requête SQL de création des PK
sql_insert_pks = "DELETE FROM phase_3_pk WHERE secteur_id = "+secteur+" ;\n"
# ------------------------------------------------------ # ------------------------------------------------------
print(" Calcul du 1er PK") print(" Calcul du 1er PK")
@ -204,10 +237,20 @@ try:
# on a les infos -> on calcule la route qui va du 1er nœud de départ et qui fait la distance demandée # on a les infos -> on calcule la route qui va du 1er nœud de départ et qui fait la distance demandée
# pour récupérer l'id du noeud de fin qui va devenir notre PK # pour récupérer l'id du noeud de fin qui va devenir notre PK
node_zero = secteur_node_start node_zero = secteur_node_start
#edge_zero = getPKfromRouting(node_zero,secteur_longueur_km)[1]
node_zero_data = getPgrNodeInfos(node_zero)
print(str(node_zero_data[0]))
sql_insert_pks += "INSERT INTO phase_3_pk (secteur_id, pk_id, the_geom, pk_x, pk_y, pk_long, pk_lat) VALUES ("
sql_insert_pks += secteur + ",1"
sql_insert_pks += ",'" + node_zero_data[0] + "'"
sql_insert_pks += "," + str(node_zero_data[1]) + "," + str(node_zero_data[2])
sql_insert_pks += "," + str(node_zero_data[3]) + "," + str(node_zero_data[4])
sql_insert_pks += ");\n"
#print(sql_insert_pks)
#sys.exit()
print(" nœud du PK 1 : " + str(node_zero)) print(" nœud du PK 1 : " + str(node_zero))
#print(" nœud du PK 1 : "+ str(node_zero) + " | "+ str(edge_zero))
print("") print("")
# ------------------------------------------------------ # ------------------------------------------------------
@ -216,14 +259,14 @@ try:
# maintenant on peut itérer jusqu'à la fin du secteur # maintenant on peut itérer jusqu'à la fin du secteur
node_x = node_zero node_x = node_zero
for i in range(1, secteur_nb_km): for i in range(2, secteur_nb_km + 1):
pk_data = getPKfromRouting(node_x,secteur_longueur_km) pk_data = getPKfromRouting(node_x,secteur_longueur_km)
node_x = pk_data[0] node_x = pk_data[0]
previous_pk_edge = pk_data[1] previous_pk_edge = pk_data[1]
# on met tt de suite en négatif l'info de routage du précédent tronçon afin de l'écarter du prochain calcul de routage # on met tt de suite en négatif l'info de routage du précédent tronçon afin de l'écarter du prochain calcul de routage
sql_neutralisation = "UPDATE phase_3_troncons_pgr SET id = -"+str(previous_pk_edge)+" WHERE id = "+str(previous_pk_edge)+" ;" sql_neutralisation = "UPDATE phase_3_troncons_pgr SET id = -ABS("+str(previous_pk_edge)+") WHERE id = "+str(previous_pk_edge)+" ;"
#print(sql_neutralisation) #print(sql_neutralisation)
db_redadeg_cursor.execute(sql_neutralisation) db_redadeg_cursor.execute(sql_neutralisation)
@ -232,7 +275,16 @@ try:
print(" nœud du PK "+str(i)+" : " + str(node_x)) print(" nœud du PK "+str(i)+" : " + str(node_x))
# ici on construit la requête avec les données du PK
node_x_data = getPgrNodeInfos(node_x)
# on fait une requête SQL d'insert de ce PK
sql_insert_pks += "INSERT INTO phase_3_pk (secteur_id, pk_id, the_geom, pk_x, pk_y, pk_long, pk_lat) VALUES ("
sql_insert_pks += secteur + ","+str(i)
sql_insert_pks += ",'" + node_x_data[0] + "'"
sql_insert_pks += "," + str(node_x_data[1]) + "," + str(node_x_data[2])
sql_insert_pks += "," + str(node_x_data[3]) + "," + str(node_x_data[4])
sql_insert_pks += ");\n"
print("") print("")
@ -242,7 +294,12 @@ try:
print(" RAZ de la neutralisation des infos de routage pour la boucle") print(" RAZ de la neutralisation des infos de routage pour la boucle")
sql_reset_neutralisation = "UPDATE phase_3_troncons_pgr SET id = -1*id WHERE id < 0 ;" sql_reset_neutralisation = "UPDATE phase_3_troncons_pgr SET id = -1*id WHERE id < 0 ;"
db_redadeg_cursor.execute(sql_reset_neutralisation) db_redadeg_cursor.execute(sql_reset_neutralisation)
print(" fait")
print("")
print(" Écriture des PK dans la couche phase_3_pk")
#print(sql_insert_pks)
db_redadeg_cursor.execute(sql_insert_pks)
print(" fait") print(" fait")
print("") print("")