首页 > 解决方案 > 如何将基于边缘的模拟输出聚合到网格单元?

问题描述

我有一个必须分成方形单元格(200 X 200 m)的网络。每个单元格包括边缘的子段。

我已经生成了模拟数据输出并使用 sumolib 来提取基于边缘的输出。我必须计算以(车辆/秒)为单位测量的每个单元格(不是边缘)的平均交通量。

这是我编写的脚本的一部分:

  1. 提取基于边缘的密度和速度值:

     for interval in sumolib.output.parse('cairo.edgeDataOutput.xml','interval'):
         for edge in interval.edge:
             edgeDataOutput[edge.id]= (edge.density,edge.speed)
    
  2. 将密度和速度保存到 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。

我只是想确保我使用的是写公式。

标签: sumo

解决方案


回答你是否做正确的事情并不容易,因为在时间和空间上取平均值总是很困难的。此外,尚不清楚您要测量什么。交通量通常表示车辆的总(或平均)数量,并且没有单位(因此只有车辆数量)来衡量。交通流量以每时间单位的车辆数来衡量,但通常仅适用于横截面而不适用于区域。如果您想要单元格中的平均汽车数量,只需将 sampleSeconds 数量的总和除以间隔长度即可。第二个值需要更深入的讨论,但总结时我可能至少会将它乘以边缘长度。


推荐阅读