如何将基于边缘的模拟输出汇总到网格单元?

时间:2019-05-01 19:36:43

标签: sumo

我有一个网络,必须将其划分为正方形单元格的网格(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中之后,我必须聚合到单元格中并计算每个单元格中的平均流量:

    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)=总和(像元内部每个边的速度)/像元中边的数量。

我正在使用以下公式来计算每个单元格的流量:

单元格的平均流量(veh / s)=总(单元格内每个边缘的平均流量)/单元格内的边缘数量。

边缘的平均流量(veh / s)=边缘的密度(veh / Km)*边缘的速度(m / s)/ 1000。

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

1 个答案:

答案 0 :(得分:0)

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