我有一个网络,必须将其划分为正方形单元格的网格(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中之后,我必须聚合到单元格中并计算每个单元格中的平均流量:
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。
我只想确保我使用的是写公式。
答案 0 :(得分:0)
要回答您是否做正确的事情并不容易,因为在时间和空间上进行平均总是很困难。此外,不清楚您要测量什么。交通量通常表示车辆的总数(或平均),并且按无单位(因此仅车辆数)进行测量。交通流量是按时间单位的车辆量度的,但通常仅应用于横截面而不是区域。如果您想要该单元格中的平均汽车数量,则应将sampleSeconds数量的总和除以间隔长度即可。第二个值需要更深入的讨论,但总结时我可能至少将它乘以边长。