提交重新打开优化转向比展示为0的情况,优化转向比缺少某个箭头的算法
This commit is contained in:
parent
3d7ce9b532
commit
bf084b353f
|
|
@ -763,7 +763,7 @@ def gen_flow_turn_rate_index(avg_cross_delay_info, roads_dir_dict):
|
|||
outroad = g_roadnet.query_road(outroadid)
|
||||
if not outroad:
|
||||
continue
|
||||
angle = g_roadnet.calc_road_turn_angle_without_abs(inroad_info, outroad)
|
||||
angle = g_roadnet.calc_road_turn_angle_without_abs_split(inroad_info, outroad)
|
||||
if abs(angle) <= 30:
|
||||
split_turns_set.add(0)
|
||||
elif abs(angle) >= 150:
|
||||
|
|
@ -774,12 +774,12 @@ def gen_flow_turn_rate_index(avg_cross_delay_info, roads_dir_dict):
|
|||
split_turns_set.add(1)
|
||||
car_num = road_delay_dict[roadid].delay_info.car_num
|
||||
in_flow_rate = round(car_num / cross_sum_car_num * 100, 1) if cross_sum_car_num != 0 else 0
|
||||
l_rate = round((road_delay_dict[roadid].delay_info.turn_ratio_1 + road_delay_dict[roadid].delay_info.turn_ratio_3) / car_num * 100) if car_num != 0 else 0
|
||||
l_rate = max(1, round((road_delay_dict[roadid].delay_info.turn_ratio_1 + road_delay_dict[roadid].delay_info.turn_ratio_3)) / car_num * 100) if car_num != 0 else 0
|
||||
# l_rate = max(1, round((road_delay_dict[roadid].delay_info.turn_ratio_1 + road_delay_dict[roadid].delay_info.turn_ratio_3) / car_num * 100)) if car_num != 0 else 0
|
||||
# s_rate = max(1, round(road_delay_dict[roadid].delay_info.turn_ratio_0 / car_num * 100)) if car_num != 0 else 0
|
||||
s_rate = round(road_delay_dict[roadid].delay_info.turn_ratio_0 / car_num * 100) if car_num != 0 else 0
|
||||
s_rate = max(1, round(road_delay_dict[roadid].delay_info.turn_ratio_0 / car_num * 100)) if car_num != 0 else 0
|
||||
# r_rate = max(1, round(road_delay_dict[roadid].delay_info.turn_ratio_2 / car_num * 100)) if car_num != 0 else 0
|
||||
r_rate = 100 - l_rate - s_rate
|
||||
r_rate = max(1, 100 - l_rate - s_rate)
|
||||
if 0 not in split_turns_set:
|
||||
s_rate = '-'
|
||||
if 1 not in split_turns_set:
|
||||
|
|
@ -789,8 +789,8 @@ def gen_flow_turn_rate_index(avg_cross_delay_info, roads_dir_dict):
|
|||
l_num = road_delay_dict[roadid].delay_info.turn_ratio_1
|
||||
s_num = road_delay_dict[roadid].delay_info.turn_ratio_0
|
||||
r_num = road_delay_dict[roadid].delay_info.turn_ratio_2
|
||||
# rate_list = fix_to_100(l_rate, s_rate, r_rate)
|
||||
# l_rate, s_rate, r_rate = rate_list[0] if rate_list[0] == '-' else int(rate_list[0]), rate_list[1] if rate_list[1] == '-' else int(rate_list[1]), rate_list[2] if rate_list[2] == '-' else int(rate_list[2])
|
||||
rate_list = fix_to_100(l_rate, s_rate, r_rate)
|
||||
l_rate, s_rate, r_rate = rate_list[0] if rate_list[0] == '-' else rate_list[0], rate_list[1] if rate_list[1] == '-' else rate_list[1], rate_list[2] if rate_list[2] == '-' else rate_list[2]
|
||||
out_road_id = roads_dir_dict[dir]['out']
|
||||
if out_road_id != '-' and out_road_id in outroad_info_dict.keys():
|
||||
out_road_info = g_roadnet.query_road(out_road_id)
|
||||
|
|
@ -799,7 +799,7 @@ def gen_flow_turn_rate_index(avg_cross_delay_info, roads_dir_dict):
|
|||
inroad = g_roadnet.query_road(inroadid)
|
||||
if not inroad:
|
||||
continue
|
||||
angle = g_roadnet.calc_road_turn_angle_without_abs(out_road_info, inroad)
|
||||
angle = g_roadnet.calc_road_turn_angle_without_abs_merge(out_road_info, inroad)
|
||||
if abs(angle) <= 30:
|
||||
merge_turns_set.add(0)
|
||||
elif abs(angle) >= 150:
|
||||
|
|
@ -811,11 +811,11 @@ def gen_flow_turn_rate_index(avg_cross_delay_info, roads_dir_dict):
|
|||
out_car_num = outroad_info_dict[out_road_id].turn_info.car_num
|
||||
out_flow_rate = round(out_car_num / cross_out_sum_car_num * 100, 1) if cross_out_sum_car_num != 0 else 0
|
||||
# out_l_rate = max(1, round(outroad_info_dict[out_road_id].turn_info.turn_ratio_1 / out_car_num * 100)) if out_car_num != 0 else 0
|
||||
out_l_rate = round(outroad_info_dict[out_road_id].turn_info.turn_ratio_1 / out_car_num * 100) if out_car_num != 0 else 0
|
||||
out_l_rate = max(1, round(outroad_info_dict[out_road_id].turn_info.turn_ratio_1 / out_car_num * 100)) if out_car_num != 0 else 0
|
||||
# out_s_rate = max(1, round(outroad_info_dict[out_road_id].turn_info.turn_ratio_0 / out_car_num * 100)) if out_car_num != 0 else 0
|
||||
out_s_rate = round(outroad_info_dict[out_road_id].turn_info.turn_ratio_0 / out_car_num * 100) if out_car_num != 0 else 0
|
||||
out_s_rate = max(1, round(outroad_info_dict[out_road_id].turn_info.turn_ratio_0 / out_car_num * 100)) if out_car_num != 0 else 0
|
||||
# out_r_rate = max(1, round(outroad_info_dict[out_road_id].turn_info.turn_ratio_2 / out_car_num * 100)) if out_car_num != 0 else 0
|
||||
out_r_rate = 100 - out_l_rate - out_s_rate
|
||||
out_r_rate = max(1, 100 - out_l_rate - out_s_rate)
|
||||
if 0 not in merge_turns_set:
|
||||
out_s_rate = '-'
|
||||
if 1 not in merge_turns_set:
|
||||
|
|
@ -823,8 +823,8 @@ def gen_flow_turn_rate_index(avg_cross_delay_info, roads_dir_dict):
|
|||
if 2 not in merge_turns_set:
|
||||
out_r_rate = '-'
|
||||
out_l_num, out_s_num, out_r_num = outroad_info_dict[out_road_id].turn_info.turn_ratio_1, outroad_info_dict[out_road_id].turn_info.turn_ratio_0, outroad_info_dict[out_road_id].turn_info.turn_ratio_2
|
||||
# rate_list = fix_to_100(out_l_rate, out_s_rate, out_r_rate)
|
||||
# out_l_rate, out_s_rate, out_r_rate = rate_list[0] if rate_list[0] == '-' else int(rate_list[0]), rate_list[1] if rate_list[1] == '-' else int(rate_list[1]), rate_list[2] if rate_list[2] == '-' else int(rate_list[2])
|
||||
rate_list = fix_to_100(out_l_rate, out_s_rate, out_r_rate)
|
||||
out_l_rate, out_s_rate, out_r_rate = rate_list[0] if rate_list[0] == '-' else rate_list[0], rate_list[1] if rate_list[1] == '-' else rate_list[1], rate_list[2] if rate_list[2] == '-' else rate_list[2]
|
||||
road_flow_turn_rate[roadid] = {
|
||||
'src_dir': dir,
|
||||
'in_flow_rate': in_flow_rate,
|
||||
|
|
@ -2277,7 +2277,7 @@ def _to_int_list(float_nums, mask):
|
|||
total = 0
|
||||
for i in valid_indices:
|
||||
val = float_nums[i]
|
||||
r = int(round(val))
|
||||
r = round(val)
|
||||
# 保证正数至少为1
|
||||
if r == 0 and val > 0:
|
||||
r = 1
|
||||
|
|
|
|||
|
|
@ -1504,7 +1504,7 @@ class RoadNet:
|
|||
turn_angle = abs(GeoFunc.radian2angle(GeoFunc.calc_turn_radian(pA, pB, pC, pD)))
|
||||
return turn_angle
|
||||
|
||||
def calc_road_turn_angle_without_abs(self, road_from: Road, road_to: Road):
|
||||
def calc_road_turn_angle_without_abs_split(self, road_from: Road, road_to: Road):
|
||||
# pt0 = self.query_cross(road_from.crossid_from).location
|
||||
# 第一个点,取一定距离的上游几何点
|
||||
pt0 = road_from.get_tail_up_pt()
|
||||
|
|
@ -1524,6 +1524,26 @@ class RoadNet:
|
|||
# print('%.6f,%.6f,%.6f,%.6f,%.6f,%.6f,%.6f,%.6f => %.2f' % (pA.X,pA.Y, pB.X,pB.Y, pC.X,pC.Y, pD.X,pD.Y, turn_angle))
|
||||
return turn_angle
|
||||
|
||||
def calc_road_turn_angle_without_abs_merge(self, road_from: Road, road_to: Road):
|
||||
# pt0 = self.query_cross(road_from.crossid_from).location
|
||||
# 第一个点,取一定距离的上游几何点
|
||||
pt0 = road_from.path[0]
|
||||
# pt1 = self.query_cross(road_from.crossid_to).location
|
||||
pt1 = road_from.path[-1]
|
||||
# pt2 = self.query_cross(road_to.crossid_from).location
|
||||
pt2 = road_to.path[-1]
|
||||
# 最后一个点,取一定距离的下游几何点
|
||||
pt3 = road_to.get_tail_up_pt()
|
||||
# pt3 = self.query_cross(road_to.crossid_to).location
|
||||
|
||||
pA = MyPoint.makeOne(pt0)
|
||||
pB = MyPoint.makeOne(pt1)
|
||||
pC = MyPoint.makeOne(pt2)
|
||||
pD = MyPoint.makeOne(pt3)
|
||||
turn_angle = GeoFunc.radian2angle(GeoFunc.calc_turn_radian(pA, pB, pC, pD))
|
||||
# print('%.6f,%.6f,%.6f,%.6f,%.6f,%.6f,%.6f,%.6f => %.2f' % (pA.X,pA.Y, pB.X,pB.Y, pC.X,pC.Y, pD.X,pD.Y, turn_angle))
|
||||
return turn_angle
|
||||
|
||||
def get_straight_road_pairs(self, crossid: str = None, consider_sideway = False):
|
||||
"""
|
||||
查询指定路口的属于直行关系的in-out路段ID pair
|
||||
|
|
|
|||
Loading…
Reference in New Issue