2012-04-12 2 views
3

Ich habe eine Anwendung, wo es sehr vorteilhaft wäre direkt von Google Maps die Zeit und Meilen (Fahrmeilen) zwischen zwei Adressen zu erhalten. Ich habe viele Websites und Dokumente durchpflügt und total stocked, wie es geht.Google Maps API für Zeit-und Distanzdaten (Access/VBA)

Hat jemand eine erfolgreiche Verbindung mit Google Maps API unter Verwendung von Microsoft Approach hergestellt und Zeit und Entfernung Informationen extrahiert? Wenn haben, o könnten sie den Code teilen, den sie verwendeten.

Ich versuche, ein Fahrer-Scheduling-System für einen Freiwilligen Fahrer-Gruppe (für Menschen mit medizinischen Termine, die nicht fahren fahren können, können sich keine Taxis leisten und können sich keine Autos leisten!).

Jede Hilfe wäre

John Baker

Antwort

8

Hier einige Code zu tun, was Sie tun möchten, geschätzt werden. Beachten Sie, dass Google bei der Verwendung seiner API einige Lizenzanforderungen/-beschränkungen hat. Sie sollten die hier erzielten Ergebnisse in einer Google Map verwenden. Bitte lesen Sie die Nutzungsbeschränkungen hier: https://developers.google.com/maps/documentation/directions/

Beachten Sie, dass dies einen Verweis auf "Microsoft XML, v6.0" erfordert, es sei denn, Sie ändern den Code, um späte Bindung zu verwenden.

Dim sXMLURL As String 
sXMLURL = "http://maps.googleapis.com/maps/api/directions/xml?origin=NY,+NY&destination=Los+Angeles,+CA&sensor=false" 

Dim objXMLHTTP As MSXML2.ServerXMLHTTP 
Set objXMLHTTP = New MSXML2.ServerXMLHTTP 

With objXMLHTTP 
    .Open "GET", sXMLURL, False 
    .setRequestHeader "Content-Type", "application/x-www-form-URLEncoded" 
    .Send 
End With 

'Debug.Print objXMLHTTP.ResponseText 

Dim domResponse as DOMDocument60 
Set domResponse = New DOMDocument60 
domResponse.loadXML objXMLHTTP.ResponseText 
Dim ixnStatus 
Set ixnStatus = domResponse.selectSingleNode("//status") 

If ixnStatus.Text = "OK" Then 
    Dim ixnDistance, ixnDuration 
    Set ixnDistance = domResponse.selectSingleNode("/DirectionsResponse/route/leg/distance/text") 
    Set ixnDuration = domResponse.selectSingleNode("/DirectionsResponse/route/leg/duration/text") 

    Debug.Print "Distance: " & ixnDistance.Text 'Miles 
    Debug.Print "Duration: " & ixnDuration.Text 'Days Hours Minutes 
End If 

Set domResponse = Nothing 
Set objXMLHTTP = Nothing 

Ich habe absichtlich zu verwenden XML anstelle von JSON, weil VBA ist nicht allzu praktisch mit JSON gewählt, und weder bin ich als VBJSON auf ein Modul ist, können Sie oft bezeichnet herunterladen, aber es hat ein wenig Lernen Kurve, vor allem, wenn Sie zuvor noch nie mit JSON gearbeitet haben. Ich glaube, XML ist "teurer" (weniger effizient), aber ich denke, es ist auch einfacher, mit Access VBA zu arbeiten.

+0

sMapURL war ein Artefakt. :) Ich habe es entfernt. – HK1