Pull to refresh

Как вырезать сабсет города (любого отношения) из OSM данных

Reading time2 min
Views12K
Однажды мне потребовалось получить из сырых ОСМ данных чистый сабсет города (потому что так удобно, компактно и просто красиво). К моему удивлению я не нашел готового рецепта, из-за чего для выполнения этой задачи потребовалось немного попотеть.

Ввиду вышеизложенного считаю своим долгом поделиться накопленным опытом.

Кишинев OSM

Допустим я хочу получить сабсет Кишинёва (почему? … там тепло, там мой дом, там моя мама)

Planet.osm нас, конечно, не интересует, зато есть geofabrik, но там планета нарезана на достаточно крупные шматки — http://download.geofabrik.de/europe/moldova.html

Значит, граница города есть в сырых данных.

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

Иии… теперь в игру вступает osmosis.

У нас есть осм всея Молдовы и ограничивающий полигон Кишинёва, этого вполне достаточно для получения сабсета города из сырого XML (OSM) файла:

osmosis --read-xml file="moldova.osm" --bounding-polygon file="kishinev.poly" --write-xml file="kishinev.osm"

Аналогично можно выковырять данные из PBF (Protocolbuffer Binary Format) файла:

osmosis --read-pbf file="moldova.osm.pbf" --bounding-polygon file="kishinev.poly" --write-xml file="kishinev.osm"

Немногим больше про osmosis можно почитать здесь.

Ну а готовый сабсет нужно срочно открывать в JOSM или импортировать в личный проект!

Кишинев JOSM

UPD:


Как заметил zverik, всё вышеперечисленное будет гораздо проще сделать при помощи *osmium-tool* (оф доки)
1. Скачать датасет страны
2. Извлечь из него границу города
osmium getid -r -t moldova-latest.osm.pbf r1691801 -o kishinev-boundary.osm

3. Извлечь город из датасета
osmium extract -p kishinev-boundary-with-tags.osm moldova-latest.osm.pbf -s simple -o kishinev.osm


Обратите внимание на флак -s simple
Это стратегия извлечения, и всего их три:
1. -s simple — обрезать дороги по границе
2. -s complete_ways — не обрезать пограничные дороги (по умолчанию)
3. -s smart — извлекать зависимости пограничных дорог

Формат выходного файла определяется его расширением в команде.

OSMIUM — крайне мощный, удобный и полезный инструмент, которым приятно пользоваться.
Tags:
Hubs:
+22
Comments17

Articles

Change theme settings