Данные уже вытащили из PDF, - на мой взгляд самое мерзкое занятие.
Вы поставили тег
Excel, и я полагаю вам нужен
запрос на VBA к геокодеру через функцию (в примере указан геокодер Nominatim,
на nginx не разворачивается, только на Apache запросы можно делать не чаще в 1 сек).
Function GetResponse(ByVal request As String, _
Optional ByVal lowerCase As Boolean = True) As String
'3456789012345678901234567890123456h8nor@ya567890123456789012345678toster56789
Const TIMEOUT As Double = 6 ' sec
Const uRL As String = "https://nominatim.osm.org/search?county=RU&format=geocodejson&q="
If lowerCase Then request = LCase(request)
Static winhttp As Object ' WinHttpRequest
On Error Resume Next
If winhttp Is Nothing Then
Set winhttp = CreateObject("WinHttp.WinHttpRequest.5.1")
Else
If Not winhttp.Status = 200 Then ' Error
Set winhttp = Nothing
End 'or MsgBox "to many requests", vbCritical: Exit Function
End If
End If
' Replace characters to "%"+HEX in UTF-8 (and SPACE to PLUS), except DIGIT (%30-%39),
' except ALPHA (%41-%5A and %61-%7A), hyphen (%2D), period (%2E), underscore (%5F), tilde (%7E)
request = Replace(Replace(request, ",", ",%20"), "%20-,", "")
' The True <- specifies async behaviour
winhttp.Open "GET", uRL & request, True: DoEvents
' Add Headers
winhttp.SetRequestHeader "Pragma", "private"
winhttp.SetRequestHeader "Cache-Control", "no-store"
winhttp.Send: DoEvents
If Not winhttp.WaitForResponse(TIMEOUT) Then
Debug.Print "timeout", uRL & request: Exit Function
ElseIf winhttp.Status = 429 Then
Debug.Print "to many requests", uRL: Exit Function
End If
GetResponse = winhttp.responseText
' Check response length
If Not Len(GetResponse) > 189 + Len(Replace(request, "%20", " ")) Then
Debug.Print uRL & request
End If
End Function
В ответе будут объекты в формате GEOJSON, которые также нужно будет обработать. Рекомендую выбирать тип точек по следующим значениям: "city", "town", "village", "hamlet", "isolated_dwelling", "locality".
Если карта будет интерактивная, рекомендую использовать плагин Leaflet (не лагает как Гугл. Кстати, к геокодеру Гуглу можно обращаться руками через
сайт).
+
Как использовать отладчик:
- Открыть MS Excel
- Открыть VBA в приложении (Alt+F11)
- Выбирать в меню Insert -> Module
- Скопировать функцию, и написать её вызов в отдельной процедуре
- Нажать F5 для выполнения процедуры