← перейти на главную

Координаты границ административных округов

Итак, понадобилось получить координаты всех административных единиц Московской области. задача не новая, значит кто-нибудь да решал её и скорее всего поделился своими находками. Спрашиваем гугл, в результатах обнаруживаем уже все готовое: http://www.gadm.org/country - радостно скачиваю .kmz, открываю в Google Earth. Сразу видно минусы: нет разбивки по регионам, устаревшие данные, отсутствуют названия. М-да, перспектива редактировать границы, состоящих из множества точек, не радует.

снимок программы Google Earth

Какие есть еще варианты?

Яндекс карты

Предоставляют данные только по границам регионов, данные берут из OSM

Wikimapia

Проект развивается энтузиастами, карту берут от Google и добавляют свой информацтонный слой. Реализован и придуман двумя разработчиками из России. Вся необходимая инфррмация на карте есть. Но как её получить? Дампов нет, но присутствует API, на число запросов к которому есть ограничение: не более 100 запрос в 5 минут. Тут достаточно подобрать категорию и через place.getbyarea найти все административные единицы. Список категорий выложил в Gist, либо пользуйтесь category.getall. Только вот нашел всего ничего объектов по категории 44639 (административная единица второго уровня). Чей глюк не знаю, на карте все правильно отображается. PS Если разберетесь - сообщите, спасибо.

OpenStreetMap

OpenStreetMap - карта, которая редактируется пользоватетями. У проекта есть свой формат XML, с подробной вики по полям. Есть хорошее описание структуры osm файлов на хабре. Последние обновления по России выкладываются на сайте http://gis-lab.info/projects/osm_dump/, есть общий файл по России, а также разбивки по регионам. Но лучше скачать общий файл, так как в разбивках могут отсутствовать некоторые сущности (way, node). Лучше взять пожатый вариант, ибо работать с ним проще и объем много меньше.

Для работы с дампами есть отличные утилиты:

  • osmconvert - преобразует формат файла, позволяет оставить определенную географическую область
  • osmfilter - удаляет все, что не подпадает под фильтр

Так как меня интересовало только Подмосковье, то задаем крайние точки прямоугольной области (долгота, широта), потом сохраняем ноды, который выходят за пределы выбранной области, потому что могут присутствовать в связах (relations) и немного чистим

osmconvert RU.osm.pbf -b=34.9704,54.2109,40.3537,57.0977 --drop-author --complete-ways --complex-ways --drop-version --out-o5m -o=RU_MO.o5m

Дальше выбираем только административные округа (admin_level=6), остальное удаляем. Готово.

osmfilter RU_MO.o5m --keep="admin_level=6" -o=RU_MO_bound.osm

Работать с выходным xml-файлом хоть и можно (imposm), но накладно. Для таких случаев есть PostGIS, надстройка PostgreSQL. Позволяет запрашить и хранить географиеские объекты.

После установки и созданием базы, данные из xml требуется перенести в таблицы, это делается, помимо прочих, утилитой osm2pgsql. Теги, которые следует перенести из файла, задаются в файле *.style

osm2pgsql RU_MO_bound.osm -d osm_db -U postgres -s -S ~/bound.style

Результат

снимок страницы с отмеченными границами МО из OSM

Полезные ссылки

Задание на карте граничного прямоугольника (bbox) Справочник по функциям PostGIS 2.0

Теги