使用Google Maps API在Excel中查找两个城市之间的距离

时间:2009-10-18 01:14:39

标签: excel api google-maps

我想要一张以下表格的表格:

Point A         Point B           Mileage
Los Angeles     Miami             292100
Palo Alto       San Francisco     90

我希望使用谷歌地图或其他一些地理API来动态地根据输入城市生成里程。关于如何做到这一点的任何想法?

更新看起来我可以使用getDistance()中的GDirections功能。我可以毫不费力地编写JavaScript,但是如何将它合并到Excel中呢?

我可以将JS放在一个带有查询字符串的html文件中,并返回路径的距离。然后,我可以设置Excel以使用该连接。或者这是一项过多的工作?以前没有做过这样的事情吗?

2 个答案:

答案 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地图上显示以外的目的。