Stata中的Google距离矩阵

时间:2013-12-13 23:28:03

标签: google-maps stata

我在Stata中使用 traveltime 指令(连同地理编码),通过使用Google距离矩阵,它计算两者之间的距离和行程时间点(出发地和目的地)。我对代码没有任何问题,一切都很完美,但问题是我无法弄清楚这个程序是否考虑了地球的曲率(例如,使用Haversine公式发生)。你能帮我理解使用什么类型的配方吗?我还想,通过这个指令,我们认为一条路径实际上是可行的而不仅仅是理论上的(例如山,海的存在......),这是真的吗? 在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

traveltime3(以及与之前版本的Google API一起使用的所有祖先)使用谷歌猜测某个可行路线上的最佳驾驶/步行/自行车距离。最好的含义是pretty fuzzy

  

确定哪条路线“最佳”涉及平衡竞争因素:   距离,旅行时间,转弯次数等等。我们煮沸了所有   这些因素降低到与每个候选路线相关的“成本”   并显示“成本最低”的路线。

自行车方向似乎调整为高度in picking the route(尽管这并不意味着距离已经调整)。在another blog post中,当他们解释他们如何选择最佳路线时,他们会链接到Dijkstra's Algorithm的Wiki条目。因此,考虑到来自各种来源(例如手机)的一些地图,历史和实时数据,他们的算法使用黑盒方法选择最佳路线。

您还可以计算地球数学模型表面上两点之间最短曲线的长度。似乎有两种型号在使用中。 Haversine公式计算两点之间的近似大圆距离,这是地球表面上的最短距离。这给出了点之间的“如同懒惰的苍蝇”距离(忽略了在途中越过任何山脉或峡谷并假设地球是球体所需的距离)。另一种方法是使用Vincenty方程(这是一个较慢的迭代过程,但仍假设离开地形)。这两种方法都可以在stata中使用来自ssc的geodist(它有一个很好的帮助文件和引用)。 据我所知,没有办法将这两种方法应用于实际的物理路径来调整曲率。

这是一个计算从加利福尼亚州费尔顿的大脚探索博物馆到大学城Stata Corp总部的距离的例子:

clear
set obs 1
gen to = "5497+State+Route+9,+Felton,+CA+95018"
gen from = "4905+Lakeway+Drive+College+Station,+Texas+77845"
traveltime3, start(from) end(to) units(imperial)
list t_distance, clean noobs
geocode3, address(to) fulladdress 
rename (g_lon g_lat) (lon1 lat1)
drop g_*
geocode3, address(from) fulladdress 
rename (g_lon g_lat) (lon2 lat2)
drop g_*
geodist lat1 lon1 lat2 lon2, miles gen(distance_h) sphere
geodist lat1 lon1 lat2 lon2, miles gen(distance_v)
list distance*, clean noobs

正如您在运行代码时所看到的那样,行程距离(沿10号州际公路)约为1,838英里,您可以使用Google Maps验证。 Haversine距离要短得多1,544英里,Vincenty也距离1,546英里。在您输入traveltime3后获得的拉特和门槛后,您可以验证Stata是否正确进行数学运算并查看该路线的地图herehere。对于大多数用途,Haversine近似是足够的(更多关于最后两个链接)。