2

Google API を使用すると、特定の住所の座標を取得できると思います。ただし、私が見つけたほとんどの (またはすべてと言うべきです) 例は、vb 用ではありません。通常、私を混乱させるのはJavaScriptの例です。

これは、ジオコーディング サービスを使用するコードです。これはうまくいきます。自分で直接 Google マップにクエリを実行したいだけです。

Public Function fgGetLatAndLongUsingAddress(sAddress As String) As String

    'This function works best with a complete address including the zip code
    Dim sResponseText As String, sReturn As String

    sReturn = "none"

    Dim objHttp As Object, sQuery As String
    sQuery = "http://rpc.geocoder.us/service/csv?address=" & Replace(sAddress, " ", "+")
    Set objHttp = CreateObject("Msxml2.ServerXMLHTTP")
    objHttp.Open "GET", sQuery, False
    objHttp.send
    sResponseText = objHttp.ResponseText
    gsLastLatLongResponseText = sResponseText
    Set objHttp = Nothing


    If Len(sResponseText) > 0 Then
        If InStr(sResponseText, "Bad Request") > 0 Then
            'Do Nothing
        ElseIf InStr(sResponseText, "couldn't find this address") > 0 Then
            'Do Nothing
        Else
            If InStr(sResponseText, vbCrLf) > 0 Then
                'We got more than one result
            End If
            If InStr(sResponseText, ",") > 0 Then
                Dim aryInfo() As String
                aryInfo = Split(sResponseText, ",")
                sReturn = aryInfo(0) & "," & aryInfo(1)
            End If
        End If
    End If


    fgGetLatAndLongUsingAddress = sReturn

End Function
4

2 に答える 2

4

これでうまくいくはずです。[ツール] > [Excel の参照] を使用して、MSXML6 ライブラリ (Microsoft XML、v6.0) への参照を追加する必要があります。

Option Explicit

Function getGoogleMapsGeocode(sAddr As String) As String

Dim xhrRequest As XMLHTTP60
Dim sQuery As String
Dim domResponse As DOMDocument60
Dim ixnStatus As IXMLDOMNode
Dim ixnLat As IXMLDOMNode
Dim ixnLng As IXMLDOMNode


' Use the empty string to indicate failure
getGoogleMapsGeocode = ""

Set xhrRequest = New XMLHTTP60
sQuery = "http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address="
sQuery = sQuery & Replace(sAddr, " ", "+")
xhrRequest.Open "GET", sQuery, False
xhrRequest.send

Set domResponse = New DOMDocument60
domResponse.loadXML xhrRequest.responseText
Set ixnStatus = domResponse.selectSingleNode("//status")

If (ixnStatus.Text <> "OK") Then
    Exit Function
End If

Set ixnLat = domResponse.selectSingleNode("/GeocodeResponse/result/geometry/location/lat")
Set ixnLng = domResponse.selectSingleNode("/GeocodeResponse/result/geometry/location/lng")

getGoogleMapsGeocode = ixnLat.Text & ", " & ixnLng.Text

End Function

あなたの例との唯一の本当の違いは次のとおりです。

  • Google API を使用するようにクエリの URL とパラメータを変更する
  • 応答を XML ドキュメントとして扱い、XPathを使用して必要な結果を抽出する

明らかに、私のコードにはエラー処理がまったくありませんが、API を使用するために何が必要かを理解できるはずです。APIドキュメントを自分で調べて、レート制限などについて調べてください。

于 2010-11-11T22:54:40.870 に答える
0

そのコードをありがとう!それはうまくいきます。レート制限についてご指摘いただきありがとうございます。これがGoogleが言わなければならないことです:

Google Geocoding API の使用には、1 日あたり 2,500 件のジオロケーション リクエストのクエリ制限が適用されます。(Google Maps API Premier のユーザーは、1 日あたり最大 100,000 のリクエストを実行できます。) この制限は、Geocoding API の悪用や転用を防ぐために適用されます。この制限は、将来予告なしに変更される可能性があります。さらに、サービスの悪用を防ぐためにリクエスト レート制限を適用します。24 時間の制限を超えるか、サービスを悪用すると、Geocoding API が一時的に機能しなくなる可能性があります。この制限を超え続けると、Geocoding API へのアクセスがブロックされる可能性があります。注: Geocoding API は、Google マップと組み合わせてのみ使用できます。結果を地図上に表示せずにジオコーディングすることは禁止されています。許可されている使用方法の詳細については、Maps API サービス利用規約のライセンス制限を参照してください。

于 2010-11-12T16:49:44.740 に答える