我想要一张以下表格的表格:
Point A Point B Mileage
Los Angeles Miami 292100
Palo Alto San Francisco 90
我希望使用谷歌地图或其他一些地理API来动态地根据输入城市生成里程。关于如何做到这一点的任何想法?
更新看起来我可以使用getDistance()
中的GDirections
功能。我可以毫不费力地编写JavaScript,但是如何将它合并到Excel中呢?
我可以将JS放在一个带有查询字符串的html文件中,并返回路径的距离。然后,我可以设置Excel以使用该连接。或者这是一项过多的工作?以前没有做过这样的事情吗?
答案 0 :(得分:1)
因此,您可以使用Google的API获取每个点的经度和纬度(可能在您的情况下,您只需要在这些城市中的任何点)。然后你可以使用Halversine距离公式:
http://en.wikipedia.org/wiki/Haversine_formula
对于VBA,我在我的库中有这个功能,我从某处获得。乍一看,它看起来是正确的,它以公里为单位产生距离(为了您的目的,只需将其转换为英里数)。
Public Function HaversineDistance(ByVal Lat1 As Double, _
ByVal Lat2 As Double, _
ByVal Long1 As Double, _
ByVal Long2 As Double) As Double
Const R As Integer = 6371 'earth radius in km
Dim DeltaLat As Double, DeltaLong As Double
Dim a As Double, c As Double
Dim Pi As Double
On Error GoTo ErrorExit
Pi = 4 * Atn(1)
'convert Lat1, Lat2, Long1, Long2 from decimal degrees into radians
Lat1 = Lat1 * Pi / 180
Lat2 = Lat2 * Pi / 180
Long1 = Long1 * Pi / 180
Long2 = Long2 * Pi / 180
'calculate change in Latitude and Longitude
DeltaLat = Abs(Lat2 - Lat1)
DeltaLong = Abs(Long2 - Long1)
a = ((Sin(DeltaLat / 2)) ^ 2) + (Cos(Lat1) * Cos(Lat2) * ((Sin(DeltaLong / 2)) ^ 2))
'c = 2 * Application.WorksheetFunction.Atan2(Sqr(a), Sqr(1 - a)) 'expressed as radians
c = 2 * Application.WorksheetFunction.Atan((Sqr(1 - a)) / (Sqr(a)))
HaversineDistance = R * c
ErrorExit:
End Function
(请注意其他评论者,我没有兴趣听说这种准确性如何不必要,所以请不要打扰告诉我!)
答案 1 :(得分:1)
Google目前仅通过客户端API(Javascript和Flash)提供对驾驶距离的合法访问权限。即使他们已经开始实施Issue 235: Get driving directions via HTTP ,仍然会违反谷歌Terms(第10.12段)将数据用于Google地图上显示以外的目的。