Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Entfernung zwischen zwei PLZ mit GoogleMaps berechnen!
Hallöchen,

Google mal nach Google key beantragen.
Der Key wird dann einfach in den Link integriert. Wurde hier im Thread vor Dir gefragt, lies einfach mal die letzten Beiträge vor Deiner Frage.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
Hey, 

bin über google hier her gestoßen Smile

Der Code funktioniert nach kleinen Änderungen auch in Word... Ich möchte aber, das die Start und Zieladresse auf Basis von Textmarken übergeben wird...
Code:
strOAddr = "ActiveDocument.FormFields("PESTRASSE").Result & ", " & ActiveDocument.FormFields("PEPLZ").Result & " " & ActiveDocument.FormFields("PEORT").Result

Aber hier bekomme ich immer einen Fehler:
Zitat:

 INVALID_REQUEST
 Invalid request. Invalid 'origins' parameter.
Übergeben wird es aber richtig, denke ich:
Zitat:http://maps.googleapis.com/maps/api/dist...sterstraße 18, 01234 Musterstadt&destinations=Deutschland, Musterzieln&language=de-DE&sensor=false

Liegt es an den Textmarken?

Wäre für jeden Tipp dankbar...

Viele Grüße

Erik
Top
Hallo Erik,

wenn ich Deine gepostete Linkzeile korrekt in den Browser einfüge, bringt mir Google ein XML mit Not Found. Man muss erst den blauen Teil als Link kopieren und dann den Rest hinzufügen.
PHP-Code:
http://maps.googleapis.com/maps/api/distancematrix/xml?origins=Musterstraße 18, 01234 Musterstadt&destinations=Deutschland, Musterzieln&language=de-DE&sensor=false 
Code:
<?xml version="1.0" encoding="UTF-8"?>
-<DistanceMatrixResponse>
<status>OK</status>
<origin_address/>
<destination_address/>
-<row>
-<element>
<status>NOT_FOUND</status>
</element>
</row>
</DistanceMatrixResponse>
Das kann also nicht richtig sein Sad
Hast Du mal die Links verglichen, die Dir original und mit den Textmarkern ausgegeben werden? Sind die identisch?

INVALID REQUEST bekomme ich nur, wenn ich nicht den korrekten Link eintrage - z.B. eine direkte Kopie Deines geposteten links. Der ist aber in der Ansicht eingekürzt ...
Code:
<?xml version="1.0" encoding="UTF-8"?>
-<DistanceMatrixResponse>
<status>INVALID_REQUEST</status>
</DistanceMatrixResponse>
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
Hallo André,

Danke für deine Antwort. 

Meines Erachtens nach waren die Links identisch, aber auf das http habe ich nicht geachtet, das prüfe ich morgen früh aber nochmals sofort nach.

Danke erstmal und ich melde mich morgen.

Grüße

Erik
Top
Hallo und guten Morgen!

also, ich habe jetzt verglichen und keinen Unterschied gemerkt... hier ist erstmal der gesamte Code:
Code:
Public Sub GoogleTest()
'Variablendeklarastionen
Dim objXML As Object 'fuer XML-"String"
Dim xmlDoc As Object
Dim xmlNod As Object
Dim erg As Double
Dim Baustelle1 As String
Dim Unterkunft As String
Dim Wohnort As String
Dim KMTGL As String
Dim strOAddr As String
Dim strDAddr As String

Baustelle1 = Trim(ActiveDocument.FormFields("Baustelle").Result)
'Unterkunft = ActiveDocument.FormFields("UEBSTRASSE").Result & ", " & ActiveDocument.FormFields("UEBPLZ").Result & " " & ActiveDocument.FormFields("UEBORT").Result
Wohnort = Trim(ActiveDocument.FormFields("PESTRASSE").Result) & ", " & Trim(ActiveDocument.FormFields("PEPLZ").Result) & " " & Trim(ActiveDocument.FormFields("PEORT").Result)
MsgBox Wohnort
On Error GoTo errorhandler
'XML-Objecte instanzieren
Set objXML = CreateObject("Msxml2.XMLHTTP")
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
'Wenn Instanzierung nicht nichts gebracht hat, dann
If Not objXML Is Nothing Then
 'OriginAddress ermitteln
 'Hinweise:
 'PLZ auch 4stellig moeglich
 strOAddr = Wohnort
 'strOAddr = Replace(strOAddr, " ", "+")
 MsgBox strOAddr
 'DestinationAddress ermitteln
 'Hinweise:
 'PLZ nicht 4stellig moeglich!
 strDAddr = "Deutschland, Dresden"
 'strDAddr = Replace(strDAddr, " ", "+")
 MsgBox strDAddr
 'zusammensetzen
 'Abfrage oeffnen
 MsgBox "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & strOAddr & "&destinations=" & strDAddr & "&language=de-DE&sensor=false"
 objXML.Open "POST", "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & strOAddr & "&destinations=" & strDAddr & "&language=de-DE&sensor=false", False
 'Abfrageheader
 objXML.setRequestHeader "Content-Type", "content=text/html; charset=UTF-8"
 'Abfrage senden
 objXML.send
 'Abfrageergebnis (Text) aufnehmen
 xmlDoc.LoadXML objXML.responseText
 MsgBox objXML.responseText
 'Zeit auslesen /Value=Sekunden /Text = Minuten mit Angabe "Minuten"
 'Set xmlNod = xmlDoc.SelectSingleNode("//row/element/duration/value")
 'Zeit in Stundenzelle eintragen, Rueckgabewert / 86400
 'MsgBox CDate(xmlNod.Text / 86400)
 'Entfernung auslesen /Value=Meter /Text = Kilometer mit Angabe "km"
 Set xmlNod = xmlDoc.SelectSingleNode("//row/element/distance/value")
 'Entfernung in km zelle eintragen, Rueckgabewert / 1000
 erg = Round((CDec(xmlNod.Text / 1000)), 2)
 MsgBox erg
 'Zeit in Stundenzelle eintragen, Rueckgabewert / 86400
 'MsgBox CDate(xmlNod.Text / 86400)
'Ende Wenn Instanzierung nicht nichts gebracht hat, dann
End If
'Fehlerbehandlung / Programmende
errorhandler:
'Wenn Fehlernummer <> 0, dann Ausgabe Fehlermeldung
If Err.Number <> 0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description
'XML-Objecte zuruecksetzen
Set xmlNod = Nothing
Set xmlDoc = Nothing
Set objXML = Nothing
End Sub

Der generierte Link:
Code:
MsgBox "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & strOAddr & "&destinations=" & strDAddr & "&language=de-DE&sensor=false"
Ergebnis:
Zitat:---------------------------
Microsoft Word
---------------------------
http://maps.googleapis.com/maps/api/dist...chtestraße 4, 02906 Niesky&destinations=Deutschland, Dresden&language=de-DE&sensor=false
---------------------------
OK   
---------------------------
Diesen Link kann ich 1:1 im Browser aufrufen und erhalte auch die XML-Datei. Trage ich statt den Textmarken die Adresse bei Hand als String ein, klappt es...


Ergebnis 1:1 aus der MsgBox kopiert ohne Textmarken (nur die Startadresse):
Code:
---------------------------
Microsoft Word
---------------------------
Fichtestraße 4, 02906 Niesky
---------------------------
OK  
---------------------------
und mit den Textmarken:
--- beim posten fällt mir es jetzt auf... das Problem ist ß... ich müsste die Sachen sicher erstmal in UFT-8 umwandeln... ich such da mal was raus und melde mich, ob es daran lag/liegt... danke erstmal Smile


vg,
Erik
Top
okay, läuft.
Hier habe ich den Code von dem User danaseaman genommen. Jetzt klappt es, lag an Umlauten und "ß"...

Kann man bei der Streckenberechnung noch einstellen, das die kürzeste Strecke genommen wird? Wenn ja, welcher Parameter ist das?

Danke!
Top
Hallo zusammen,

ich bin neu hier und habe die Diskussion ein wenig verfolgt, da ich auch ein ähnliches Problem habe wie der Ersteller dieses Beitrages.

Jedoch funktionieren die Lösung die vorgeschlagen wurden, bei mir leider nicht.

Kurz zur Erklärung:

Ich arbeite in einem Unternehmen mit mehreren Niederlassungen und Vermittlern, von denen unsere LKW´s in gewissen Umkreisen unterwegs sind.
Jetzt benötige ich für unsere Vermittler eine Preisliste, die automatisch die Aufschläge für gewisse Liefergebiete berechnet.

Beispiel:
Vermittler sitzt in München, nun wird das abgesprochene Liefergebiet in verschiedene Gebiete ( Liefergebiet A = alles im Umkreis von 25 km , Liefergebiet B = alles im Umkreis von 25,01 km - 50 km usw. ) aufgeteilt und mit verschiedenen Aufschlägen versehen.

Da die Vermittler sehen sollten welche Ortschaften sich innerhalb welches Liefergebietes befinden, dachte ich an eine Lösung mit Google Maps oder ähnliches.
Jedoch habe ich bislang keine Vorschläge oder ähnliche Probleme im Netz gefunden, könnt Ihr mir hierbei vielleicht weiter helfen?

Mit freundlcihen Grüßen
Top
Hallöchen,
z.B.
FreeMapTools.com --> RadiusAroundPoint
oder
PLZ-Umkreis.com
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
Auf der Seite von Google Maps Distance Matrix API - Policies steht ausdrücklich:


Zitat:Displaying a map

The Google Maps Distance Matrix API may only be used in conjunction with displaying results on a Google map. It is prohibited to use Google Maps Distance Matrix API data without displaying a Google map.

Wie ist es möglich diese Richtlinie in Excel zu erfüllen?

Ich habe diesen VBA Code als Vorlage genommen und auf meine Bedingungen angepasst:

Code:
'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 = "http://maps.googleapis.com/maps/api/distancematrix/json?origins="
   secondVal = "&destinations="
   lastVal = "&mode=car&language=pl&sensor=false"
   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

Habe ich einen Beitrag überlesen, indem bereits eine Lösung beschrieben wurde?

EDIT: Reicht es aus einen Befehl (URLCODIEREN), wie in der Vorlage  


Entfernung_googleMaps_ohne_VBA_ab_Excel2013 (Verweis zum Beitrag)

einzufügen, um die Richtlinie zu erfüllen?

EDIT 2: Wenn es wie nach dem ersten Edit ausreicht einen Hyperlink einzubauen, dann habe ich das Problem gelöst.

Meine Lösung

Die Start- und Zieladresse ist dabei wie folgt aufgebaut:

[Straße Hausnummer]+[PLZ]+[Ort]

Code:
A1 | [Straße Hausnummer]+[PLZ]+[Ort]
A2 | [Straße Hausnummer]+[PLZ]+[Ort]
A3 | =HYPERLINK("https://www.google.com/maps/dir/"&A1&"/"&A2;"Verlinkung zu Google Maps")
Top
Hallo zusammen,

ich bin noch ganz neu hier und bin insbesondere wegen dieses Threads beigetreten. Für meine Arbeit benötige ich häufig verschiedenste KM-Werte. Allerdings ist es in der Regel für den Containertransport.

Dieser beginnt in der Regel in einem Depot, geht dann zu Adresse (Laden / Entladen) und anschließend wieder in den Hafen/Depot. Daher bräuchte ich diese Funktion mit drei Punkten. Start - Zwischenziel - Ende

Hat jemand von euch zufällig genau soetwas schon "fertig". Ich muss teilweise Listen mit bis zu 100 oder 150 Orten einpflegen können und hierfür die KM-Werte verarbeiten. Da würde mir dieses Tool natürlich deutlich weiter helfen.

Vielen Dank schonmal.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste