2016-01-17 3 views
0

В Excel, я использую VB для вычисления расстояния в милях между двумя точками. Когда я это делаю, я не могу получить расстояние от нескольких маршрутов между двумя точками. Когда я называю функцию GetDistance («Алабама», «Грузия»), она дает расстояние для одного маршрута из Алабамы и Грузии, и, очевидно, на Картах Google их несколько маршрутов из пункта А в пункт B с разным расстоянием. Когда я использовал MsgBox objHTTP.responseText для отображения всех расстояний маршрутов, он показывает только одно расстояние по маршруту, как показано на скриншоте. Как я могу отобразить все расстояния маршрутов в милях?Google Maps API Расстояние между двумя точками Возврат разных маршрутов

objHTTP.responceText screenshot

'Calculate Google Maps distance between two addresses 
Public Function GetDistance(start As String, dest As String, unit As Integer) 
    Dim firstVal As String, secondVal As String, lastVal As String 
    firstVal = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=" 
    secondVal = "&destinations=" 
    lastVal = "&mode=car&language=pl&sensor=true&units=Imperical" 


    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
    URL = firstVal & Replace(start, " ", "+") & secondVal & Replace(dest, " ", "+") & lastVal 
    objHTTP.Open "GET", URL, False 
    objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
    objHTTP.send ("") 
    MsgBox objHTTP.responseText 

    If InStr(objHTTP.responseText, """distance"" : {") = 0 Then GoTo ErrorHandl 
    Set regex = CreateObject("VBScript.RegExp") 
    regex.Pattern = """text"".*?([0-9]+)" 
    regex.Global = False 
    Set matches = regex.Execute(objHTTP.responseText) 


    tmpVal = Replace(matches(0).SubMatches(0), ".", Application.International(xlListSeparator)) 

    GetDistance = CDbl(tmpVal)/1.609344 
    Exit Function 
ErrorHandl: 
    GetDistance = -1 
End Function 

Sub PrintValue(str As String) 

Range("B1") = str 
End Sub 

ответ

2

DistanceMatrix обеспечивает только одно расстояние. Если вам нужно расстояние нескольких маршрутов между двумя одинаковыми точками, используйте DistanceService с параметром alternatives=true:

От the documentation:

альтернативы - Если установлено значение истинно, указывает, что служба может обеспечить более чем одну альтернативу маршрута в ответе. Обратите внимание, что предоставление альтернативных маршрутов может увеличить время отклика с сервера.

+0

Я изменил код lastVal = «& режим = автомобиль и язык = еп и датчик = истинные и единицы = Imperical альтернатив = True» и когда я MsgBox objHTTP.responseText это еще не показывает множественные расстояния в выходе –