Bing API 密钥的宏计算不正确:从 36088 到 10117 的距离正确,但反向计算不正确

问题描述 投票:0回答:1

我的宏使用 Bing API 密钥来计算邮政编码 36088 和 10117 之间的距离时遇到问题。从 36088 到 10117(436.809 公里)的计算是正确的,但从 10117 到 36088(43.466 公里)的反向距离) 是不正确的。我已经彻底研究过,但没有找到解决方案或错误。 (PS:这些是德国邮政编码)。我只有邮政编码 36088 的问题。enter image description here (https://i.stack.imgur.com/SXX3R.jpg)

我需要帮助,请。




公共函数 GetDistance(start As String, dest As String) As String 将 myKey 调暗为字符串:myKey = "APIKEY BING" Dim objHTTP 作为对象 Dim 正则表达式作为对象 暗淡匹配作为对象 暗淡坐标 1 作为字符串 暗淡坐标2作为字符串 暗淡距离为双倍 将结果调暗为字符串

' Erstellen einer HTTP-Anforderung
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")

' Abrufen der Koordinaten für den Startpunkt
objHTTP.Open "GET", "http://dev.virtualearth.net/REST/v1/Locations?q=" & start & "&key=" & myKey, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

' Überprüfen, ob die Antwort gültig ist
If InStr(objHTTP.responseText, "coordinates") = 0 Then GoTo ErrorHandl

' Extrahieren der Koordinaten aus der Antwort
Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = "(?=.*)\[([0-9]+.[0-9]+,[0-9]+.[0-9]+)\]": regex.Global = False
Set matches = regex.Execute(objHTTP.responseText)
coordinates1 = matches(0).SubMatches(0)

' Abrufen der Koordinaten für das Ziel
objHTTP.Open "GET", "http://dev.virtualearth.net/REST/v1/Locations?q=" & dest & "&key=" & myKey, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

' Überprüfen, ob die Antwort gültig ist
If InStr(objHTTP.responseText, "coordinates") = 0 Then GoTo ErrorHandl

' Extrahieren der Koordinaten aus der Antwort
Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = "(?=.*)\[([0-9]+.[0-9]+,[0-9]+.[0-9]+)\]": regex.Global = False
Set matches = regex.Execute(objHTTP.responseText)
coordinates2 = matches(0).SubMatches(0)

' Abrufen der Entfernung zwischen den beiden Koordinaten
objHTTP.Open "GET", "https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix?origins=" & coordinates1 & "&destinations=" & coordinates2 & "&travelMode=driving&distanceUnit=km&output=json&key=" & myKey, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

' Überprüfen, ob die Antwort gültig ist
If InStr(objHTTP.responseText, "travelDistance") = 0 Then GoTo ErrorHandl

' Extrahieren der Entfernung aus der Antwort und Runden auf drei Dezimalstellen
Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = "([0-9]+\.[0-9]+)": regex.Global = True
Set matches = regex.Execute(objHTTP.responseText)
distance = CDbl(matches(4)) / 1000 'nachkommerstellen

' Konvertieren der Entfernung in einen String mit der Einheit "Km"
'result = Format(distance, "0.00") & " Km"

' Rückgabe des Ergebnisses
GetDistance = distance
Exit Function

错误处理: ' Anzeigen einer Fehlermeldung, wenn ein Fehler auftritt MsgBox(objHTTP.responseText),vbCritical,“错误” GetDistance =“费勒” 结束功能

excel calculator distance bing-api getdistance
1个回答
0
投票

我的代码:

公共函数 GetDistance(start As String, dest As String) As String 将 myKey 调暗为字符串: myKey = "HEREAPIKEY" Dim objHTTP 作为对象 昏暗的正则表达式作为对象 暗淡匹配作为对象 暗淡坐标 1 作为字符串 暗淡坐标2作为字符串 暗淡距离为双倍 将结果调暗为字符串

' Erstellen einer HTTP-Anforderung
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")

' Abrufen der Koordinaten für den Startpunkt
objHTTP.Open "GET", "http://dev.virtualearth.net/REST/v1/Locations?q=" & start & "&key=" & myKey, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

' Überprüfen, ob die Antwort gültig ist
If InStr(objHTTP.responseText, "coordinates") = 0 Then GoTo ErrorHandl

' Extrahieren der Koordinaten aus der Antwort
Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = "(?=.*)\[([0-9]+.[0-9]+,[0-9]+.[0-9]+)\]": regex.Global = False
Set matches = regex.Execute(objHTTP.responseText)
coordinates1 = matches(0).SubMatches(0)

' Abrufen der Koordinaten für das Ziel
objHTTP.Open "GET", "http://dev.virtualearth.net/REST/v1/Locations?q=" & dest & "&key=" & myKey, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

' Überprüfen, ob die Antwort gültig ist
If InStr(objHTTP.responseText, "coordinates") = 0 Then GoTo ErrorHandl

' Extrahieren der Koordinaten aus der Antwort
Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = "(?=.*)\[([0-9]+.[0-9]+,[0-9]+.[0-9]+)\]": regex.Global = False
Set matches = regex.Execute(objHTTP.responseText)
coordinates2 = matches(0).SubMatches(0)

' Abrufen der Entfernung zwischen den beiden Koordinaten
objHTTP.Open "GET", "https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix?origins=" & coordinates1 & "&destinations=" & coordinates2 & "&travelMode=driving&distanceUnit=km&output=json&key=" & myKey, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

' Überprüfen, ob die Antwort gültig ist
If InStr(objHTTP.responseText, "travelDistance") = 0 Then GoTo ErrorHandl

' Extrahieren der Entfernung aus der Antwort und Runden auf drei Dezimalstellen
Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = "([0-9]+\.[0-9]+)": regex.Global = True
Set matches = regex.Execute(objHTTP.responseText)
distance = CDbl(matches(4)) / 1000 'nachkommerstellen

' Konvertieren der Entfernung in einen String mit der Einheit "Km"
'result = Format(distance, "0.00") & " Km"

' Rückgabe des Ergebnisses
GetDistance = distance
Exit Function

错误处理: ' Anzeigen einer Fehlermeldung, wenn ein Fehler auftritt MsgBox(objHTTP.responseText),vbCritical,“错误” GetDistance =“费勒” 结束功能

© www.soinside.com 2019 - 2024. All rights reserved.