Commit bd837d18 authored by Allvey's avatar Allvey

二次调度适配新版地图

parent 58bf095b
...@@ -62,8 +62,11 @@ def get_cross_next_lanes(truck_locate): ...@@ -62,8 +62,11 @@ def get_cross_next_lanes(truck_locate):
:return: lane_id list :return: lane_id list
""" """
next_lane_list = [] next_lane_list = []
startNodeId = session_postgre.query(Lane).filter_by(Id=truck_locate).first().EndNodeId
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
startNodeId = session_postgre.query(Lane).filter_by(FeatureId=truck_locate, MapVersion=map_version).first().EndNodeId
for item in session_postgre.query(Lane).filter_by(StartNodeId=startNodeId, MapVersion=map_version).all(): for item in session_postgre.query(Lane).filter_by(StartNodeId=startNodeId, MapVersion=map_version).all():
next_lane_list.append(str(item.Id)) next_lane_list.append(str(item.Id))
next_lane_end_node = item.EndNodeId next_lane_end_node = item.EndNodeId
...@@ -82,8 +85,10 @@ def is_close_to_cross(truck_locate, truck_prise_location): ...@@ -82,8 +85,10 @@ def is_close_to_cross(truck_locate, truck_prise_location):
:return: :return:
""" """
try: try:
start_node_id = session_postgre.query(Lane).filter_by(Id=truck_locate).first().EndNodeId map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
start_node_gemo = str(session_postgre.query(Node).filter_by(Id=start_node_id).first().geom)
start_node_id = session_postgre.query(Lane).filter_by(FeatureId=truck_locate, MapVersion=map_version).first().EndNodeId
start_node_gemo = str(session_postgre.query(Node).filter_by(FeatureId=start_node_id, MapVersion=map_version).first().geom)
coess_pos_xy = wkb.loads(start_node_gemo) coess_pos_xy = wkb.loads(start_node_gemo)
cross_pos = [coess_pos_xy.y, coess_pos_xy.x] cross_pos = [coess_pos_xy.y, coess_pos_xy.x]
except Exception as es: except Exception as es:
......
...@@ -154,11 +154,14 @@ def redispatch_request(): ...@@ -154,11 +154,14 @@ def redispatch_request():
closer_excavator_state, further_excavator_state = get_excavator_state(closer_excavator_id), \ closer_excavator_state, further_excavator_state = get_excavator_state(closer_excavator_id), \
get_excavator_state(further_excavator_id) get_excavator_state(further_excavator_id)
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
# 装载区入场点 # 装载区入场点
closer_entrance_node_id = session_postgre.query(DiggingWorkArea).filter_by(Id=closer_area_id).first().EntranceNodeId closer_entrance_node_id = session_postgre.query(DiggingWorkArea).filter_by(FeatureId=closer_area_id,
MapVersion=map_version).first().EntranceNodeId
further_entrance_node_id = session_postgre.query(DiggingWorkArea).filter_by( further_entrance_node_id = session_postgre.query(DiggingWorkArea).filter_by(FeatureId=further_area_id,
Id=further_area_id).first().EntranceNodeId MapVersion=map_version).first().EntranceNodeId
logger.info("近端装载区入场点") logger.info("近端装载区入场点")
logger.info(closer_entrance_node_id) logger.info(closer_entrance_node_id)
...@@ -338,13 +341,13 @@ def truck_pass_first_area(truck_id, lane_id, closer_entrance_node_id, further_en ...@@ -338,13 +341,13 @@ def truck_pass_first_area(truck_id, lane_id, closer_entrance_node_id, further_en
# try: # try:
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
def backtracking(root_node): def backtracking(root_node):
from collections import deque from collections import deque
que = deque([root_node]) que = deque([root_node])
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
while que: while que:
size = len(que) size = len(que)
for _ in range(size): for _ in range(size):
...@@ -362,7 +365,7 @@ def truck_pass_first_area(truck_id, lane_id, closer_entrance_node_id, further_en ...@@ -362,7 +365,7 @@ def truck_pass_first_area(truck_id, lane_id, closer_entrance_node_id, further_en
if item: if item:
que.append(item.EndNodeId) que.append(item.EndNodeId)
node_id = session_postgre.query(Lane).filter_by(Id=lane_id).first().EndNodeId node_id = session_postgre.query(Lane).filter_by(FeatureId=lane_id, MapVersion=map_version).first().EndNodeId
if backtracking(root_node=node_id) == 0: if backtracking(root_node=node_id) == 0:
return True return True
......
...@@ -16,6 +16,8 @@ def graph_construct(): ...@@ -16,6 +16,8 @@ def graph_construct():
# 读取图节点 # 读取图节点
cursor = c.execute("SELECT * FROM GRAPH_NODE") cursor = c.execute("SELECT * FROM GRAPH_NODE")
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
node_label = {} node_label = {}
for row in cursor: for row in cursor:
node_label[row[1]] = row[2] node_label[row[1]] = row[2]
...@@ -37,7 +39,7 @@ def graph_construct(): ...@@ -37,7 +39,7 @@ def graph_construct():
lane_info = {} lane_info = {}
for item in lanes: for item in lanes:
distance = session_postgre.query(Lane).filter_by(Id=item).first().Length distance = session_postgre.query(Lane).filter_by(FeatureId=item, MapVersion=map_version).first().Length
lane_info[item] = list([distance, distance]) lane_info[item] = list([distance, distance])
# 重构卸载路径拓扑图 # 重构卸载路径拓扑图
......
...@@ -134,17 +134,19 @@ class Topo(): ...@@ -134,17 +134,19 @@ class Topo():
trip = self.work_area_distance_info trip = self.work_area_distance_info
park_trip = self.park_distance_info park_trip = self.park_distance_info
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
for item in trip: for item in trip:
# item = [[load_area_id, unload_area_id], to_unload_lanes, to_load_lanes] # item = [[load_area_id, unload_area_id], to_unload_lanes, to_load_lanes]
# path_node_for_trip= [] # path_node_for_trip= []
# unload_G # unload_G
Exitnode_for_digging = str( Exitnode_for_digging = str(
session_postgre.query(DiggingWorkArea).filter_by(Id=item[0][0]).first().ExitNodeId) session_postgre.query(DiggingWorkArea).filter_by(FeatureId=item[0][0], MapVersion=map_version).first().ExitNodeId)
digging_name = str( digging_name = str(
session_postgre.query(DiggingWorkArea).filter_by(Id=item[0][0]).first().Name) session_postgre.query(DiggingWorkArea).filter_by(FeatureId=item[0][0], MapVersion=map_version).first().Name)
Entrancenode_for_dump = str(session_postgre.query(DumpArea).filter_by(Id=item[0][1]).first().EntranceNodeId) Entrancenode_for_dump = str(session_postgre.query(DumpArea).filter_by(FeatureId=item[0][1], MapVersion=map_version).first().EntranceNodeId)
dump_name = str(session_postgre.query(DumpArea).filter_by(Id=item[0][1]).first().Name) dump_name = str(session_postgre.query(DumpArea).filter_by(FeatureId=item[0][1], MapVersion=map_version).first().Name)
self.unload_G.add_node(Exitnode_for_digging, name='digging', type=digging_name) self.unload_G.add_node(Exitnode_for_digging, name='digging', type=digging_name)
self.unload_G.add_node(Entrancenode_for_dump, name='group_dumps', type=dump_name) self.unload_G.add_node(Entrancenode_for_dump, name='group_dumps', type=dump_name)
...@@ -164,17 +166,16 @@ class Topo(): ...@@ -164,17 +166,16 @@ class Topo():
try: try:
unload_saved_lane = [] unload_saved_lane = []
for lane_id in item[1]: # for each lane in a to_unload route for lane_id in item[1]: # for each lane in a to_unload route
lane_startpoint = str(session_postgre.query(Lane).filter_by(Id=lane_id).first().StartNodeId) lane_startpoint = str(session_postgre.query(Lane).filter_by(FeatureId=lane_id, MapVersion=map_version).first().StartNodeId)
lane_endpoint = str(session_postgre.query(Lane).filter_by(Id=lane_id).first().EndNodeId) lane_endpoint = str(session_postgre.query(Lane).filter_by(FeatureId=lane_id, MapVersion=map_version).first().EndNodeId)
logger.info(f'unload route lane id: %s' % lane_id) logger.info(f'unload route lane id: %s' % lane_id)
# add [start_point, end_point, length, lane_id] to unload_saved_lane # add [start_point, end_point, length, lane_id] to unload_saved_lane
unload_saved_lane.append([str(lane_startpoint), str(lane_endpoint), unload_saved_lane.append([str(lane_startpoint), str(lane_endpoint),
float(session_postgre.query(Lane).filter_by(Id=lane_id).first().Length), float(session_postgre.query(Lane).filter_by(FeatureId=lane_id, MapVersion=map_version).first().Length),
lane_id]) lane_id])
# son_lane_num = sum(1 for truck_id in session_postgre.query(Lane).filter_by(StartNodeId = lane_endpoint).all()) # son_lane_num = sum(1 for truck_id in session_postgre.query(Lane).filter_by(StartNodeId = lane_endpoint).all())
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
son_lane_num = len(session_postgre.query(Lane).filter_by(StartNodeId=lane_endpoint, MapVersion=map_version).all()) son_lane_num = len(session_postgre.query(Lane).filter_by(StartNodeId=lane_endpoint, MapVersion=map_version).all())
# 可以添加的节点:分叉口或终点 # 可以添加的节点:分叉口或终点
...@@ -216,11 +217,11 @@ class Topo(): ...@@ -216,11 +217,11 @@ class Topo():
# load_G # load_G
Entrancenode_for_digging = str( Entrancenode_for_digging = str(
session_postgre.query(DiggingWorkArea).filter_by(Id=item[0][0]).first().EntranceNodeId) session_postgre.query(DiggingWorkArea).filter_by(FeatureId=item[0][0], MapVersion=map_version).first().EntranceNodeId)
digging_name = str( digging_name = str(
session_postgre.query(DiggingWorkArea).filter_by(Id=item[0][0]).first().Name) session_postgre.query(DiggingWorkArea).filter_by(FeatureId=item[0][0], MapVersion=map_version).first().Name)
Exitnode_for_dump = str(session_postgre.query(DumpArea).filter_by(Id=item[0][1]).first().ExitNodeId) Exitnode_for_dump = str(session_postgre.query(DumpArea).filter_by(FeatureId=item[0][1], MapVersion=map_version).first().ExitNodeId)
dump_name = str(session_postgre.query(DumpArea).filter_by(Id=item[0][1]).first().Name) dump_name = str(session_postgre.query(DumpArea).filter_by(FeatureId=item[0][1], MapVersion=map_version).first().Name)
logger.info(f'load route start dump name: %s' % dump_name) logger.info(f'load route start dump name: %s' % dump_name)
logger.info(f'load route end digging name: %s' % digging_name) logger.info(f'load route end digging name: %s' % digging_name)
...@@ -241,14 +242,13 @@ class Topo(): ...@@ -241,14 +242,13 @@ class Topo():
for lane_id in item[ for lane_id in item[
2]: # [[str(item.load_area_id), str(item.unload_area_id)], item.to_unload_lanes, item.to_load_lanes] 2]: # [[str(item.load_area_id), str(item.unload_area_id)], item.to_unload_lanes, item.to_load_lanes]
lane_startpoint = str(session_postgre.query(Lane).filter_by(Id=lane_id).first().StartNodeId) lane_startpoint = str(session_postgre.query(Lane).filter_by(FeatureId=lane_id, MapVersion=map_version).first().StartNodeId)
lane_endpoint = str(session_postgre.query(Lane).filter_by(Id=lane_id).first().EndNodeId) lane_endpoint = str(session_postgre.query(Lane).filter_by(FeatureId=lane_id, MapVersion=map_version).first().EndNodeId)
load_saved_lane.append([str(lane_startpoint), str(lane_endpoint), load_saved_lane.append([str(lane_startpoint), str(lane_endpoint),
float(session_postgre.query(Lane).filter_by(Id=lane_id).first().Length), float(session_postgre.query(Lane).filter_by(FeatureId=lane_id, MapVersion=map_version).first().Length),
lane_id]) lane_id])
# son_lane_num = sum(1 for truck_id in session_postgre.query(Lane).filter_by(StartNodeId = lane_endpoint).all()) # son_lane_num = sum(1 for truck_id in session_postgre.query(Lane).filter_by(StartNodeId = lane_endpoint).all())
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
son_lane_num = len(session_postgre.query(Lane).filter_by(StartNodeId=lane_endpoint, MapVersion=map_version).all()) son_lane_num = len(session_postgre.query(Lane).filter_by(StartNodeId=lane_endpoint, MapVersion=map_version).all())
logger.info(f'load route lane id: %s' % lane_id) logger.info(f'load route lane id: %s' % lane_id)
...@@ -296,13 +296,13 @@ class Topo(): ...@@ -296,13 +296,13 @@ class Topo():
try: try:
load_saved_lane = [] load_saved_lane = []
for i in k[1]: for i in k[1]:
load_i_startpoint = str(session_postgre.query(Lane).filter_by(Id=i).first().StartNodeId) load_i_startpoint = str(session_postgre.query(Lane).filter_by(FeatureId=i, MapVersion=map_version).first().StartNodeId)
load_i_endpoint = str(session_postgre.query(Lane).filter_by(Id=i).first().EndNodeId) load_i_endpoint = str(session_postgre.query(Lane).filter_by(FeatureId=i, MapVersion=map_version).first().EndNodeId)
load_saved_lane.append([str(load_i_startpoint), str(load_i_endpoint), load_saved_lane.append([str(load_i_startpoint), str(load_i_endpoint),
float(session_postgre.query(Lane).filter_by(Id=i).first().Length), i]) float(session_postgre.query(Lane).filter_by(FeatureId=i, MapVersion=map_version).first().Length), i])
# son_lane_num = sum(1 for truck_id in session_postgre.query(Lane).filter_by(StartNodeId = load_i_endpoint).all()) # son_lane_num = sum(1 for truck_id in session_postgre.query(Lane).filter_by(StartNodeId = load_i_endpoint).all())
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version # map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
son_lane_num = len(session_postgre.query(Lane).filter_by(StartNodeId=load_i_endpoint, MapVersion=map_version).all()) son_lane_num = len(session_postgre.query(Lane).filter_by(StartNodeId=load_i_endpoint, MapVersion=map_version).all())
logger.info(f'park route lane id: %s' % i) logger.info(f'park route lane id: %s' % i)
...@@ -367,6 +367,7 @@ class Topo(): ...@@ -367,6 +367,7 @@ class Topo():
def get_unload_target_node_real(self, truck_location_lane, pre_target, allow): def get_unload_target_node_real(self, truck_location_lane, pre_target, allow):
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
source_node = self.get_unload_edge_node(truck_location_lane) source_node = self.get_unload_edge_node(truck_location_lane)
target_list = [] target_list = []
...@@ -392,7 +393,7 @@ class Topo(): ...@@ -392,7 +393,7 @@ class Topo():
distance, path = nx.single_source_dijkstra(self.unload_G, source=source_node, target=i, distance, path = nx.single_source_dijkstra(self.unload_G, source=source_node, target=i,
weight="real_distance") weight="real_distance")
unload_area_id = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first( unload_area_id = session_postgre.query(DumpArea).filter_by(FeatureId=unload_area_id, MapVersiojn=map_version).first(
EntranceNodeId=i).first().Id EntranceNodeId=i).first().Id
unload_area_lane_dict[str(unload_area_id)] = [] unload_area_lane_dict[str(unload_area_id)] = []
for j in range(len(path) - 1): for j in range(len(path) - 1):
...@@ -407,7 +408,7 @@ class Topo(): ...@@ -407,7 +408,7 @@ class Topo():
# return the target area's entrance point and target area # return the target area's entrance point and target area
min_dis_path = path_length_map[sorted(list(path_length_map.keys()))[0]] min_dis_path = path_length_map[sorted(list(path_length_map.keys()))[0]]
entrance_point = min_dis_path[-1] entrance_point = min_dis_path[-1]
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
target_dump_area = str(session_postgre.query(DumpArea).filter_by(EntranceNodeId=entrance_point, MapVersion=map_version).first().Id) target_dump_area = str(session_postgre.query(DumpArea).filter_by(EntranceNodeId=entrance_point, MapVersion=map_version).first().Id)
# target_dump_area_name = str(session_postgre.query(DumpArea).filter_by(EntranceNodeId=entrance_point).first().Name) # target_dump_area_name = str(session_postgre.query(DumpArea).filter_by(EntranceNodeId=entrance_point).first().Name)
...@@ -482,7 +483,7 @@ class Topo(): ...@@ -482,7 +483,7 @@ class Topo():
# update target_list # update target_list
pre_destination_node = str( pre_destination_node = str(
session_postgre.query(DiggingWorkArea).filter_by(Id=pre_target).first().EntranceNodeId) session_postgre.query(DiggingWorkArea).filter_by(FeatureId=pre_target, MapVersion=map_version).first().EntranceNodeId)
target_list = [] target_list = []
for (node, att) in self.load_G.nodes.data('name'): for (node, att) in self.load_G.nodes.data('name'):
# select next reachable target # select next reachable target
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment