воскресенье, 17 ноября 2019 г.

Получение координат зданий в населенном пункте из источника OpenStreetMap

Получение координат зданий в населенном пункте из источника OpenStreetMap

В открытой базе данных https://www.openstreetmap.org/ содержатся географические координаты множества зданий. Используя эту информацию можно получить базу соответствия:
Адрес Координаты.
Для стран СНГ данные в виде файлов PBF размещены на сайте https://needgeo.com/
Файлы разбиты по областям


Скачиваем себе на ПК файл, который содержит искомый данные нужного города. Я для примера возьму файл по Самарской области для получения координат домов для города Самара.
Создав на жестком диске папку «Координаты», положим туда файл RU-SAM.pbf.
Для извлечения из этого файла координат адресов понадобятся утилиты:
osmconvert (https://wiki.openstreetmap.org/wiki/RU:Osmconvert)
osmfilter (https://wiki.openstreetmap.org/wiki/Osmfilter)
Скачиваем их и помещаем в ту же созданную ранее папку «Координаты». Для ОС Windows 64x файлы будут такие: osmconvert64.exe и osmfilter.exe
Для начала вырезания из файла RU-SAM.pbf данных необходимо указать область координат, которую требуется вырезать. Область координат указывается в виде набор координат полигона. Область координат можно сформировать на сайте http://geojson.io/ с помощью инструмента «Draw a polygon»


Чтобы понять, что выделять можно воспользоваться картами от Яндекс. Здесь при поиске города (населенного пункта на карте выделяются его границы.
Для Самары:


Повторяем что-то подобное на сайте http://geojson.io/. Главное здесь – не захватить данные других городов, где могут повторятся адреса. Улица Ленина, например, есть везде, в каждом населенном пункте.


Набор получившихся координат справа необходимо преобразовать к виду, который поймет программа osmconvert. Для этого создается обычный текстовый файл city.poly в который вписываются координаты полигона города. Пример содержимого файла для Самары:
city
1
              50.1416015625               53.373497900586855
              50.17181396484375           53.30297979468481
              50.15533447265625           53.238920640924974
              50.05096435546875           53.19616119954287
              50.020751953125             53.16324027106289
              50.22125244140625           53.1335898292448
              50.32012939453125           53.19122467094173
              50.34759521484375           53.29641404214567
              50.34210205078125           53.39479437775073
              50.2130126953125            53.46516070239169
              50.07843017578125           53.50438429010248
              50.009765625                53.46025520362287
              50.06744384765625           53.420990805007634
              50.1416015625               53.373497900586855
END
END
Основное здесь – это координаты долготы и широты, взятые с сайта http://geojson.io/ после выделения полигона города.
Файл с координатами полигона города city.poly нужно положить в ту же папку «Координаты».
Переходим в режим командной строки и выполняем последовательно три команды:
osmconvert64.exe -B=city.poly --all-to-nodes RU-SAM.pbf -o=1samara.o5m
osmfilter.exe 1samara.o5m --keep="building AND addr*" --drop-author --drop-version -o=2samara.o5m
osmconvert64.exe 2samara.o5m -o=3samara.csv --csv-headline --csv-separator=; --csv="@id addr:street addr:housenumber @lat @lon"


После этого в папке «Координаты» будут созданы файлы: 1samara.o5m, 2samara.o5m и 3samara.csv
Первые два файла можно удалить. Они промежуточные. Третий файл 3samara.csv содержит нужные нам данные: Его можно открыть в EXCEL. 
Для EXCEL 2016 переходим во вкладку «Данные»  «Получение внешних данных»  «Из текста». Выбираем наш итоговый файл (3samara.csv), Проходим мастер импорта текста. На втором этапе установить галочку «точка с запятой».


Получаем представление адресов и координат, которое можно использовать. В файле есть информация о ID адреса в базе OpenStreetMap, название улицы, номер дома и координаты.