Код для получения GPS-координат с адреса (VB6 / VBA / VBScript) - PullRequest
2 голосов
/ 11 ноября 2010

Я считаю, что API Google позволяет вам получить координаты для данного адреса. Однако, большинство (или я должен сказать все) примеров, которые я нашел, не для 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

Ответы [ 2 ]

4 голосов
/ 12 ноября 2010

Это должно сделать работу. Вам нужно добавить ссылку на библиотеку MSXML6 (Microsoft XML, v6.0) через Инструменты> Ссылки в Excel

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

Единственные реальные отличия от вашего примера:

  • изменение URL и параметров запроса для использования Google API
  • обработка ответа как XML-документа и использование XPath для извлечения требуемых результатов

Очевидно, что в моем коде нет обработки ошибок, но она должна дать вам представление о том, что вам нужно для использования API. Вы определенно хотите обратиться к документации API , чтобы узнать об ограничении скорости и т. Д.

0 голосов
/ 12 ноября 2010

Спасибо за этот код! Работает отлично. Спасибо за внимание к ограничениям скорости. Вот что говорит Google:

Использование API геокодирования Google ограничено 2500 запросами геолокации в день. (Пользователь API Карт Google Premier может выполнять до 100 000 запросов в день.) Это ограничение применяется для предотвращения злоупотреблений и / или перепрофилирования API геокодирования, и это ограничение может быть изменено в будущем без предварительного уведомления. Кроме того, мы применяем ограничение скорости запросов, чтобы предотвратить злоупотребление службой. Если вы превысили 24-часовой лимит или иным образом злоупотребили службой, API геокодирования может временно перестать работать для вас. Если вы продолжите превышать этот лимит, ваш доступ к API геокодирования может быть заблокирован. Примечание. API геокодирования можно использовать только вместе с картой Google; Результаты геокодирования без отображения их на карте запрещены. Подробные сведения о разрешенном использовании см. В разделе «Условия лицензии на использование API Карт».

...