这只是理论上的,但也许可以使用距离矩阵API提取这些数据的方法。
方法:
1)建立一个拓扑路网,包括节点和边,类似于以下内容:
每条边都有四个属性:
[EDGE_NUMBER;EDGE_SPEED;EDGE_TIME,EDGE_LENGTH]
您可以使用OpenStreetMap数据创建此网络。
一开始,每条边的道路速度相同,例如50km/h。
您只需要使用drivelink并删除其他边缘。还要考虑到某些道路是单向的。
2)
随机选择两个节点,它们之间的距离不小于5或10km。
使用Dijkstra最短路径算法计算这两个节点之间的最短路径(成本= 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
。
将新计算出的速度分配给每个边缘。
迭代步骤2,直到计算出的速度开始收敛。
注:我不确定计算出的速度是否会收敛,如果有时间,测试一下这种方法会很有趣。距离矩阵API提供的旅行时间精度不超过1分钟,因此节点对之间的距离至少需要为5或10公里或更多。此外,此方法未遵守Google的服务条款。