sumo - 如何将基于边缘的模拟输出聚合到网格单元?
问题描述
我有一个必须分成方形单元格(200 X 200 m)的网络。每个单元格包括边缘的子段。
我已经生成了模拟数据输出并使用 sumolib 来提取基于边缘的输出。我必须计算以(车辆/秒)为单位测量的每个单元格(不是边缘)的平均交通量。
这是我编写的脚本的一部分:
提取基于边缘的密度和速度值:
for interval in sumolib.output.parse('cairo.edgeDataOutput.xml','interval'): for edge in interval.edge: edgeDataOutput[edge.id]= (edge.density,edge.speed)
将密度和速度保存到 edgeDataOutput 后,我必须聚合到单元格中并计算每个单元格中的 avg.traffic 量:
for cellID in ids: density=0 speed=0 n=0 #avg.traffic vol for edgeID in cell_edgeMap[cellID].keys(): if edgeID in edgeDataOutput.keys(): density+= float(edgeDataOutput[edgeID][1]) speed+= float(edgeDataOutput[edgeID][2]) n += (float(edgeDataOutput[edgeID][1])/1000) * float(edgeDataOutput[edgeID][2]) #traffic vol = (density/1000)*speed densities.append(int((density / len(cell_edgeMap[cellID].keys()))+0.5)) speeds.append(int((speed / len(cell_edgeMap[cellID].keys()))+0.5)) numOfVehicles.append(int(n/len(cell_edgeMap[cellID].keys())))
正如您从代码中看到的那样,我将单元格中每条边的密度、速度值相加,然后除以单元格内的边数以获得平均值。
细胞密度(veh/Km)=总和(细胞内每个边缘的密度)/细胞内边缘的数量。
单元格处的速度(m/s)= sum(单元格内每个边缘的速度)/单元格中的边缘数。
我正在使用以下公式来计算每个单元格的交通量:
单元格的平均流量(veh/s)= 总和(单元格内每个边缘的平均流量)/单元格内的边缘数。
边缘的平均交通量(veh/s)= 边缘的密度(veh/Km)* 边缘的速度(m/s)/ 1000。
我只是想确保我使用的是写公式。
解决方案
回答你是否做正确的事情并不容易,因为在时间和空间上取平均值总是很困难的。此外,尚不清楚您要测量什么。交通量通常表示车辆的总(或平均)数量,并且没有单位(因此只有车辆数量)来衡量。交通流量以每时间单位的车辆数来衡量,但通常仅适用于横截面而不适用于区域。如果您想要单元格中的平均汽车数量,只需将 sampleSeconds 数量的总和除以间隔长度即可。第二个值需要更深入的讨论,但总结时我可能至少会将它乘以边缘长度。
推荐阅读
- c - 编译时未解析的外部符号“for_realloc_lhs”
- r - 在绘图上指示事件
- android - 音乐播放器应用程序未显示在“打开方式”部分
- html - Tumblr 模板有结束 {/block:Regular},但没有开始标签
- python - 我可以从 for 循环中的列表中更改输入消息吗
- excel - 快速打开文件夹中所有文件、刷新所有文件、另存为所有文件的方法
- vb.net - 如何在数据网格视图中添加到期日期
- python - 使用python将特定行从一个csv复制到另一个
- delphi - 如何正确关闭 idHTTPServer 以避免请求线程的内存泄漏?
- php - PHP MySQL 使用 COUNT 和 WHERE