Конвертируем OSM в другие форматы
В JOSM появилась возможность экспортнуть осм в гео-джейсон и это прекрасно, но если вам нужно конвертировать большой набор данных (размером с Москву например) делать это через JOSM неудобно.
Выгрузки
Если вам нужна область среднебольших размеров, можно воспользоваться готовыми выгрузками гислаба, геофабрики.
Выгрузки - это отлично но, иногда вам нужен другой набор атрибутов или другой набор слоев данных. В общем что делать если возникло желание сделать выгрузку самому.
Можно сделать выгрузки самому, например используя postgis и какой либо способ импорта данных осм в postgis, благо их немало. Но нужно ставить postgis, что не всегда хочется делать, и писать конфиг для импортера.
Qgis
В кугис есть возможность импортировать данные osm но с некоторыми оговорками. Основная проблема - отсутсвие поддержки мультиполигонов. Можно конечно импортровать границы как линии и полигонизировать их. Но это муторно.
Gdal
Следующий в списке - gdal. Если у вас стоит Qgis скорее всего у вас установлен и gdal. Среди поддерживаемых этой прекрасной библиотекой форматов есть и osm. http://www.gdal.org/drv_osm.html
У меня не получилось конвертировать osm сразу же в набор shape файлов или geojson, возможно это мжно сделать если отредактировать файл с настройками импорта osm для gdal. Но можно сделать и по другому.
geopackage
На первом этапе конвертируем osm в geopackage:
bzcat osm.xml.bz2 | ogr2ogr -f GPKG osm.geopackage /vsistdin/
Затем открываем его как источник данных в qgis, кнопка называется “добавить векторный слой”. Там просто выбираем наш osm.geopackage
остальное qgis сделает сам. В сгенерированном geopackage’е будет 5 или 6 слоев. С полигонами/мультиполигонами, веями, точками, веями собранными из отношений маршрутов, и слой с прочей геометрией из других отношений.
Фильтрация и экспорт
Теперь отфильтруем данные, например домики с адресами. В слое с мультиполигонами есть поле building
но нет addr:housenumber
. Открываем свойства слоя, в источнике данных добавляем фильтрацию “building” = yes
. Вообще geopackage это определенным образом структурированный файл spatiallite (sqlite) то-есть, можно работать с ним как с базой данных.
Остальные теги так же записаны, но простым текстом, поэтому придется их разбирать.
Формат записи: "key"=>"value", "key2"=>"value2"
(Это постгрешный hstore)
Чтобы получить например подписи к зданиям, можно использовать выражение
regexp_substr(more_tags, '"addr:housenumber"=>"([\\d]+)"')
Так же его можно использовать в калькуляторе полей чтобы получить отдельную колонку, с разобранными данными.
Дальше полученный слой можно сохранить в любом понравившемся вам формате.
Итоги
Не сказать чтобы способ всем хорош, либо куча ручного труда, в прочем с постоянным визуальным контролем, либо надо писать конфиг для gdal либо скрипты. Это не так сложно но пока вы готовите данные придется постоянно перенарезать данные.
Тоесть постоянно запускать ogr2ogr ждать пока он перенарежет все слои, потом открыв это в qgis вы понимаете что что-то забыли и вам надо снова все повторять. Если импорт разовый и вы не планируете как-то это автоматизировать, то проще “нарезать” нужные слои с атрибутами в qgis.