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

Entfernungen mittels VBA und openrouteservice ermitteln

Forumthread: Entfernungen mittels VBA und openrouteservice ermitteln

Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 11:56:00
Wolfgang Spann
Hallo Zusammen und Grüße in die Runde,

ich habe ein Problem mit einer Funktion, die ich per VBA in eine Tabelle integrieren möchte. Ich habe eine Tabelle mit etwa 100 Adressen in Spalte A stehen Straßennamen, in Spalte B stehen Postleitzahlen und in Spalte C Ortsnamen. Das sind Wohnadressen. In Spalte D stehen Straßennamen, in Spalte E stehen Postleitzahlen und in Spalte F stehen Ortsnamen. Das sind die Arbeitsadressen.

Ich möchte nun mithilfe von openrouteservice automatisch die Distanzen zwischen diesen Adressen ermitteln lassen.
Gemeinsam mit ChatGPT habe ich hierfür einen Code erstellt, aber weder ich, noch die Ki finden den Fehler. Hat jemand von Euch eine Idee?

Eine Beispieldatei im den dazugehörigen Makro habe ich hochgeladen: https://www.herber.de/bbs/user/172419.xlsm (Ohne API-Key, den möchte ich ungern veröffentlichen)

Vielen Dank!

Viele Grüße
Wolfgang
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 12:25:58
Onur
Und WIR sollen uns jetzt da registrieren, einen Account anlegen und einen API-Key besorgen, nur um dir helfen zu können ???
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 13:59:39
Wolfgang
Hallo Zusammen,
ich sehe es ein, das hat keinen Sinn. Hier also die vollständige Version:

https://www.herber.de/bbs/user/172422.xlsm

Vielen Dank nochmal und viele Grüße
Wolfgang
Anzeige
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 14:31:55
daniel
also erster Fehler gefunden:

in der Funktion: Function GetCoordinates(adresse As String) As String

musst du in der Zeile mit dem Kommentar 'Koordinaten extrahieren
die letzen Indexwerte von um eins hochsetzen, die Koordinaten kommen nicht im Index 0 und 1, sondern 1 und 2, also:
coordinates = json("features")(1)("geometry")("coordinates")(1) & "," & json("features")(1)("geometry")("coordinates")(2)



allerdings muss du hier auch nochmal drüber gehen, weil das Ergebnis: "6,885171,50,883198" noch nicht plausibel aussieht.
denn hier hast du das Komma als Dezimalzeichen und als Datentrenner, das kann so nicht funktionieren.
Je nachdem was dein Routenplanungsystem benötigt, müsstest du hier entweder den Trenner oder das Dezimalzeichen ändern.

Was braucht denn den System an Input?

Gruß Daniel
Anzeige
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 15:00:07
Onur
Korrekt ist: DezimalPUNKT und Komma als Trennzeichen.
Ich glaube aber, dass die beiden Koordinaten vertauscht sind, denn bei diesen Koordinaten landet man im Ozean vor Afrika (statt im Krankenhaus bzw in der Dieselstr.).
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 15:38:49
daniel
Hi
hab das nochmal geprüft: du brauchst tatsächlich Punkte als Dezimalzeichen, also muss die Zeile beim Ermitteln der Koordinaten so aussehen:

coordinates = Replace(json("features")(1)("geometry")("coordinates")(1), ",", ".") & "," & Replace(json("features")(1)("geometry")("coordinates")(2), ",", ".")


damit funktioniert es soweit, dass du von deinem Routenplaner auch ein Ergebnis zurückbekommst.

wie du allerdings deinen Json bedienen musst, damit er aus dem Ergebnistext die Entfernung rausfieselt, muss du selber rausfinden.
ein json("routes") existiert auf jeden fall nicht.

außerdem zeigt die Zeile If json.Exists("routes") AND If json("routes").Count > 0 Then, dass hier ein unerfahrener Programmierer am Werk war, dann man kann nicht im selben IF prüfen, ob etwas vorhanden ist und gleichteit dieses dann verwenden.
man muss hier zwei Ifs daraus machen, erst prüfen .ob "routes" existert und und erst wenn es vorhanden ist, prüfen, wieviele einträge vorhanden sind.

Gruß Daniel
Anzeige
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 15:45:55
peter
Hallo an Alle

Zusätzlich zum Komma Strich Problem

In Function GetDistance




Dim distance As String
.
.
..
' Überprüfen, ob es gültige Routing-Daten gibt
If json.Exists("features") Then

' Extrahiere die Distanz in Metern
distance = json("features")(1)("properties")("summary")("distance")
'oder zusätzlich : json("features")(1)("properties")("summary")("duration")
GetDistance = CDbl(distance) / 1000 ' Distanz in Kilometern zurückgeben

Else




Peter
Anzeige
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 15:47:21
Onur
WAS GENAU willst du jetzt damit sagen ???
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 16:02:01
Wolfgang Spann
Hallo Zusammen

und vielen Dank an alle, die mir geholfen haben. Jetzt läuft das so wie ich es haben möchte. Aus einem mir unerfindlichen Grund fängt die Kalkulation erst ab Zeile 2 an, aber das ist super, so kann ich noch Überschriften verwenden.

Ihr habt mir sehr geholfen, alleine hätte ich da noch Wochen dran gesessen!

Nochmals vielen Dank
Wolfgang
Anzeige
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 16:16:09
peter
Hallo

Wie man die Distanz aus der JSON Meldung extrahiert.

Peter
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 16:17:43
Onur
Sorry, ich dachte, du wärest der Threaderöffner mit einem neuen Problem. :)
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 16:10:12
Onur
Aus einem mir unerfindlichen Grund fängt die Kalkulation erst ab Zeile 2 an.
Vielleicht DESWEGEN ???
For i = 2 To lastRow
Anzeige
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 15:05:57
Onur
Inzwischen habe ich es soweit zum Laufen gebracht, dass ich dieses Ergebnis (8,79 km) bekomme:
{type":"FeatureCollection","bbox":[6.84782,50.88296,6.885169,50.948068],"features":[{"bbox":[6.84782,50.88296,6.885169,50.948068],"type":"Feature","properties":{"segments":[{"distance":8790.9,"duration":873.3,"steps":[{"distance":30.7,"duration":4.4,"t"
Da ich keine Ahnung von Jason habe, kann ich aber nicht sagen, wie man die Werte jetzt da raus extrahiert.
Anzeige
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 15:35:07
Wolfgang Spann
Hallo Zusammen,

das Problem mit den Dezimalzeichen habe ich zwischenzeitlich auch gesehen, aber daran beiße ich mir die Zähne aus. Jeder Versuch Punkte als Dezimalzeichen zu setzen schlägt fehl. Ich habe im Internet auch eine Menge Fehlermeldungen diesbezüglich gesehen und viele deuten darauf hin, dass die Ursache irgendwie mit irgendwelchen Ländereinstellungen liegen kann. Kann das evtl. am json-cnoverter liegen? Der hat aber keine Länderspezifischen Einstellungen und die Systemsprache umzustellen kann ja auch nicht die Lösung sein...

Hat jemand noch eine Idee dazu?

Viele Grüße
Wolfgang
Anzeige
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 15:40:19
Onur
coordinate1 = replace(json("features")(1)("geometry")("coordinates")(1),",",".")

coordinate2 = replace(json("features")(1)("geometry")("coordinates")(2),",",".")
coordinates = coordinate1 & "," & coordinate2
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 15:13:49
Yal
hallo zusammen,

ich komme auf die gleiche Beobachtung wie Daniel und Onur, war nur a bissele langsammer. Ich ergänze daher nur Onurs letzter Zustand mit dem Zugriff auf JSON.

der json-parser legt alles ab Index 1, nicht 0.

daher sollte
coordinates = json("features")(1)("geometry")("coordinates")(0) & "," & json("features")(1)("geometry")("coordinates")(1)

so aussehen
coordinates = json("features")(1)("geometry")("coordinates")(1) & "," & json("features")(1)("geometry")("coordinates")(2)


Ein deutscher Excel verwendet das Komma als Dezimaltrennzeichen. Es ist daher unglücklich, dass Du hier auch einen Komma zwischen beide Koordinate verwendest.:
coordinates = Replace(json("features")(1)("geometry")("coordinates")(1), ",", ".") & "," & Replace(json("features")(1)("geometry")("coordinates")(2), ",", ".")


Im Sub "GetDistance" scheint es einen abweichende JSON-Modell zu geben. Json("routes") ist nicht geliefert. Dafür müsste man auf
GetDistance = json("features")(1)("properties")("segments")(1)("distance") /1000

zugreifen.

Also nicht der Fehler war offensichtlich, sondern die Fehler ;-)

VG
Yal
Anzeige
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 12:42:15
Wolfgang Spann
Hallo Onur,

ich hatte die Hoffnung der Fehler wäre so offensichtlich, dass das nicht nötig ist.

Viele Grüße
Wolfgang
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 12:49:15
Onur
Für Jemanden, der genau das Selbe macht wie du, die API benutzt, einen Key dazu hat und alles testen kann - bestimmt.
Alle Anderen erhalten nur die Meldung: ""Access to this API has been disallowed""
Anzeige
AW: Entfernungen mittels VBA und openrouteservice ermitteln
26.09.2024 12:49:32
daniel
wir sind leider keine Hellseher.
;
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige