Clever-Excel-Forum

Normale Version: Das leidige Thema mit der automatischen Abfrage von Entfernungen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Abend,

Ich schreibe gerade an einer Dissertation und muss aus einer elendig langen Tabelle Entfernungen zwischen Postleitzahlen berechnen/abfragen. Nach gefühlt mehreren Stunden Internetrecherche nach einer einfachen Möglichkeit Entfernungen zwischen zwei Adressen abzufragen bin ich zu folgendem Schluss gekommen:
1.) Man gibt etwas Geld aus und nutzt die Google-API sowie fertige Makros für Excel oder LibreOffice -> für den Nutzer relativ simpel, aber halt auch kostspielig
2.) Man setzt sich hin und gibt alles händisch ein (das widerstrebt mir!)
3.) Wenn man schon keine API nutzen kann, dann vielleicht einen anderen Service ->

Auf www.luftlinie.org kann man relativ simpel Luftlinie UND Fahrstrecke zwischen verschiedenen PLZ oder Orten nachschlagen. Das URL-Format ist dabei https://www.luftlinie.org/81541,DEU/10115,DEU, dabei funktioniert die Eingabe eines Ortsnamens oder einer PLZ, die Daten werden über Openstreetmap berechnet.

Nun zur Frage: Ich habe mit Hyperlink eine Funktion erstellt die mir aus den links daneben stehenden Spalten den Link zur Abfrage erstellt
Code:
=HYPERLINK("https://www.luftlinie.org/"&B18&",DEU/"&C18&",DEU";"Entfernung")
Gibt es in Excel eine Möglichkeit die Website zu parsen und die Zahl nach "Fahrstrecke: " in die Tabelle zu importieren? Sollte es mit Excel nicht gehen, hat jemand eine Idee wie man das mit AutoIt oder ähnlichen Tools realisieren könnte?
[attachment=31366]

Wenn man das ganze mit der Website realisieren könnte wäre glaube ich auch einigen anderen Leuten geholfen, das Problem scheint es öfters zu geben.

vielen Dank im Vorraus und Bitte entschuldigt die Anfänger-Frage

Vg aus der Quarantäne
Tilman
Hallöchen,

Google ist (oder war) meines Wissen bis zu einer bestimmten Abfrageanzahl oder einem bestimmten Wert kostenlos, allerdings muss man in jedem Fall seine Kontodaten hinterlegen.

Bei Luftlinie.org müsste man über den IE die Website ansteuern, die Einträge vornehmen und schauen, ob man Zugriff auf das Ergebnis bekommt. Ist nicht simpel zu programmieren, obwohl am Ende vielleicht nicht allzuviel Code rauskommt - falls es überhaupt geht.

Start/Ziel
PHP-Code:
<div class="typeaheadOuter"><input class="bd" type="text" placeholder="Start eingeben..." value="Gera, Thüringen, DEU" autocomplete="off"></div>
<
class="waves-effect btn" onclick="addWaypoint(this, 'Ziel eingeben...')">+</a>
<
div class="typeaheadOuter"><input class="bd" type="text" placeholder="Start eingeben..." value="Zwickau, Sachsen, DEU" autocomplete="off"></div

Entfernung:
PHP-Code:
<span class="headerRoute">Fahrstrecke: <span class="directionsResult directionsResultTotal" id="strck"><span class="value">41,83</span> <span class="unit">km</span></span></span
Hi,

Google verlangt für die Nutzung seiner API erst ab mehreren 100 oder 1000 Abfragen pro Tag eine Gebühr. Nutzt man die API, die Luftlinie.org zugrunde liegt, fallen ebenfalls Gebühren an, die sogar noch höher sind.

Ein Aufruf, wie du ihn bei Luftlinie.org formuliert hast, kannst du auch mit Google-Maps realisieren:

https://www.google.de/maps/dir/#StartAdresse/#ZielAdresse/data=!4m2!4m1!3e0?hl=de

Ersetze #StartAdresse und #ZeilAdresse durch deine beiden Zellen.
Hallo Tilmaen,

hier mal eine Idee, wie Du über die angegebene Web-Seite die Entfernung und die Fahrstrecke zwischen zwei PLZ ermitteln kannst. Im Debug-Fenster werden Dir zusätzlich auch noch die Klartexte zu den Orten angezeigt.
Vielleicht kannst Du ja da was mit anfangen und/oder Dir das entsprechend erweitern und umbauen:

Code in die Zwischenablage
Option Explicit

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Entferungsrechner()
 Dim sStart As String, sZiel As String, oNode As Object, sTxt As String
 sStart = "63579": sZiel = "48361"
 With CreateObject("InternetExplorer.Application")
  .navigate "http://www.luftlinie.org"             'Zur Url surfen
  While Not .readyState = 4: DoEvents: Wend        'Warten bis Seite geladen ist
 
'  .Visible = True
  On Error Resume Next
  Set oN‌ode = .document.getElementById("start")
  If Not oNode Is Nothing Then
    oNode.value = sStart
    Set oN‌ode = .document.getElementById("end")
    If Not oNode Is Nothing Then
       oNode.value = sZiel
       Set oN‌ode = .document.getElementById("calcDistance")
       If Not oNode Is Nothing Then oNode.Click
       Do
        Sleep 100
        Set oN‌ode = .document.getElementsByClassName("value km")(0)
        If Not oNode Is Nothing Then Exit Do
        DoEvents
       Loop
       sTxt = "Die Entfernung zwischen " & sStart & " und " & sZiel & " beträgt " & oNode.outerText & " km "
       Set oN‌ode = .document.getElementsByClassName("value km")(0)
       If Not oNode Is Nothing Then
            sTxt = sTxt & "Die Fahrstrecke beträgt " & oNode.value
       End If
       MsgBox sTxt, vbInformation, "Entfernungsrechner"
       Debug.Print "Die Entfernung zwischen "
       Debug.Print sStart & " " & .document.getElementsByClassName("regions")(0).outerText
       Debug.Print "und"
       Debug.Print sZiel & " " & .document.getElementsByClassName("regions")(2).outerText
       Debug.Print "beträgt "; .document.getElementsByClassName("value km")(0).outerText & " km"
       Debug.Print "und die Fahrstrecke beträgt"
       Debug.Print .document.getElementById("strck").outerText
    End If      'End
  End If        'Start
 .Quit                                             'IE schließen
 End With
End Sub
viele Grüße
Karl-Heinz
Wow, das sind tolle ideen, ich werde gleich damit anfangen diese umzusetzen :D. Ich habe gerade gesehen, dass man bei distance.to auch im "bulk" kaufen kann, das würde für meinen Datensatz ca 10 Euro kosten und käme einem lokalen Programmierer zu Gute und nicht google. Ich überlege das zu tun, schon alleine um die hiesige Wirtschaft zu unterstützen  :19:.

Nochmals vielen Dank für den Input, ich werde gleich berichten, wenn ich mich wieder um die PLZ-Geschichte kümmere (aktuell schlage ich mich mit SPSS rum :D)

vg