Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: elvodia am Januar 01, 2012, 18:42:19

Titel: KM Entfernung aus Google Maps auslesen
Beitrag von: elvodia am Januar 01, 2012, 18:42:19
Gesundes neues Jahr wünsche ich allen.

Über folgenden Code lasse ich eien Routenberechnung via Google maps machen.

VAR_von_anschrift = Me.von.Column(2)
VAR_von_plz = Me.von.Column(3)
VAR_von_ort = Me.von.Column(4)
VAR_nach_anschrift = Me.nach.Column(2)
VAR_nach_plz = Me.nach.Column(3)
VAR_nach_ort = Me.nach.Column(4)


URL = "http://maps.google.de/maps?f=q&source=s_q&view=text&q=D%2C+" & VAR_von_plz & "+" & VAR_von_ort & "%2C+" & VAR_von_anschrift & " nach D%2C+" & VAR_nach_plz & "+" & VAR_nach_ort & "%2C+" & VAR_nach_anschrift & ""
CreateObject("Shell.Application").ShellExecute URL


Im Quelltext den Maps dann ausspuckt gibt es ein Div was die angaben enthält.

Bsp.:

<div class="dir-altroute-inner">  <div class="altroute-rcol altroute-info"> <span>4,9 km</span>, <span>8 Minuten</span>   </div> <div>Karower Chaussee</div>

Besteht die Möglichkeit die KM Angabe auszulesen?
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: MzKlMu am Januar 01, 2012, 19:16:19
Hallo,
ist die Anzahl der Zeichen vor der ersten Zahl (hier die 4) immer gleich?
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: elvodia am Januar 01, 2012, 19:59:18
Meinst du bis zum Kompletten Anfang also 1 Zeichen des Quellcodes?
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: MzKlMu am Januar 01, 2012, 20:22:31
Hallo,
nein, in dem Text den Maps zurückliefert.
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: elvodia am Januar 01, 2012, 20:50:57
Ich weis net wie du das meinst. Ich öffne per Button den I-Explorer und der berechnet mir die Strecke. Dann habe ich im Explorer mir den Quelltext anzeigen lassen dun den Part gesucht der mit der Kilometer Zahl übereinstimmt wie oben Gepostet. Und die Kilometer möchte ich in eine Access Variable übergeben.
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: DF6GL am Januar 02, 2012, 18:01:33
Hallo,

wenn Du die Textpassage mit der Kilometeranzahl findest (gefunden hast), dann such  halt darin die Position des  (fetten) Text-Teils:


<span>4,9 km</span>,

und darauf aufbauend das vorangangene <span> -Tag. Abschliessend extrahierst Du die Angabe (Zeichen)  zwischen <span> und </span>
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: elvodia am Januar 02, 2012, 21:52:32
Und genau hier haperst. Ich habe keine Ahnung wie ich eine Passage aus dem Quelltext in Access importiere und dann zerpflücke.
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: DF6GL am Januar 03, 2012, 10:03:18
Hallo,

dafür gibt es die Funktionen

Instr
Instrrev
Mid
Left
Right
Replace
etc...

siehe VBA-Hilfe
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: elvodia am Januar 04, 2012, 22:01:41
und wie kann ich den Quellcode nach access importieren?
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: daolix am Januar 05, 2012, 00:01:08
Zitatund wie kann ich den Quellcode nach access importieren?
mit dem IE-Object oder
dem WinHttpRequest oder ganz billig mit
URLDownloadToFile und anschließendem einlesen der Quellcodedatei.


Hier mal Ansatz der Billig-Variante
Code (Ist aber ungetestet < Luftcode  und nicht vollständig >) [Auswählen]
Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" ( _
        ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Const S_OK = 0

...


VAR_von_anschrift = Me.von.Column(2)
VAR_von_plz = Me.von.Column(3)
VAR_von_ort = Me.von.Column(4)
VAR_nach_anschrift = Me.nach.Column(2)
VAR_nach_plz = Me.nach.Column(3)
VAR_nach_ort = Me.nach.Column(4)

Var_FileName = "c:\dein_Path\mapsTemp.txt"

URL = "http://maps.google.de/maps?f=q&source=s_q&view=text&q=D%2C+" & VAR_von_plz & "+" & VAR_von_ort & "%2C+" & VAR_von_anschrift & " nach D%2C+" & VAR_nach_plz & "+" & VAR_nach_ort & "%2C+" & VAR_nach_anschrift & ""


IF URLDownloadToFile( BYVAL 0, URL, Var_FileName, 0, 0 ) = S_OK THEN   
   'DL erfolgreich
    ff = Freefile
    open  Var_FileName for Binary as #ff
    sOut = String$(LOF(#ff), 0)
    get #ff,, sOut
    Close #ff

    'Ab hier kannst du mit Regexpr oder den genannten Funktionen von DF6GL arbeiten
    ....

Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: elvodia am Januar 09, 2012, 22:03:41
Kann mir bitte mal jemand nen einfachen URLDownloadToFile Code schreiben wo die URL aus der Variable URL gezogen wird und die Datei und c:\test.txt gespeichert wird.

Ich komm damit nicht klar
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: daolix am Januar 10, 2012, 01:08:01
neues Modul mit folgendem Code:

Option Compare Database
Option Explicit

'// ----------------------------------------------------------------------------------------------------------------
'//
'// ----------------------------------------------------------------------------------------------------------------
Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
        ( _
            ByVal pCaller As Long, _
            ByVal szURL As String, _
            ByVal szFileName As String, _
            ByVal dwReserved As Long, _
            ByVal lpfnCB As Long _
        ) As Long

'// ----------------------------------------------------------------------------------------------------------------
'//
'// ----------------------------------------------------------------------------------------------------------------
Const S_OK = 0

Function GoogleEntfernung _
            ( _
                VAR_von_anschrift As String, _
                VAR_von_plz As String, _
                VAR_von_ort As String, _
                VAR_nach_anschrift As String, _
                VAR_nach_plz As String, _
                VAR_nach_ort As String _
            ) As String
           
           
    '// ** Variablen & Konstanten **
    Dim URL As String, sFile As String, sTxt As String
    Dim ff As Integer
    Dim lA As Long
    Const FA As String = "<div class=""dir-altroute-inner"">  <div class=""altroute-rcol altroute-info""> <span>"
    Const FE As String = "</span>"
   
    '// ** Baue URL **
    URL = "http://maps.google.de/maps?f=q&source=s_q&view=text&q=D%2C+" & _
            VAR_von_plz & "+" & _
            VAR_von_ort & "+" & _
            VAR_von_anschrift & " nach D%2C+" & _
            VAR_nach_plz & "+" & _
            VAR_nach_ort & "+" & _
            VAR_nach_anschrift
                 
    '// ** Lokale Datei **
    sFile = "c:\test.txt"
   
    '// ** Lösche vorhandene Datei **
    If Len(Dir$(sFile)) > 0 Then Kill sFile
   
    '// ** Download **
    If URLDownloadToFile(ByVal 0, URL, sFile, 0, 0) = S_OK Then
        '// ** erfolgreich **
        '// ** lese lokale Datei **
        ff = FreeFile
        Open sFile For Binary As #ff
        sTxt = String$(LOF(ff), 0)
        Get #ff, , sTxt
        Close ff
       
        '// ** Zerlege String, suche die km's **
        lA = InStr(1, sTxt, FA)
        If lA > 0 Then
            lA = lA + Len(FA)
            GoogleEntfernung = Mid$(sTxt, lA, InStr(lA, sTxt, FE) - lA)
        Else
            '// ** wurde was falsches geladen **
            MsgBox "Wat'n Mist"
        End If
    Else
        MsgBox "Mist"
    End If
End Function



der Aufruf erfolgt dann aus einem Formular oder anderem Modul in etwa so:

    MsgBox GoogleEntfernung( _
                                "Sonnenallee", _
                                "12059", _
                                "Berlin", _
                                "Großbeerenstr", _
                                "10963", _
                                "Berlin" _
                            )


Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: elvodia am Januar 10, 2012, 09:57:17
Super das funktioniert Einwand frei. Nur habe ich leider das Problem das mein Feld wo ich die km eintragen möchte ein double ist und die Ausgabe km hinter der Zahl noch weg müsste.
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: daolix am Januar 10, 2012, 19:57:36
ändere die Zeile
Const FE As String = "</span>"
in
Const FE As String = "km</span>"

und den Aufruf wie ählich:

Dim d as double
d = GoogleEntfernung( ..........

Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: elvodia am Januar 10, 2012, 22:13:57
Klappt super. Vielen vielen dank
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: allegro27de am Juni 21, 2013, 08:18:41
Hallo!

Ich finde das auch super!! Danke!
Der letzte Beitrag ist zwar schon ein paar Monate her, aber versuche es mal an dieser Stelle:

Ich hätte jetzt gern aus der test.txt den Wert "Minuten" der Fahrtzeit. Kann mit jemand mit
´nem Codeschnipsel weiterhelfen, damit ich diese in VBA einer Variable zuweisen kann?

Grüße
Stefan
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: daolix am Juni 21, 2013, 13:52:43
gelöscht

Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: allegro27de am August 13, 2013, 12:21:17
Die Minuten habe ich nun selbst extrahieren können.
Leider bricht die Prozedur ab, sobald die Entfernung kleiner ist und in Metern angegeben wird.
Hat jemand eine Lösung hierfür?

Gruß
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: Bernie110 am Oktober 07, 2014, 14:19:22
Hallo zusammen,

Der Code ist wunderbar und funktioniert einwandfrei.

Ich bräuchte das aber auch für eine Tour. dh.
Eine Fahrtstrecke über mehrere Orte.

zb.

von Ort A zu Ort b zu ort c zu ort e usw.

Ist das auch möglich  ?

Wenn ich hierfür einen neuen Fred aufmachen soll erbitte ich info.

lg bernie
Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: database am Oktober 07, 2014, 22:01:16
Hallo,

ja, ist möglich.

Blätterst du in diesem Thread eine Seite zurück findest du die benötigten Codeteile von DF6GL und daolix, die du dann um deine Bedarfe erweitern kannst/musst/sollst.

Titel: Re: KM Entfernung aus Google Maps auslesen
Beitrag von: Bernie110 am Oktober 08, 2014, 00:08:13
Hallo Data,

ok, die Km Berechnung würde mit einer Abfrage gehen, welche die Tour Strecke
darstellt.

Und was muss ich machen wenn ich mir einfach nur alle Orte  der Strecke in der Karte auf einmal anzeigen lassen möchte ?

Lg Bernie