Pull to refresh

Comments 17

UFO just landed and posted this here
Да тут полно земляков )))
А что за инструмент разрабатываете, для чего вам нужны границы города?
Да вот пилю в свободное время свой рендер для OSM — onemap.md
Ох ужас какой. Osmosis старый, дико медленный и вообще не поддерживается автором.

Современный и быстрый способ — использовать 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? Там все эти мелкие проблемы давно решены, плюс получите обновления в реальном времени и выборки данных по тайлам.

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

А можно поподробнее на счет обновлений в реальном времени и выборки по тайлам? сейчас я обновляю все перезаписью базы, а тайлы выбираю самописным алгоритмом.
хотя оно импортирует много ненужной для моих целей инфы

Документацию не читай, в не доработках обвиняй — github.com/openstreetmap/osm2pgsql/blob/master/default.style
А можно поподробнее на счет обновлений в реальном времени

Режим --slim он будет хранить в базе сырые данные ОСМ, что позволит обновлять минутными изменениями. Но безупречно работает только для планеты целиком. На обрезках может случиться что будут задействованы объекты которых у вас нет в базе, но они засветились в изменениях.
А можно ли сразу как-то загрузить файл *.osm.pbf нужной области (без предварительной загрузки Planet.osm)?
Конечно, здесь вы можете скачать нужную область — http://download.geofabrik.de/
И уже из нее вырезать сабсет по границе.
Я так и делаю обычно при создании карт для навигатора. Но если это две страны (например Россия и Норвегия), то приходится: 1) скачивать весь Северо-запад России, и всю Норвегию, 2) объединять карты, из-за чего при маршруторизации на границе возникают ошибки. Поэтому было бы проще и лучше загрузить только нужную область, не зависящую от административных границ.
Кэп подсказывает что вам было удобнее всего самостоятельно извлечь данные из planet.osm либо придумать как сшивать дороги разрезанные границей (когда-то в одном проекте мы так и поступали, потому что данные приходили по регионам, но «гейтвеи» нам поставляли в отдельной таблице, так что это были тривиально).

Просто мысли вслух — Возможно удастся ускорить вырезку из planet.osm если проводить ее в 2 этапа — сначала вырезать участок прямоугольной формы (теоретически это должно быть быстро), а потом из него уже вырезать участок нужного вам региона — СЗ России+Норвегия…
Sign up to leave a comment.

Articles

Change theme settings