Как создать географический инструмент для получения координат широты и долготы для адресов с помощью Excel VBA

Поделись сейчас:

Следуйте этой статье и создайте свой собственный географический инструмент, с помощью которого вы сможете получить координаты широты и долготы для адреса. Подобные преобразователи обычно используются брокерами по недвижимости.

Скачать сейчас

Если вы хотите сtart использовать программное обеспечение как можно скорее, то вы можете:

Загрузите программное обеспечение сейчас

В противном случае, если вы хотите сделать своими руками, вы можете прочитать содержимое ниже.

Давайте подготовим графический интерфейс

Все, что вам нужно, это один лист Excel, и вы можете назвать лист в соответствии с вашими потребностями. В этом примере я использую имя листа по умолчанию «Лист1». Следующим шагом будет добавление необходимых заголовков на этот лист. Конвертер широты и долготы дает точный результат для адреса, который мы передаем, если входные данные включают пригород, штат, postкод и страна. Как показано на изображении, подготовьте заголовки. Давайте добавим широту и долготу в качестве последних двух столбцов. Нам также нужна кнопка, позволяющая пользователю выполнить преобразование. Итак, давайте вставим фигуру и заполним ее цветом, чтобы она выглядела как кнопка.Подготовьте графический интерфейс

Давайте сделаем его функциональным

Предоставленный здесь скрипт следует скопировать в новый модуль. Не забудьте сохранить книгу как файл книги с поддержкой макросов. Подпрограмма «Найти это» должна быть прикреплена к кнопке, которую мы только что создали.

Давайте проверим это

Добавьте адрес вместе с другой информацией в соответствующие столбцы. Нажмите кнопку, чтобы запустить макрос, который будет отображать широту и долготу для всех адресов, перечисленных на листе. Макрос будетtart в строке 2 и будет продолжать работать, пока не достигнет пустой строки.Добавьте адрес и нажмите кнопку

Как это работает?

С помощью скрипта мы создали две функции. Один для получения значения Lat, а другой для получения значения Long. Используя цикл FOR, мы передаем каждый адрес этим функциям и отображаем результат на экране.

Сценарий

Function GETLAT(v_address As String, v_suburb As String, v_state As String, v_postcode As Long)
    
    Dim URl As String, lastRow As Long
    Dim xmlHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
    
    URl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" & Application.WorksheetFunction.Substitute(v_address, " ", "+") & Application.WorksheetFunction.Substitute(v_suburb, " ", "+") & Application.WorksheetFunction.Substitute(v_state, " ", "+") & Application.WorksheetFunction.Substitute(v_postcode, " ", "+") & ",Australia"
    
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
    xmlHttp.Open "GET", URl, False
    xmlHttp.setRequestHeader "Content-Type", "text/xml"
    xmlHttp.send
    
    Set html = CreateObject("htmlfile")
    html.body.innerhtml = xmlHttp.ResponseText
    v_string = html.body.innerhtml
    x = InStr(1, v_string, "<LAT>")
    If x <> 0 Then
        y = InStr(x + 5, v_string, "</LAT>")
        GETLAT = Mid(v_string, x + 5, y - (x + 5))
    End If
End Function

Function GETLNG(v_address As String, v_suburb As String, v_state As String, v_postcode As Long)
    
    Dim URl As String, lastRow As Long
    Dim xmlHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
    
    URl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" & Application.WorksheetFunction.Substitute(v_address, " ", "+") & Application.WorksheetFunction.Substitute(v_suburb, " ", "+") & Application.WorksheetFunction.Substitute(v_state, " ", "+") & Application.WorksheetFunction.Substitute(v_postcode, " ", "+") & ",Australia"
    
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
    xmlHttp.Open "GET", URl, False
    xmlHttp.setRequestHeader "Content-Type", "text/xml"
    xmlHttp.send
    
    Set html = CreateObject("htmlfile")
    html.body.innerhtml = xmlHttp.ResponseText
    v_string = html.body.innerhtml
    
    x = InStr(1, v_string, "<LNG>")
    If x <> 0 Then
        y = InStr(x + 5, v_string, "</LNG>")
        GETLNG = Mid(v_string, x + 5, y - (x + 5))
    End If
End Function

Sub FindThis()
    For r = 2 To 5
        Range("F" & r).Value = GETLAT(Range("A" & r).Value, Range("B" & r).Value, Range("C" & r).Value, Range("D" & r).Value)
        Range("G" & r).Value = GETLNG(Range("A" & r).Value, Range("B" & r).Value, Range("C" & r).Value, Range("D" & r).Value)
    Next r
End Sub

Если вы не получаете должных результатов с помощью скрипта, вероятной причиной может быть поврежденный Excel. Затем вы можете использовать Инструмент для восстановления файлов Excel такие как DataNumen Excel Repair исправить Эксель.

Об авторе:

Ник Випонд — эксперт по восстановлению данных в DataNumen, Inc., которая является мировым лидером в области технологий восстановления данных, включая исправить проблему с документом и программные продукты для восстановления Outlook. Для получения дополнительной информации посетите www.datanumen.com

Поделись сейчас:

Комментарии закрыты.