Комментарии 17
Зашёл в надежде обнаружить какую-то технику построения запросов а обнаружил вырезку по полигону.
Современный и быстрый способ — использовать Osmium Tool. Аналог команды, которую привёл автор:
osmium extract -p kishinev.poly moldova.osm.pbf -o kishinev.osm
(Кстати, кто вообще в наше время использует несжатый текстовый формат osm xml? Есть же куча библиотек — тот же osmium — чтобы не мучаться.)
Ну так вот, а теперь к задаче, которая определена в заголовке, но про которую в статье молчок. Как вырезать кусок из файла OSM, определённый отношением границы внутри этого файла? В случае с osmium tool, понадобятся две команды: получить границу из отношения Кишинёва и вырезать данные по ней.
osmium getid -r moldova.osm.pbf r1748490 -o kishinev_boundary.osm
osmium extract -p kishinev_boundary.osm moldova.osm.pbf -o kishinev.osm.pbf
Всё по документации. Там ещё много интересного: преобразование форматов, фильтрация по тегам, получение данных на момент в прошлом, работа с файлами изменений и тому подобное. Osmosis нынче используют только и исключительно для автообновления базы osm2pgsql, да и то только потому, что альтернативу ещё не успели написать. Хотя для рендеринга уже есть скрипты на основе питоновского интерфейса к osmium.
К сожалению, я варюсь в собственном соку и собираю нужную мне информацию по крупицам :)
Подскажите, в чем преимущество PBF over OSM кроме размера?
Я работаю с небольшими датасетами, и в моем случае XML выглядит гораздо удобнее и предпочительнее. Ибо что может быть проще чем открыть файл в текстовом редакторе и найти нужные отношения/пути/узлы/etc…
Cуществует ли способ/тулза чтобы ковыряться в PBF так же легко и быстро как просматривать OSM в саблайме?
Основные преимущества — размер и бинарный формат. За их счёт чтение выполняется на порядок быстрее. Для кода разницы вообще никакой, особенно если используете библиотеку типа osmium или любую другую, умеющую в protobuf. Альтернативный вариант — xml, сжатый с помощью bzip2, но это тоже теперь считается медленно и вдвое больше pbf.
Небольшие датасеты в процессе работы имеют тенденцию вырастать — например, «хорошо Кишинёв сделал, а можешь то же самое на всех остальных городах».
Ковыряться в геоданных в текстовом редакторе просто не нужно. XML в саблайме — это совсем не легко и быстро. Это бороться с тонной визуального мусора и держать в голове всю структуру. Зачем, если можно открыть файл в JOSM (который умеет и pbf, если подключить одноимённый модуль) и пользоваться и визуальным отображением, и супер-мощным поиском-фильтрацией, и редактором, наконец.
Конечно работать с датасетами размера Planet.osm, или даже Moldova.osm уже довольно сложно и медленно, поэтому я и опустился до уровня небольшого города — 50..100 МБ
Касательно нужно ли в принципе ковыряться в геоданных… т.к. я пишу свой велосипедный тайлгенератор (просто так 4fun), самостоятельно готовлю для него данные и далее по конвееру, для меня это важно. К тому же данные в OSM нерегулярные, часто содержат ошибки вроде дороги из одной точки, дома из двух, да и использование тегов тоже не всегда однозначное )
Но в общем да, PBF + JOSM норм альтернатива для OSM + Sublime )
А почему обрабатываете файлы osm с нуля, а не загружаете данные в базу с помощью osm2pgsql? Там все эти мелкие проблемы давно решены, плюс получите обновления в реальном времени и выборки данных по тайлам.
А можно поподробнее на счет обновлений в реальном времени и выборки по тайлам? сейчас я обновляю все перезаписью базы, а тайлы выбираю самописным алгоритмом.
хотя оно импортирует много ненужной для моих целей инфы
Документацию не читай, в не доработках обвиняй — github.com/openstreetmap/osm2pgsql/blob/master/default.style
А можно поподробнее на счет обновлений в реальном времени
Режим
--slim
он будет хранить в базе сырые данные ОСМ, что позволит обновлять минутными изменениями. Но безупречно работает только для планеты целиком. На обрезках может случиться что будут задействованы объекты которых у вас нет в базе, но они засветились в изменениях.И уже из нее вырезать сабсет по границе.
Просто мысли вслух — Возможно удастся ускорить вырезку из planet.osm если проводить ее в 2 этапа — сначала вырезать участок прямоугольной формы (теоретически это должно быть быстро), а потом из него уже вырезать участок нужного вам региона — СЗ России+Норвегия…
Как вырезать сабсет города (любого отношения) из OSM данных