3

Google マップから 2 つの住所間の時間とマイル (運転マイル) を直接取得できると非常に有益なアプリケーションがあります。私は多くの Web サイトやドキュメントを調べましたが、どうすればよいのか完全に頭がおかしくなりました。

Microsoft Approach を使用して Google Maps API との接続に成功し、時間と距離の情報を抽出した人はいますか? 持っている場合、使用したコードを共有できますか。

私は、ボランティア ドライバー グループ (運転できない、タクシーを買う余裕がない、車を買う余裕がない人のための運転) のドライバー スケジューリング システムを設定しようとしています。

どんな助けでもいただければ幸いです

ジョン・ベイカー

4

1 に答える 1

8

ここにあなたがやりたいことをするためのいくつかのコードがあります。Google には、API の使用に関していくつかのライセンス要件/制限があることに注意してください。ここで得られた結果を Google マップで使用することになっています。こちらの使用制限をお読みください: https://developers.google.com/maps/documentation/directions/

遅延バインディングを使用するようにコードを変更しない限り、これには "Microsoft XML, v6.0" への参照が必要であることに注意してください。

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

私は意図的に JSON の代わりに XML を使用することにしました。なぜなら、VBA は JSON にあまり便利ではないからです。私もそうではありません。VBJSON と呼ばれることが多いダウンロード可能なモジュールがありますが、特に作業したことがない場合は少し学習曲線が長くなります。前に JSON を使用します。XML はより「高価」(効率が悪い) と思いますが、Access VBA での作業も簡単だと思います。

于 2012-04-12T16:55:40.650 に答える