修复路口运行评测页面分流转向比在丁字路口或缺少某个进口道分支时的计算逻辑异常

This commit is contained in:
wangxu 2026-03-25 16:27:49 +08:00
parent 2d9dccad50
commit 8a326e7a58
1 changed files with 29 additions and 29 deletions

View File

@ -748,22 +748,22 @@ def gen_flow_turn_rate_index(avg_cross_delay_info, roads_dir_dict):
inroadid_list = [roads_dir_dict[k]['in'] for k in roads_dir_dict.keys()] inroadid_list = [roads_dir_dict[k]['in'] for k in roads_dir_dict.keys()]
outroadid_list = [roads_dir_dict[k]['out'] for k in roads_dir_dict.keys()] outroadid_list = [roads_dir_dict[k]['out'] for k in roads_dir_dict.keys()]
for dir in roads_dir_dict.keys(): for dir in roads_dir_dict.keys():
out_road_id = roads_dir_dict[dir]['out'] roadid = roads_dir_dict[dir]['in']
if 'udr_' in out_road_id: if 'udr_' in roadid:
continue continue
l_rate, s_rate, r_rate = 0, 0, 0 l_rate, s_rate, r_rate = 0, 0, 0
out_l_rate, out_s_rate, out_r_rate = 0, 0, 0 out_l_rate, out_s_rate, out_r_rate = 0, 0, 0
in_flow_rate, out_flow_rate = 0, 0 in_flow_rate, out_flow_rate = 0, 0
l_num, s_num, r_num = 0, 0, 0 l_num, s_num, r_num = 0, 0, 0
out_l_num, out_s_num, out_r_num = 0, 0, 0 out_l_num, out_s_num, out_r_num = 0, 0, 0
if out_road_id != '-' and out_road_id in outroad_info_dict.keys(): if roadid != '-' and roadid in road_delay_dict.keys():
out_road_info = g_roadnet.query_road(out_road_id) inroad_info = g_roadnet.query_road(roadid)
split_turns_set = set() split_turns_set = set()
for inroadid in inroadid_list: for outroadid in outroadid_list:
inroad = g_roadnet.query_road(inroadid) outroad = g_roadnet.query_road(outroadid)
if not inroad: if not outroad:
continue continue
angle = g_roadnet.calc_road_turn_angle_without_abs(out_road_info, inroad) angle = g_roadnet.calc_road_turn_angle_without_abs(inroad_info, outroad)
if abs(angle) <= 30: if abs(angle) <= 30:
split_turns_set.add(0) split_turns_set.add(0)
elif abs(angle) >= 150: elif abs(angle) >= 150:
@ -772,51 +772,51 @@ def gen_flow_turn_rate_index(avg_cross_delay_info, roads_dir_dict):
split_turns_set.add(2) split_turns_set.add(2)
else: else:
split_turns_set.add(1) split_turns_set.add(1)
car_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 car_num = road_delay_dict[roadid].delay_info.turn_ratio_1 + road_delay_dict[roadid].delay_info.turn_ratio_0 + road_delay_dict[roadid].delay_info.turn_ratio_2
in_flow_rate = int(car_num / cross_sum_car_num * 100) if cross_out_sum_car_num != 0 else 0 in_flow_rate = int(car_num / cross_sum_car_num * 100) if cross_out_sum_car_num != 0 else 0
l_rate = max(1, round(outroad_info_dict[out_road_id].turn_info.turn_ratio_1 / car_num * 100)) if car_num != 0 else 0 l_rate = max(1, round(road_delay_dict[roadid].delay_info.turn_ratio_1 / car_num * 100)) if car_num != 0 else 0
s_rate = max(1, round(outroad_info_dict[out_road_id].turn_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(outroad_info_dict[out_road_id].turn_info.turn_ratio_2 / 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
if 0 not in split_turns_set: if 0 not in split_turns_set:
s_rate = '-' s_rate = '-'
if 1 not in split_turns_set: if 1 not in split_turns_set:
l_rate = '-' l_rate = '-'
if 2 not in split_turns_set: if 2 not in split_turns_set:
r_rate = '-' r_rate = '-'
l_num = outroad_info_dict[out_road_id].turn_info.turn_ratio_1 l_num = road_delay_dict[roadid].delay_info.turn_ratio_1
s_num = outroad_info_dict[out_road_id].turn_info.turn_ratio_0 s_num = road_delay_dict[roadid].delay_info.turn_ratio_0
r_num = outroad_info_dict[out_road_id].turn_info.turn_ratio_2 r_num = road_delay_dict[roadid].delay_info.turn_ratio_2
rate_list = fix_to_100(l_rate, s_rate, r_rate) 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]) 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])
roadid = roads_dir_dict[dir]['in'] out_road_id = roads_dir_dict[dir]['out']
if roadid != '-' and roadid in road_delay_dict.keys(): if out_road_id != '-' and out_road_id in outroad_info_dict.keys():
inroad_info = g_roadnet.query_road(roadid) out_road_info = g_roadnet.query_road(out_road_id)
merge_turns_set = set() merge_turns_set = set()
for outroadid in outroadid_list: for inroadid in inroadid_list:
outroad = g_roadnet.query_road(outroadid) inroad = g_roadnet.query_road(inroadid)
if not outroad: if not inroad:
continue continue
angle = g_roadnet.calc_road_turn_angle_without_abs(inroad_info, outroad) angle = g_roadnet.calc_road_turn_angle_without_abs(out_road_info, inroad)
if abs(angle) <= 30: if abs(angle) <= 30:
merge_turns_set.add(0) merge_turns_set.add(0)
elif abs(angle) >= 150: elif abs(angle) >= 150:
merge_turns_set.add(3) merge_turns_set.add(3)
elif angle > 0: elif angle > 0:
merge_turns_set.add(2)
else:
merge_turns_set.add(1) merge_turns_set.add(1)
out_car_num = road_delay_dict[roadid].delay_info.car_num else:
merge_turns_set.add(2)
out_car_num = outroad_info_dict[out_road_id].turn_info.car_num
out_flow_rate = int(out_car_num / cross_out_sum_car_num * 100) if cross_out_sum_car_num != 0 else 0 out_flow_rate = int(out_car_num / cross_out_sum_car_num * 100) if cross_out_sum_car_num != 0 else 0
out_l_rate = max(1, round(road_delay_dict[roadid].delay_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(road_delay_dict[roadid].delay_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(road_delay_dict[roadid].delay_info.turn_ratio_2 / 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
if 0 not in merge_turns_set: if 0 not in merge_turns_set:
out_s_rate = '-' out_s_rate = '-'
if 1 not in merge_turns_set: if 1 not in merge_turns_set:
out_l_rate = '-' out_l_rate = '-'
if 2 not in merge_turns_set: if 2 not in merge_turns_set:
out_r_rate = '-' out_r_rate = '-'
out_l_num, out_s_num, out_r_num = road_delay_dict[roadid].delay_info.turn_ratio_1, road_delay_dict[roadid].delay_info.turn_ratio_0, road_delay_dict[roadid].delay_info.turn_ratio_2 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) 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]) 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])
road_flow_turn_rate[roadid] = { road_flow_turn_rate[roadid] = {