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

Forumthread: Distanzberechnung Google Maps

Distanzberechnung Google Maps
14.01.2022 16:59:28
{Boris}
Hallo zusammen,
ich hab mir im Internet diese Function gezockt:

'Calculate Google Maps distance between two addresses
Public Function GetDistance(start As String, dest As String)
Dim firstVal As String, secondVal As String, lastVal As String
firstVal = "https://maps.googleapis.com/maps/api/distancematrix/json?origins="
secondVal = "&destinations="
lastVal = "&mode=car&language=en&sensor=false&key=YOUR_KEY"
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 ("")
If InStr(objHTTP.responseText, """distance"" : {") = 0 Then GoTo ErrorHandl
Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = """value"".*?([0-9]+)": regex.Global = False
Set matches = regex.Execute(objHTTP.responseText)
tmpVal = Replace(matches(0).SubMatches(0), ".", Application.International(xlListSeparator))
GetDistance = CDbl(tmpVal)
Exit Function
ErrorHandl:
GetDistance = -1
End Function
Den notwendigen API-Key habe ich mir auch besorgt und statt YOUR_KEY in den Code integriert.
Was aber muss ich konkret für die Parameter start und dest vorgeben, damit die Funktion ihren Dienst tut?
Danke für eine kurze Info.
VG, Boris
Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Distanzberechnung Google Maps
14.01.2022 18:21:22
Yal
Hallo Boris,
Unter https://developers.google.com/maps/documentation/distance-matrix/overview#maps_http_distancematrix_side_of_road-sh
ist folgende Beispiel mit curl zu finden, wo eine Modifier drin steht

curl -L -X GET 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=37.7680296%2C-122.4375126&destinations=side_of_road%3A37.7663444%2C-122.4412006&key=YOUR_API_KEY'
Ich vermute ohne modifier so

curl -L -X GET 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=37.7680296%2C-122.4375126&destinations=37.7663444%2C-122.4412006&key=YOUR_API_KEY'
Lange Rede kurz gemacht: zwischen Longitude und lattitude soll eine nicht http-request taugliche Komma stehen, die in %2C konvertieren wird ( hex(asc(",")) )
VG
Yal
Anzeige
Schaue ich mir in Ruhe an...
14.01.2022 18:26:30
{Boris}
Hi Yal,
...danke erstmal für Deine Antwort! Bin jetzt aber für heute afk - melde mich morgen wieder!
VG, Boris
AW: Distanzberechnung Google Maps
15.01.2022 09:46:24
{Boris}
Hi Yal,
ich bin wohl zu blöd für diese UDF, denn ich weiß nicht, was ich bei "Von" und "Nach" eingeben muss:
Userbild
Die UDF habe ich wie folgt im Einsatz:

'Calculate Google Maps distance between two addresses
Public Function GetDistance(start As String, dest As String)
Dim firstVal As String, secondVal As String, lastVal As String
firstVal = "https://maps.googleapis.com/maps/api/distancematrix/json?origins="
secondVal = "&destinations="
lastVal = "&mode=car&language=en&sensor=false&key=" & Tabelle1.Range("B1")
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 ("")
If InStr(objHTTP.responseText, """distance"" : {") = 0 Then GoTo ErrorHandl
Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = """value"".*?([0-9]+)": regex.Global = False
Set matches = regex.Execute(objHTTP.responseText)
tmpVal = Replace(matches(0).SubMatches(0), ".", Application.International(xlListSeparator))
GetDistance = CDbl(tmpVal)
Exit Function
ErrorHandl:
GetDistance = -1
End Function
Im Einzelschrittmodus steigt sie in dieser Zeile aus (bzw. springt zum ErrorHandl):

If InStr(objHTTP.responseText, """distance"" : {") = 0 Then GoTo ErrorHandl
Bitte erhelle mich ;-)
VG, Boris
Anzeige
Der in B1 gezeigt API-Key...
15.01.2022 09:50:09
{Boris}
Hi,
...ist natürlich auf dem Screenshot nicht vollständig - aber in der Zelle steht er natürlich komplett drin.
VG, Boris
Ich bin wohl zu blöd...
15.01.2022 09:57:14
{Boris}
Hi Walter,
...um unseren eigenen Beitrag zu verstehen.
Kann ich damit mit Adresseingabe (also ohne Breite und Länge) die Entfernung zwischen Kö und Reeperbahn berechnen?
VG, Boris
nö, so direkt nicht
15.01.2022 10:46:14
WF
Hi,
in der Tabelle Zellen G42; H42 und i42 kannst Du eine Adresse eingeben
und in D43 ergibt sich der entspr. link zu Google-Maps.
Dort die Fundstelle rechts angeklickt, erhältst Du die Koordinaten.
WF
Anzeige
OK - dann hab ich`s kapiert...
15.01.2022 10:52:08
{Boris}
Hi Walter,
...mir schwebt aber die direkte Berechnung in Excel mit "Von-Adresse" und "Nach-Adresse" vor.
VG, Boris
AW: Distanzberechnung Google Maps
15.01.2022 10:30:03
volti
Hallo Boris,
falls Du nicht weiterkommen solltest, hier ggf. noch eine Alternative.
Braucht allerdings IE....
Entfernungsrechner
oder
Entfernungsrechner Formel
Gruß
Karl-Heinz
Anzeige
Ich habe den IE aber nicht mehr...
15.01.2022 10:45:04
{Boris}
Hi Karl-Heinz,
...im Einsatz :-/
Das muss doch aber auch irgendwie mit der geposteten Function in Kombi mit dem Google-API-Key funktionieren - ich raff halt den Code nicht ansatzweise, um daraus ableiten zu können, was ich bei "Von" und "Nach" eintragen muss, damit die Berechnung funktioniert....
VG, Boris
Anzeige
AW: Distanzberechnung Google Maps
15.01.2022 10:52:36
Herbert_Grom
Hallo Boris,
ich habe mich jahrelang mit diesem Thema beschäftigt und es hat auch immer gut funktioniert. Doch seit Google 2020 seine API-Schlüssel-Verwaltung geändert hat, klappt das leider nicht mehr. Zumindest die Verwendung der Google-Entfernungsberechnung mit den tatsächlichen Straßen-Distanzen. Hierzu habe ich nur noch eine Lösung gefunden und die findest du hier:
https://www.kilometerentfernungen.de/entfernungsrechner/
Servus
Anzeige
Danke Dir...
15.01.2022 10:59:25
{Boris}
Hi Herbert,
...aber auf ein kostenpflichtiges Angebot möchte ich erstmal verzichten.
Wäre aber gut zu wissen, ob das mit dem API-Key überhaupt noch funktioniert...?
Ich hab davon halt mal überhaupt keine Ahnung. Hab nur brav befolgt, was vorgegeben wurde und mir den API-Key organisiert... ;-)
VG, Boris
Anzeige
AW: Danke Dir...
15.01.2022 11:27:11
Herbert_Grom
Hi Boris,
grundsätzlich funktioniert das auch jetzt noch über einen API-Key, aber den muss man bei Google kaufen, jedenfalls ist das so bei Fred Wielakker so. Der verwendet auch einen API-Key, der funktioniert aber nur über seinen Server oder Internet-Adr. oder so. Warum weiß ich nicht genau. Aber er funktioniert, wenn man ihn bei ihm kauft. Ich habe das für einen Kunden von mir so gebastelt und es funzt.
Servus
Anzeige
Google Cloud Plattform
15.01.2022 11:39:21
{Boris}
Hi Herbert,
...ich hab die Google-Seite (bei "Beantragung" des Keys) so verstanden, dass man 200 USD "Guthaben" bekommt - was monatlich ca. 25000 Aufrufen entspricht.
Da ich das nur selbst nutzt, werde ich vielleicht 100 Aufrufe haben - mehr nicht.
Aber was ich noch nicht gemacht habe (weil ich davon keine Ahnung habe), ist den 0Auth-Zustimmungsbildschirm zu konfigurieren:
Userbild
Was ist das genau?
VG, Boris
Anzeige
Kann mir noch jemand helfen..?
15.01.2022 17:42:40
{Boris}
Hallo zusammen,
...denn ich würde das gerne zum Laufen bringen - und hier sind doch so viele VBA-Cracks unterwegs - wär doch gelacht, wenn das nicht klappen würde ;-)
VG, Boris
clever-excel-forum.de/Forum-Komplettloesungen
17.01.2022 13:12:42
lupo1
... als sehr frequentiert mit dem Thema.
Ob voltis "luftlinie" mittlerweile auch außerhab IE funktioniert, sehe ich aufgrund seiner Äußerung in diesem Thread hier bei herber jedoch negativ.
Anzeige
Merci!
17.01.2022 15:28:15
{Boris}
Hi Lupo,
...falls ich das mit dem API-Key nicht gebacken kriegen sollte, werde ich mich sicher umorientieren (müssen) - danke für den Link!
VG, Boris
AW: clever-excel-forum.de/Forum-Komplettloesungen
18.01.2022 14:26:31
volti
Hallo Lupo,
ich hatte mich zwischenzeitlich, da der iE ja immer weniger genutzt werden kann, anderweitig probiert.
Der Aufruf mit Übergabe von Start und Ziel und auch die Datenermittlung unter MS-Edge klappt im Prinzip.
Aber leider wird nur der Wert für die Luftlinie ausgegeben, den ja meist niemand brauchen kann.
Die anderen Werte stehen nur mit einem "-" im Quelltext, so dass das (noch) wenig Sinn macht.
Für die Anzeige selbst werden sie wahrscheinlich on the fly berechnet.
Warum es da Unterschiede zum IE gibt entzieht sich meiner Kenntnis.
Somit habe ich es erst mal wieder weggelegt. :-(
Gruß
Karl-Heinz
Anzeige
Es läuft!
18.01.2022 21:29:05
{Boris}
Hallo zusammen,
vorab: Es läuft! Sowohl mit der UDF als auch mit der hier https://www.ms-office-forum.net/forum/showpost.php?p=2058237&postcount=4 verlinkten Datei von WS-53 (die ich eigentlich noch viel besser finde)! :-)
Offensichtlich lag es an der Bezahlmethode in Google Cloud - ich hatte sehr wohl eine Methode (Kreditkarte) in meinem Google-Konto hinterlegt - aber das hat wohl so nicht gereicht. Habe das ganze Anmeldeprozedere für den API-Key wiederholt, dabei nen neuen Key erhalten, die Rechnungsmodalitäten bestätigt - und dann war es das!
Ich danke allen, die mit hier ihren Gehirnschmalz geschenkt haben!
VG, Boris
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Distanzberechnung mit Google Maps in Excel


Schritt-für-Schritt-Anleitung

  1. API-Key besorgen: Um die Google Maps API nutzen zu können, musst Du einen API-Key generieren. Gehe dazu auf die Google Cloud Platform und registriere Dich.

  2. VBA-Funktion einfügen: Öffne Excel und gehe zu "Entwicklertools" > "Visual Basic". Füge die folgende Funktion in ein Modul ein:

    'Calculate Google Maps distance between two addresses
    Public Function GetDistance(start As String, dest As String) As Double
        Dim firstVal As String, secondVal As String, lastVal As String
        firstVal = "https://maps.googleapis.com/maps/api/distancematrix/json?origins="
        secondVal = "&destinations="
        lastVal = "&mode=car&language=en&sensor=false&key=YOUR_KEY"
    
        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 ("")
    
        If InStr(objHTTP.responseText, """distance"" : {") = 0 Then GoTo ErrorHandl
        Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = """value"".*?([0-9]+)": regex.Global = False
        Set matches = regex.Execute(objHTTP.responseText)
        tmpVal = Replace(matches(0).SubMatches(0), ".", Application.International(xlListSeparator))
        GetDistance = CDbl(tmpVal)
        Exit Function
    
    ErrorHandl:
        GetDistance = -1
    End Function
  3. API-Key einfügen: Ersetze YOUR_KEY im Code mit Deinem tatsächlichen API-Key.

  4. Adressen eingeben: Um die Distanz zu berechnen, kannst Du nun die Funktion GetDistance in einer Zelle verwenden, z.B. =GetDistance("Startadresse", "Zieladresse").

  5. Ergebnisse anzeigen: Die Funktion gibt die Entfernung in Metern zurück.


Häufige Fehler und Lösungen

  • Fehler: #VALUE! oder #NAME?

    • Lösung: Stelle sicher, dass die Funktion korrekt eingegeben wurde und dass der API-Key gültig ist.
  • Fehler: Keine Distanzwerte werden zurückgegeben.

    • Lösung: Überprüfe, ob die eingegebenen Adressen korrekt formatiert sind und keine Tippfehler enthalten.
  • Fehler: -1 wird zurückgegeben.

    • Lösung: Dies deutet darauf hin, dass kein gültiges Ergebnis von der API abgerufen wurde. Überprüfe die Internetverbindung und die API-Nutzung.

Alternative Methoden

  • Excel-Formeln: Du kannst auch die Formeln nutzen, die in Excel für die Berechnung von Entfernungen zwischen Koordinaten bereitgestellt werden. Für diese Methode benötigst Du die GPS-Koordinaten der Orte.

  • Entfernungsrechner online: Wenn Du eine schnelle Lösung ohne Programmierung suchst, nutze einen Online-Entfernungsrechner. Es gibt viele Tools, die die Google Maps API im Hintergrund nutzen.


Praktische Beispiele

  1. Beispiel mit Adressen:

    • =GetDistance("Berlin, Alexanderplatz", "Hamburg, Rathausmarkt")
  2. Beispiel mit Koordinaten:

    • =GetDistance("52.5200, 13.4050", "53.5511, 9.9937") (Berlin nach Hamburg)
  3. Verwendung von Hyperlinks: Du kannst auch Hyperlinks in Excel einfügen, um die Google Maps-Ansicht direkt zu öffnen:

    =HYPERLINK("https://www.google.com/maps/dir/?api=1&origin=Berlin&destination=Hamburg", "Route anzeigen")

Tipps für Profis

  • Daten automatisieren: Du kannst VBA verwenden, um automatisch eine Liste von Entfernungen zwischen vielen Adressen zu berechnen, indem Du Schleifen und Arrays nutzt.

  • Kosten im Auge behalten: Beachte, dass die Nutzung der Google Maps API kostenpflichtig sein kann, wenn Du eine hohe Anzahl an Aufrufen machst.

  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung in Deinem VBA-Code, um besser nachvollziehen zu können, warum bestimmte Aufrufe fehlschlagen.


FAQ: Häufige Fragen

1. Frage: Was ist der Unterschied zwischen der Luftlinie und der Straßenentfernung?
Antwort: Die Luftlinie ist der direkte Abstand zwischen zwei Punkten, während die Straßenentfernung die tatsächlich zu fahrenden Kilometer darstellt.

2. Frage: Kann ich die Google Maps API auch ohne Programmierkenntnisse nutzen?
Antwort: Ja, es gibt viele Online-Tools, die die Google Maps API nutzen, ohne dass Du selbst programmieren musst.

3. Frage: Wie viele kostenlose Anfragen kann ich pro Monat stellen?
Antwort: Google bietet ein monatliches Guthaben von 200 USD, was ungefähr 25.000 Anfragen entspricht, abhängig von der Art der API-Nutzung.

4. Frage: Wo finde ich weitere Informationen zur Google Maps API?
Antwort: Die offizielle Dokumentation findest Du auf der Google Maps API-Dokumentationsseite.

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