我正在尝试获取特定位置的当前交通状况。提到的GTrafficOverlay
对象here仅在现有地图上提供叠加效果。
有谁知道如何使用他们的API从Google获取此数据?
答案 0 :(得分:0)
答案 1 :(得分:0)
这仅仅是理论上的,但是也许有一种使用distancematrix api提取那些数据的方法。
方法
1)
创建一个具有节点和边的拓扑路网,如下所示:
每个边缘将具有四个属性:[EDGE_NUMBER;EDGE_SPEED;EDGE_TIME,EDGE_LENGTH]
您可以使用openstreetmap数据创建此网络。
在开始时,每个边缘将具有相同的道路速度,例如50km / h。
您只需要使用drivelink并删除其他边缘。还应考虑到有些道路是单向的。
2)
随机选择两个距离不超过5公里或10公里的节点
使用dijsktra最短路径算法来计算这两个节点之间的最短路径(成本= EDGE_TIME)。使用您的拓扑网络来做到这一点。输出将如下所示:
NODE = [NODE_23,NODE_44] PATH = [EDGE_3,EDGE_130,EDGE_49,EDGE_39]
使用距离矩阵api计算在两个节点之间行驶所需的时间。
预分配大小为N X number_of_edge
且填充零值的矩阵A
预分配大小为1 X number_of_edge
并填充零值的矩阵B
在矩阵A的第一行中,如果相应的边缘在路径中,则用边缘的长度填充每一列(与每个边缘相对应)。
[col_1,col_2,col_3,...,col_39,...,col_49,...,col_130]
[0, 0, len_3,...,len_39,...,len_49,...,len_130] %row 1
在矩阵B的第一行中,输入用距离矩阵api计算的时间。
然后选择第一个路径中未使用的两个新闻节点,并重复操作,直到没有节点为止。 (因此您将填充第2行,第3行...)
现在您可以求解线性方程组:Ax = B
其中speed = 1/x
将新计算出的速度分配给每个边。
3)
迭代点 2),直到您计算出的速度开始收敛。
评论
我不确定计算出的速度是否会收敛,测试该方法会很有趣。如果有时间,我会尝试这样做。 距离矩阵API没有提供比1分钟更精确的行进时间,这就是为什么一对节点之间的距离至少应为5或10或更大的原因。 同样,此方法不遵守Google的服务条款。