Геокод Google API в Excel VBA возвращает пустое - PullRequest
0 голосов
/ 02 февраля 2019

Я создал функцию Excel VBA для геокодирования адреса.Он работал в прошлом году.

Google запустил новый процесс выставления счетов, и код не работает.

ввод: адрес
вывод: широта, долгота

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

getGoogleMapsGeocode = ""

Set xhrRequest = New XMLHTTP60
sQuery = "https://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address="
sQuery = sQuery & Replace(sAddr, " ", "+") & "&key=MY-API-KEY"

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

Я заставил его работать, изменив один старый ключ сервера, но это вызвало другой вопрос.

Недавно я зарегистрировал два API-ключа, которые не работают.Однако старый ключ сервера работает.В чем разница между ключом API и ключом сервера?

enter image description here

1 Ответ

0 голосов
/ 07 апреля 2019

Геокодирование VBA Excel 2010

Спасибо моему брату Эду за помощь!

Опция Явная

Функция GetCoordinates (Address As String) AsString

'This function returns the latitude and longitude of a given address using the Google Geocoding API.

'Функция использует «простейшую» форму API геокодирования Google (отправка только параметра адреса), поэтому дополнительные параметры, такие как границы, язык, регион и компоненты, НЕ используются.«В случае нескольких результатов (например, два города с одним и тем же именем), функция» возвращает ПЕРВОЕ ВОЗНИКНОВЕНИЕ, поэтому будьте внимательны при вводе адреса (совет: используйте название города и «почтовый индекс, если они доступны).

'NOTE: As Google points out, the use of the Google Geocoding API is subject to a limit of 40,000

'запросов в месяц, поэтому будьте осторожны, чтобы не превысить этот лимит.Для получения дополнительной информации проверьте: 'https://cloud.google.com/maps-platform/pricing/sheet

'In order to use this function you must enable the XML, v3.0 library from VBA editor:

' Перейдите в Инструменты -> Ссылки -> проверьте Microsoft XML, v3.0.«Если у вас нет v3.0, используйте любую другую его версию (например, v6.0).

'2018 Update: In order to use this function you will now need a valid API key.

» Проверьте следующую ссылку, которая поможет вам получить бесплатный ключ API:'https://www.myengineeringworld.net/2018/02/how-to-get-free-google-api-key.html

'2018 Update 2 (July): The EncodeURL function was added to avoid problems with special characters.

' Это общая проблема с адресами из Греции, Сербии, Германии и других стран.

'Written By:    Christos Samaras

'Дата: 12/06/2014«Последнее обновление: 09/08/2018» E-mail: xristos.samaras@gmail.com «Сайт: https://www.myengineeringworld.net» -----------------------------------------------------------------------------------------------------

'Declaring the necessary variables.

'Первые 2 переменные, использующие 30 вконец, соответствующий библиотеке «Microsoft XML, v3.0» в VBA (msxml3.dll).Если вы используете любую другую его версию (например, v6.0), объявите эти переменные как XMLHTTP60 и DOMDocument60 соответственно.Dim ApiKey в виде строки Dim в качестве нового XMLHTTP30 Dim в виде нового DOMDocument30 Dim StatusNode в качестве IXMLDOMNode, в LatitudeNode в качестве IXMLDOMNode, в LongitudeNode в качестве IXMLDOMNode

'Set your API key in this variable. Check this link for more info:

'https://www.myengineeringworld.net/2018/02/how-to-get-free-google-api-key.html' **************************************************************************************************************** ApiKey = "Ваш ключ API находится здесь!"'пример: ApiKey = "lxI800lklv3sdf3v5F6 ........."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...