基于OSMnx计算城市道路网络最大通行容量的技术咨询
利雅得道路网络最大通行容量计算问题解答
1. 车道数数组格式的含义
[3,2]这类数组格式的车道数,代表道路双向车道数量不相等:数组第一个数值是当前有向边(从节点u到节点v方向)的车道数,第二个数值是反向边(从节点v到节点u方向)的车道数。这是OSM数据用来记录双向车道数差异的方式,比如进城方向3车道、出城方向2车道的道路,就会被标记为[3,2]。
2. 实现公式计算的步骤
要完成公式Σ(Lₛ/Lᵥ)*Nₗ的计算,需要先统一车道数的格式,再逐段计算后求和,具体代码如下:
步骤1:处理车道数字段
先把lanes列中的列表格式值转换为当前方向的车道数:
def parse_lanes(lanes_val): if isinstance(lanes_val, list): # 提取当前有向边的车道数(列表第一个元素) return int(lanes_val[0]) else: # 单个数值直接转为整数 return int(lanes_val) # 生成处理后的车道数列 edges['lanes_parsed'] = edges['lanes'].apply(parse_lanes)
步骤2:计算总容量
定义平均车辆占用长度(示例取6米,可根据实际场景调整),然后逐段计算容量并求和:
# 平均车辆占用长度(单位:米) Lv = 6 # 计算每条道路段的容量 edges['segment_capacity'] = (edges['length'] / Lv) * edges['lanes_parsed'] # 求和得到总容量 total_capacity = edges['segment_capacity'].sum() print(f"利雅得道路网络最大同时容纳车辆数:{round(total_capacity)}")
补充说明
- OSMnx导出的
edges是有向边集合,双向道路会拆分为两条相反方向的边,因此上述计算已经覆盖了所有方向的车道容量。 - 若需要验证车道数处理是否正确,可以用
edges['lanes_parsed'].value_counts()查看处理后的车道数分布。
内容的提问来源于stack exchange,提问作者NGM
相关产品推荐
相关产品推荐

