Commit 336b0653 authored by Allvey's avatar Allvey

新版地图

parent 4de48f0f
...@@ -1306,9 +1306,12 @@ class GoThroughDispatcher: ...@@ -1306,9 +1306,12 @@ class GoThroughDispatcher:
closer_area_backtrack_node_id = closer_entrance_node_id closer_area_backtrack_node_id = closer_entrance_node_id
self.closer_area_backtrack_lanes = [] self.closer_area_backtrack_lanes = []
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
for i in range(30): for i in range(30):
# 查询回溯路段对象 # 查询回溯路段对象
item = session_postgre.query(Lane).filter_by(EndNodeId=closer_area_backtrack_node_id).first() item = session_postgre.query(Lane).filter_by(EndNodeId=closer_area_backtrack_node_id,
MapVersion=map_version).first()
logger.info(f"查询到路段{str(item.Id)}") logger.info(f"查询到路段{str(item.Id)}")
if item is None: if item is None:
break break
...@@ -1327,9 +1330,11 @@ class GoThroughDispatcher: ...@@ -1327,9 +1330,11 @@ class GoThroughDispatcher:
try: try:
further_area_backtrack_node_id = further_entrance_node_id further_area_backtrack_node_id = further_entrance_node_id
self.further_area_backtrack_lanes = [] self.further_area_backtrack_lanes = []
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
for i in range(30): for i in range(30):
# 查询回溯路段对象 # 查询回溯路段对象
item = session_postgre.query(Lane).filter_by(EndNodeId=further_area_backtrack_node_id).first() item = session_postgre.query(Lane).filter_by(EndNodeId=further_area_backtrack_node_id,
MapVersion=map_version).first()
if item is None: if item is None:
break break
# 若查询到共同祖先 # 若查询到共同祖先
......
...@@ -62,11 +62,13 @@ def get_cross_next_lanes(truck_locate): ...@@ -62,11 +62,13 @@ def get_cross_next_lanes(truck_locate):
""" """
next_lane_list = [] next_lane_list = []
startNodeId = session_postgre.query(Lane).filter_by(Id=truck_locate).first().EndNodeId startNodeId = session_postgre.query(Lane).filter_by(Id=truck_locate).first().EndNodeId
for item in session_postgre.query(Lane).filter_by(StartNodeId=startNodeId).all(): map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
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
if item.Length < 100: if item.Length < 100:
for next_item in session_postgre.query(Lane).filter_by(StartNodeId=next_lane_end_node).all(): for next_item in session_postgre.query(Lane).filter_by(StartNodeId=next_lane_end_node,
MapVersion=map_version).all():
next_lane_list.append(str(next_item.Id)) next_lane_list.append(str(next_item.Id))
print("next_lane_list") print("next_lane_list")
print(next_lane_list) print(next_lane_list)
......
...@@ -343,6 +343,8 @@ def truck_pass_first_area(truck_id, lane_id, closer_entrance_node_id, further_en ...@@ -343,6 +343,8 @@ def truck_pass_first_area(truck_id, lane_id, closer_entrance_node_id, further_en
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):
...@@ -356,7 +358,7 @@ def truck_pass_first_area(truck_id, lane_id, closer_entrance_node_id, further_en ...@@ -356,7 +358,7 @@ def truck_pass_first_area(truck_id, lane_id, closer_entrance_node_id, further_en
if cur_node == further_entrance_node_id: if cur_node == further_entrance_node_id:
logger.info("further_entrance_node") logger.info("further_entrance_node")
return 1 return 1
for item in session_postgre.query(Lane).filter_by(StartNodeId=cur_node).all(): for item in session_postgre.query(Lane).filter_by(StartNodeId=cur_node, MapVersion=map_version).all():
if item: if item:
que.append(item.EndNodeId) que.append(item.EndNodeId)
...@@ -458,11 +460,12 @@ def get_lanes_between_entrances(closer_node_id, further_node_id): ...@@ -458,11 +460,12 @@ def get_lanes_between_entrances(closer_node_id, further_node_id):
:return: lane set :return: lane set
""" """
try: try:
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
max_find_it = 100 max_find_it = 100
next_node_id = closer_node_id next_node_id = closer_node_id
lane_set = [] lane_set = []
while max_find_it > 0 and next_node_id != further_node_id: while max_find_it > 0 and next_node_id != further_node_id:
item = session_postgre.query(Lane).filter_by(StartNodeId=next_node_id, Type=2).first() item = session_postgre.query(Lane).filter_by(StartNodeId=next_node_id, Type=2, MapVersion=map_version).first()
if item: if item:
next_lane_id = item.Id next_lane_id = item.Id
next_node_id = item.EndNodeId next_node_id = item.EndNodeId
......
...@@ -174,7 +174,8 @@ class Topo(): ...@@ -174,7 +174,8 @@ class Topo():
float(session_postgre.query(Lane).filter_by(Id=lane_id).first().Length), float(session_postgre.query(Lane).filter_by(Id=lane_id).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())
son_lane_num = len(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())
# 可以添加的节点:分叉口或终点 # 可以添加的节点:分叉口或终点
if son_lane_num > 1 or lane_endpoint in self.unload_G_dump_nodes: if son_lane_num > 1 or lane_endpoint in self.unload_G_dump_nodes:
...@@ -247,7 +248,8 @@ class Topo(): ...@@ -247,7 +248,8 @@ class Topo():
float(session_postgre.query(Lane).filter_by(Id=lane_id).first().Length), float(session_postgre.query(Lane).filter_by(Id=lane_id).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())
son_lane_num = len(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())
logger.info(f'load route lane id: %s' % lane_id) logger.info(f'load route lane id: %s' % lane_id)
...@@ -300,7 +302,8 @@ class Topo(): ...@@ -300,7 +302,8 @@ class Topo():
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(Id=i).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())
son_lane_num = len(session_postgre.query(Lane).filter_by(StartNodeId=load_i_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=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)
...@@ -404,7 +407,8 @@ class Topo(): ...@@ -404,7 +407,8 @@ 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]
target_dump_area = str(session_postgre.query(DumpArea).filter_by(EntranceNodeId=entrance_point).first().Id) 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_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)
return min_dis_path, entrance_point, target_dump_area return min_dis_path, entrance_point, target_dump_area
...@@ -474,6 +478,8 @@ class Topo(): ...@@ -474,6 +478,8 @@ class Topo():
source_node, end_node = self.get_load_edge_node(truck_location_lane) source_node, end_node = self.get_load_edge_node(truck_location_lane)
distance_source_node, distance_end_node = self.relative_distance(truck_location_lane, graph_type=0) distance_source_node, distance_end_node = self.relative_distance(truck_location_lane, graph_type=0)
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
# 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(Id=pre_target).first().EntranceNodeId)
...@@ -500,7 +506,7 @@ class Topo(): ...@@ -500,7 +506,7 @@ class Topo():
distance, path = nx.single_source_dijkstra(self.load_G, source=source_node, target=i, distance, path = nx.single_source_dijkstra(self.load_G, source=source_node, target=i,
weight="real_distance") weight="real_distance")
load_area_id = session_postgre.query(DiggingWorkArea).filter_by(EntranceNodeId=i).first().Id load_area_id = session_postgre.query(DiggingWorkArea).filter_by(EntranceNodeId=i, MapVersion=map_version).first().Id
load_area_lane_dict[str(load_area_id)] = [] load_area_lane_dict[str(load_area_id)] = []
for j in range(len(path) - 1): for j in range(len(path) - 1):
load_area_lane_dict[str(load_area_id)] += self.load_G[path[j]][path[j + 1]]['lane'] load_area_lane_dict[str(load_area_id)] += self.load_G[path[j]][path[j + 1]]['lane']
...@@ -516,7 +522,7 @@ class Topo(): ...@@ -516,7 +522,7 @@ class Topo():
for k, v in path_length_map.items(): for k, v in path_length_map.items():
entrance_point = v[-1] entrance_point = v[-1]
target_digging_area = str( target_digging_area = str(
session_postgre.query(DiggingWorkArea).filter_by(EntranceNodeId=entrance_point).first().Id) session_postgre.query(DiggingWorkArea).filter_by(EntranceNodeId=entrance_point, MapVersion=map_version).first().Id)
if end_node not in v: if end_node not in v:
reachable_destinations[target_digging_area] = [k + distance_source_node, 0] reachable_destinations[target_digging_area] = [k + distance_source_node, 0]
else: else:
...@@ -539,18 +545,19 @@ class Topo(): ...@@ -539,18 +545,19 @@ class Topo():
get cross lanes. get cross lanes.
:return: :return:
""" """
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
self.cross_bf_lanes = [] self.cross_bf_lanes = []
for node_id, Type in self.load_G.nodes.data('name'): for node_id, Type in self.load_G.nodes.data('name'):
if Type is None or Type == 'None': if Type is None or Type == 'None':
try: try:
lane = session_postgre.query(Lane).filter_by(EndNodeId=node_id).first() lane = session_postgre.query(Lane).filter_by(EndNodeId=node_id, MapVersion=map_version).first()
if lane is not None: if lane is not None:
self.cross_bf_lanes.append(str(lane.Id)) self.cross_bf_lanes.append(str(lane.Id))
except Exception as es: except Exception as es:
logger.error(es) logger.error(es)
try: try:
next_lane = session_postgre.query(Lane).filter_by(EndNodeId=lane.StartNodeId).first() next_lane = session_postgre.query(Lane).filter_by(EndNodeId=lane.StartNodeId, MapVersion=map_version).first()
if next_lane is not None: if next_lane is not None:
self.cross_bf_lanes.append(str(next_lane.Id)) self.cross_bf_lanes.append(str(next_lane.Id))
except Exception as es: except Exception as es:
......
...@@ -79,11 +79,6 @@ session_mysql.expire_on_commit = False ...@@ -79,11 +79,6 @@ session_mysql.expire_on_commit = False
session_postgre = DBsession_postgre() session_postgre = DBsession_postgre()
session_postgre.expire_on_commit = False session_postgre.expire_on_commit = False
# except Exception as es:
# # logger.error("数据库连接失败")
# # logger.error(es)
# pass
# 定义对象: # 定义对象:
...@@ -146,24 +141,32 @@ class Lane(Base): ...@@ -146,24 +141,32 @@ class Lane(Base):
StartNodeId = Column(VARCHAR(36)) StartNodeId = Column(VARCHAR(36))
EndNodeId = Column(VARCHAR(36)) EndNodeId = Column(VARCHAR(36))
Type = Column(Integer) Type = Column(Integer)
FeatureId = Column(VARCHAR(36))
MapVersion = Column(VARCHAR(36))
def __init__(self, Id, Length, MaxSpeed, StartNodeId, EndNodeId, Type): def __init__(self, Id, Length, MaxSpeed, StartNodeId, EndNodeId, Type, FeatureId, MapVersion):
self.Id = Id self.Id = Id
self.Length = Length self.Length = Length
self.MaxSpeed = MaxSpeed self.MaxSpeed = MaxSpeed
self.StartNodeId = StartNodeId self.StartNodeId = StartNodeId
self.EndNodeId = EndNodeId self.EndNodeId = EndNodeId
self.Type = Type self.Type = Type
self.FeatureId = FeatureId
self.MapVersion = MapVersion
class Node(Base): class Node(Base):
__tablename__ = 'Geo_Node' __tablename__ = 'Geo_Node'
Id = Column(VARCHAR(36), primary_key=True) Id = Column(VARCHAR(36), primary_key=True)
geom = Column(Geography("Point")) geom = Column(Geography("Point"))
FeatureId = Column(VARCHAR(36))
MapVersion = Column(VARCHAR(36))
def __init__(self, Id, geom): def __init__(self, Id, geom, FeatureId, MapVersion):
self.Id = Id self.Id = Id
self.geom = geom self.geom = geom
self.FeatureId = FeatureId
self.MapVersion = MapVersion
class Dispatch(Base): class Dispatch(Base):
...@@ -209,6 +212,7 @@ class Dispatch(Base): ...@@ -209,6 +212,7 @@ class Dispatch(Base):
self.deletor = deletor self.deletor = deletor
self.deletetime = deletetime self.deletetime = deletetime
class DispatchSetting(Base): class DispatchSetting(Base):
__tablename__ = 'sys_dispatch_setting_v' __tablename__ = 'sys_dispatch_setting_v'
...@@ -269,7 +273,6 @@ class WalkTimePark(Base): ...@@ -269,7 +273,6 @@ class WalkTimePark(Base):
self.park_load_lanes = park_load_lanes self.park_load_lanes = park_load_lanes
class Equipment(Base): class Equipment(Base):
__tablename__ = 'sys_equipment' __tablename__ = 'sys_equipment'
...@@ -382,9 +385,11 @@ class DumpArea(Base): ...@@ -382,9 +385,11 @@ class DumpArea(Base):
DumpEquipmentId = Column(VARCHAR(36)) DumpEquipmentId = Column(VARCHAR(36))
EntranceNodeId = Column(VARCHAR(50)) EntranceNodeId = Column(VARCHAR(50))
ExitNodeId = Column(VARCHAR(50)) ExitNodeId = Column(VARCHAR(50))
Name = Column(VARCHAR(36)) FeatureId = Column(VARCHAR(36))
MapVersion = Column(VARCHAR(36))
def __init__(self, Id, Name, BindList, UnloadAbililty, Disabled, Materials, Priority, DumpEquipmentId, EntranceNodeId,ExitNodeId): def __init__(self, Id, Name, BindList, UnloadAbililty, Disabled, Materials, Priority, DumpEquipmentId,
EntranceNodeId, ExitNodeId, FeatureId, MapVersion):
self.Id = Id self.Id = Id
self.Name = Name self.Name = Name
self.BindList = BindList self.BindList = BindList
...@@ -395,6 +400,8 @@ class DumpArea(Base): ...@@ -395,6 +400,8 @@ class DumpArea(Base):
self.DumpEquipmentId = DumpEquipmentId self.DumpEquipmentId = DumpEquipmentId
self.EntranceNodeId = EntranceNodeId self.EntranceNodeId = EntranceNodeId
self.ExitNodeId = ExitNodeId self.ExitNodeId = ExitNodeId
self.FeatureId = FeatureId
self.MapVersion = MapVersion
class DiggingWorkArea(Base): class DiggingWorkArea(Base):
...@@ -407,8 +414,10 @@ class DiggingWorkArea(Base): ...@@ -407,8 +414,10 @@ class DiggingWorkArea(Base):
ExactorUuid = Column(VARCHAR(50)) ExactorUuid = Column(VARCHAR(50))
EntranceNodeId = Column(VARCHAR(50)) EntranceNodeId = Column(VARCHAR(50))
ExitNodeId = Column(VARCHAR(50)) ExitNodeId = Column(VARCHAR(50))
FeatureId = Column(VARCHAR(36))
MapVersion = Column(VARCHAR(36))
def __init__(self, Id, Name, Material, ExactorId, ExactorUuid, EntranceNodeId, ExitNodeId): def __init__(self, Id, Name, Material, ExactorId, ExactorUuid, EntranceNodeId, ExitNodeId, FeatureId, MapVersion):
self.Id = Id self.Id = Id
self.Name = Name self.Name = Name
self.Material = Material self.Material = Material
...@@ -416,6 +425,8 @@ class DiggingWorkArea(Base): ...@@ -416,6 +425,8 @@ class DiggingWorkArea(Base):
self.ExactorUuid = ExactorUuid self.ExactorUuid = ExactorUuid
self.EntranceNodeId = EntranceNodeId self.EntranceNodeId = EntranceNodeId
self.ExitNodeId = ExitNodeId self.ExitNodeId = ExitNodeId
self.FeatureId = FeatureId
self.MapVersion = MapVersion
class DispatchRule(Base): class DispatchRule(Base):
...@@ -540,4 +551,17 @@ class RecordTruckOutput(Base): ...@@ -540,4 +551,17 @@ class RecordTruckOutput(Base):
def __init__(self, id, unload_area_id, end_time ): def __init__(self, id, unload_area_id, end_time ):
self.id = id self.id = id
self.unload_area_id = unload_area_id self.unload_area_id = unload_area_id
self.end_time = end_time self.end_time = end_time
\ No newline at end of file
class Distribute_Library(Base):
__tablename__ = 'Geo_Distribute_Library'
Id = Column(VARCHAR(36), primary_key=True)
Version = Column(VARCHAR(36))
Status = Column(VARCHAR(10))
def __init__(self, Id, Version, Status):
self.Id = Id
self.Version = Version
self.Status = Status
...@@ -196,6 +196,8 @@ def truck_pass_first_area(truck_id, lane_id, closer_entrance_node_id, further_en ...@@ -196,6 +196,8 @@ def truck_pass_first_area(truck_id, lane_id, closer_entrance_node_id, further_en
def backtracking(root_node): def backtracking(root_node):
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
from collections import deque from collections import deque
que = deque([root_node]) que = deque([root_node])
...@@ -212,7 +214,7 @@ def truck_pass_first_area(truck_id, lane_id, closer_entrance_node_id, further_en ...@@ -212,7 +214,7 @@ def truck_pass_first_area(truck_id, lane_id, closer_entrance_node_id, further_en
if cur_node == further_entrance_node_id: if cur_node == further_entrance_node_id:
logger.info("further_entrance_node") logger.info("further_entrance_node")
return 1 return 1
for item in session_postgre.query(Lane).filter_by(StartNodeId=cur_node).all(): for item in session_postgre.query(Lane).filter_by(StartNodeId=cur_node, MapVersion=map_version).all():
if item: if item:
que.append(item.EndNodeId) que.append(item.EndNodeId)
...@@ -321,11 +323,13 @@ def get_lanes_between_entrances(closer_node_id, further_node_id): ...@@ -321,11 +323,13 @@ def get_lanes_between_entrances(closer_node_id, further_node_id):
:return: lane set :return: lane set
""" """
try: try:
map_version = session_postgre.query(Distribute_Library).filter_by(Status="1").first().Version
max_find_it = 100 max_find_it = 100
next_node_id = closer_node_id next_node_id = closer_node_id
lane_set = [] lane_set = []
while max_find_it > 0 and next_node_id != further_node_id: while max_find_it > 0 and next_node_id != further_node_id:
item = session_postgre.query(Lane).filter_by(StartNodeId=next_node_id, Type=2).first() item = session_postgre.query(Lane).filter_by(StartNodeId=next_node_id, Type=2, MapVersion=map_version).first()
if item: if item:
next_lane_id = item.Id next_lane_id = item.Id
next_node_id = item.EndNodeId next_node_id = item.EndNodeId
......
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