Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

OpenRouteService Direction API über VBA nutzen

Forumthread: OpenRouteService Direction API über VBA nutzen

OpenRouteService Direction API über VBA nutzen
03.11.2023 13:56:54
Hoecker
Hallo zusammen,

Ich möchte die Distanz zwischen zwei Koordinaten (lat,lon) per OpenRouteService automatisch berechnen lassen. Dafür habe ich einen VBA Code gebastelt. Wenn ich diesen ausführe bekommt meine Request auch den Status 200, sprich es gibt eine erfolgreiche Antwort.

Wenn es aber jetzt daran geht, das Ganze per JsonConverter umzumünzen und auszulösen, bekomme ich ständig einen Laufzeitfehler "438: Objekt unterstützt diese Eigenschaft oder Methode nicht" in der JsonConverter Zeile. Vielleicht hat ja jemand eine Idee.

Darüber hinaus weiß ich jetzt nicht so ganz, wie ich am besten die Distanz aus der Json Antwort auslese.

Wenn sonst noch etwas benötigt wird, gerne eben melden.

Hier der bisherige VBA Code:

Sub GetTruckDistance()

Dim request As Object
Set request = CreateObject("MSXML2.ServerXMLHTTP.3.0")

Dim url As String
url = "https://api.openrouteservice.org/v2/directions/driving-car/json"

' Setzen der HTTP-Methode und Header
request.Open "POST", url, False
request.SetRequestHeader "Accept", "application/json, application/geo+json, application/gpx+xml, img/png; charset=utf-8"
request.SetRequestHeader "Authorization", "5b3ce3597851110001cf6248f4f6116a3fc647398202a91d7f11a224"
request.SetRequestHeader "Content-Type", "application/json; charset=utf-8"

' JSON-Daten für den POST-Request
Dim jsonData As String
jsonData = "{""coordinates"":[[8.681495,49.41461],[8.686507,49.41943]]}"

' Senden des POST-Requests
request.Send jsonData

' Verarbeiten der Antwort
Dim Distance As String
Dim response As Object
If request.Status = 200 Then ' Erfolgreiche Antwort (Statuscode 200)

MsgBox "Success!"
responseContent = request.ResponseText

' Hier können Sie responseContent weiter verarbeiten
Set response = JsonConverter.ParseJson(request.responseContent)

'Datenzugriff



Else
' Fehler beim Anfordern der Daten (Statuscode ist nicht 200)
MsgBox "Fehler beim Abrufen der Daten. Statuscode: " & request.Status
End If


End Sub


Und hier der Aufbau der Json Antwort von der API:

   -   {     

+ "bbox" : [ /* 4 items */ ] ,
+ "metadata" : { /* 5 items */ } ,
- "routes" : [
- {
- "summary" : {
"distance" : 1372.6 ,
"duration" : 292.79999999999995
} ,
+ "segments" : [ /* 2 items */ ] ,
+ "bbox" : [ /* 4 items */ ] ,
"geometry" : "ghrlHir~s@?BIC{ELgDo@aBa@}@I?sB?k@BwD?_JgAJgHt@I@]iHC?B?KuB]oFASg@wImAt@y@f@d@bJ" ,
+ "way_points" : [ /* 3 items */ ] ,
+ "legs" : [ /* no items */ ]
}
]
}
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: OpenRouteService Direction API über VBA nutzen
03.11.2023 14:13:57
Thomas
Schon mal ChatGPT befragt? ;o)
Hier die Antwort. Ob es hilft... musst du selbst probieren!

Dieser Fehler tritt wahrscheinlich auf, weil die Methode "ParseJson" nicht ordnungsgemäß aufgerufen wird.
Es gibt zwei Hauptprobleme in Ihrem Code:
1. Sie haben die Variable "responseContent" nicht deklariert. Sie sollten sie zuvor deklarieren, um sicherzustellen, dass sie vom richtigen Typ ist. Fügen Sie dies am Anfang Ihres Codes hinzu:
Dim responseContent As String


2. Die Methode "ParseJson" sollte auf der Variable "responseContent" aufgerufen werden, nicht auf "request.responseContent". Ändern Sie die betreffende Zeile wie folgt:
Set response = JsonConverter.ParseJson(responseContent)
Anzeige
AW: OpenRouteService Direction API über VBA nutzen
03.11.2023 14:56:34
Hoecker
Hey Thomas, danke für die Antwort. Da hätte ich auch selbst drauf kommen können. ChatGPT hat mir soeben beide Probleme gelöst. DANKE!
;
Anzeige

Infobox / Tutorial

OpenRouteService Direction API mit VBA nutzen


Schritt-für-Schritt-Anleitung

Um die Entfernung zwischen Koordinaten zu berechnen und die OpenRouteService API in Excel über VBA zu nutzen, folge diesen Schritten:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul hinzufügen: Klicke mit der rechten Maustaste im Projekt-Explorer und wähle Einfügen > Modul.

  3. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Sub GetTruckDistance()
        Dim request As Object
        Set request = CreateObject("MSXML2.ServerXMLHTTP.3.0")
    
        Dim url As String
        url = "https://api.openrouteservice.org/v2/directions/driving-car/json"
    
        ' Setzen der HTTP-Methode und Header
        request.Open "POST", url, False
        request.SetRequestHeader "Accept", "application/json, application/geo+json, application/gpx+xml, img/png; charset=utf-8"
        request.SetRequestHeader "Authorization", "Dein_API_Schlüssel"
        request.SetRequestHeader "Content-Type", "application/json; charset=utf-8"
    
        ' JSON-Daten für den POST-Request
        Dim jsonData As String
        jsonData = "{""coordinates"":[[8.681495,49.41461],[8.686507,49.41943]]}"
    
        ' Senden des POST-Requests
        request.Send jsonData
    
        ' Verarbeiten der Antwort
        Dim responseContent As String
        Dim response As Object
        If request.Status = 200 Then
            responseContent = request.ResponseText
            Set response = JsonConverter.ParseJson(responseContent)
    
            ' Hier kannst du die Entfernung auslesen
            MsgBox "Die Entfernung beträgt: " & response("routes")(1)("summary")("distance") & " Meter."
        Else
            MsgBox "Fehler beim Abrufen der Daten. Statuscode: " & request.Status
        End If
    End Sub
  4. API-Schlüssel: Ersetze "Dein_API_Schlüssel" mit deinem tatsächlichen API-Schlüssel von OpenRouteService.

  5. JsonConverter: Stelle sicher, dass der JsonConverter in deinem Projekt verfügbar ist, um die JSON-Daten zu verarbeiten.


Häufige Fehler und Lösungen

  • Laufzeitfehler "438: Objekt unterstützt diese Eigenschaft oder Methode nicht": Dieser Fehler tritt häufig auf, wenn die Methode ParseJson nicht korrekt aufgerufen wird. Stelle sicher, dass du responseContent korrekt deklariert hast und die Methode auf dieser Variable anwendest.

  • Variable nicht deklariert: Achte darauf, dass alle Variablen, wie responseContent, vor der Verwendung deklariert sind.


Alternative Methoden

Wenn du die Entfernung zwischen zwei Adressen berechnen möchtest, kannst du die OpenRouteService API auch direkt in einer Webanwendung nutzen. Hierbei kannst du JavaScript verwenden, um die API-Requests zu gestalten und die Antworten weiter zu verarbeiten.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du die Entfernung zwischen Koordinaten berechnen kannst:

  • Koordinaten: 8.681495,49.41461 und 8.686507,49.41943
  • API-Request: Diese Koordinaten werden im JSON-Format an die OpenRouteService API gesendet.

Wenn du den obigen VBA-Code ausführst, erhältst du die Distanz zwischen den angegebenen Koordinaten.


Tipps für Profis

  • Nutze die Debug.Print-Funktion, um den Inhalt von Variablen während der Ausführung zu überprüfen. Dies kann dir helfen, Fehler schneller zu finden.
  • Experimentiere mit verschiedenen Routen-Typen in der OpenRouteService API, um unterschiedliche Ergebnisse zu erhalten, wie z.B. cycling-regular oder foot-walking.

FAQ: Häufige Fragen

1. Wie bekomme ich einen API-Schlüssel für OpenRouteService?
Du kannst dich auf der Website von OpenRouteService registrieren, um einen kostenlosen API-Schlüssel zu erhalten.

2. Welche Excel-Version benötige ich für das VBA-Scripting?
Der VBA-Code sollte in Excel 2010 und höher funktionieren, vorausgesetzt, die benötigten Referenzen sind gesetzt.

3. Kann ich die API auch ohne VBA nutzen?
Ja, du kannst die OpenRouteService API auch über Tools wie Postman oder direkt in Webanwendungen nutzen, indem du HTTP-Requests sendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige