Как стать автором
Обновить

Комментарии 23

ЗакрепленныеЗакреплённые комментарии

Не уловил, как можно при описании исследования данных в OSM вообще не упомянуть https://overpass-turbo.eu/? Как по мне, сначала идем туда, изучаем разметку, пишем запросы. И потом уже осмозис (или другая утилита, например паркетизер).

В публикации есть несколько примеров где используются геоданные, понятное дело что osmosis тут и не причём - это могло быть реализовано и с помощью других инструментов, да и явно не одного... но всё же, главное задача, а инструмент это уже дело наживное, поэтому пишите о других примерах где и как геоданные используются.

Думаю много можно найти примеров необычного приложения.

Спасибо за подробный разбор osmosis

это действительно "швейцарский нож" для OSM дампов, только его больше не развивают.

Из примеров задач - поиск лучшего места для жилья, по моему мнению, отличное применение для геоданных из OpenStreetMap

Почему не развивают? Зашёл на GitHub в историю коммитов: https://github.com/openstreetmap/osmosis/commits/main/ , - пациент скорее жив, чем мёртв.

Текущая версия 0.48 появилась в 2020 году, если я не ошибаюсь, - да не самая большая динамика (раньше релизы были чаще), но и не так чтобы древность.

Но если Вы имеете в виду что новые команды вряд ли появятся, то соглашусь, я этого тоже не жду.

Почему не развивают?

К сожалению, только поддержка проекта. В 2020-2022 я провел много времени разбирая исходники этого проекта, чтобы написать запись PBF в PostGIS шустрее и с разбиением данных в таблицы по H3 index.

Надеюсь они приняли Pull Request.

Я не делал PR в osmosis. Не думаю что мой код с учетом статуса проекта приняли бы, там и внешние утилиты вызываются к тому же. Просто выложил openstreetmap_h3 на GitHub.

С жильём согласен, можно много примеров привести где OSM пригодится, вижу у Вас много публикаций на эту тему - тут добавить нечего.

Мне ещё вот эта публикация нравится: 1 000 000 жилых домов России. Но она не совсем про OSM.

Мне ещё вот эта публикация нравится

Данные о годах постройки домов и типовых проектов зданий, как оказалось, есть в OSM. Для спальных районов Москвы данных прилично, а в остальных зданиях start_date и design:ref редкость.

А так в других городах по РФ действительно для аналитики парсят ГИС ЖКХ. Так делали в параллельном проекте на одной из моих предыдущих работ.

Пример бы как выгрузить полигоны райнов города, было бы удобно

osmosis \
  --rb file.osm.pbf \
  --wkv boundary.administrative \
  --tf reject-relation \
  --un \
  --wx boundary.xml

Так попробуйте: берём файл --rb, делаем фильтр по административным границам boundary.administrative, отбрасываем все отношения reject-relation, оставляем точки из которых состоят линии границ --un.

Для более детальной настройки используйте фильтр по admin_level см. boundary.

Получим что-то в духе:

...
  <node id="3467344978" version="1" timestamp="2015-04-20T08:40:51Z" uid="0" user="" lat="57.080591" lon="65.4632397"/>
  <node id="3802047459" version="2" timestamp="2019-06-25T10:08:28Z" uid="0" user="" lat="57.0924709" lon="65.5657055"/>
  <node id="4324760740" version="2" timestamp="2016-07-29T04:43:09Z" uid="0" user="" lat="57.1731187" lon="65.6030412"/>
  <way id="550959671" version="2" timestamp="2022-05-02T16:22:26Z" uid="0" user="">
    <nd ref="716821476"/>
    <nd ref="716821344"/>
    <nd ref="716823830"/>
    <nd ref="5321016260"/>
    <nd ref="716823006"/>
    <nd ref="716822613"/>
    <nd ref="716822092"/>
    <nd ref="716820906"/>
    <nd ref="5321016177"/>
    <tag k="admin_level" v="6"/>
    <tag k="boundary" v="administrative"/>
  </way>
...

Но это не полигоны, к сожалению. Полигоны ещё собрать надо из точек, которые придётся найти по ref. Osmosis это не сделает, придётся что-то своё писать.

UPD лучше relation выбрать, ниже другой вариант.

А в чем сложность создать из точек полигоны? Порядок?

У osmosis? Не знаю, он так просто не умеет - авторы видимо не для этого его задумывали.

Порядок не является проблемой, все теги <nd> идут в нужном порядке.

Я в другом комментарии описал другую версию получения границ - эта ошибочная (поспешил). В той версии выбираются не линии, а отношения. Отношения объединяют множество линий в одну границу, а линии состоят из точек.

В целом и порядок линий и порядок точек в выгрузке сохраняется - написать кастомное решение которое возьмёт отношения, для каждого отношения переберёт линии, потом переберёт точки и создаст полигон - выполнимая задача.

Но это уже не osmosis. И придётся что-то писать - уже не из коробки. Умеют ли так аналоги osmosis - я не знаю.

Всё же вопрос стоял про районы города. То что вы решили не выбрасывать отношения, это правильно. Потому что границы это всегда отношения. Но тут другая проблема, выбираются все границы, а не уровня районов городского округа. А во вторых, районы это не всегда административные единицы, могут быть и просто именованные части города. В общем-то задача не такая и простая, как может показаться.

Про admin_level я писал. Про именованные районы города, подскажите что это за тег, если нужно объединять, то тут без merge будет не обойтись.

В коде просто админ-уровень не отразился. А именованные районы, это значения тега place

Это потому что в код я его не включил, описав в тексте что "соль перец по вкусу". Но вот пример с admin_level и place:

osmosis \
  --rb file.osm.pbf \
  --tf accept-relations boundary=administrative \
  --tf accept-relations admin_level=9 \
  \
  --rb file.osm.pbf \
  --tf accept-relations place=suburb,quarter,neighbourhood \  
  \
  --merge
  \
  --uw \
  --un \
  --wx boundary.xml

Здесь два потока: Один по отношениям boundary, у которого admin_level=9, второй по отношениям с place=suburb,quarter,neighbourhood. Потом Мы их объединяем с --merge и выбираем way и node --uw --un.

admin_level=9 и place=suburb,quarter,neighbourhood нужно в зависимостри от потребностей настраивать.

Хм... Данные OSM всеж немного не очень пока структурированы.

Возьмем к примеру Екатеринбург, в нем есть Академический район, но он не является участником города. Похоже единственный путь реально выгребать boundary administrative из квадрата

osmosis \
  --rb file.osm.pbf \
  --tf accept-relations boundary=administrative \
  --uw \
  --un \
  --wx boundary.xml

Поправка, сейчас подумал что лучше от relation плясать а не от way

Не уловил, как можно при описании исследования данных в OSM вообще не упомянуть https://overpass-turbo.eu/? Как по мне, сначала идем туда, изучаем разметку, пишем запросы. И потом уже осмозис (или другая утилита, например паркетизер).

Мне он не кажется удобным для изучения разметки - потому и не пишу. Уловили? Возможно я не умею его готовить... но пусть об этом пишут те кто умеет.

Ну, мне показалось, что вы все же говорите об исследовании разметки, в том числе. Осмозис - это уже когда вы скорее знаете, что вам нужно.

Возможно я не умею его готовить... 

Легко верю. Он сложный. Но ведь и разметка достаточно сложная, и тут интерактивный режим работы решает. Я подумывал про него написать, но ушел с того проекта, где я его активно применял на ежедневной основе. По-моему тут была про него статья, поищу.

https://habr.com/ru/articles/520524/ ну вот скажем статья в том числе и про него.

Я не совсем про сложность, я просто не представляю как его использовать для исследования разметки, в моём представлении он для поиска "белых пятен" на карте.

Например: я хочу что-то закартографировать, в соседней ветке мы уже вспомнили про даты постройки домов, давай в качестве примера и возьмём.

Мне нужно найти те дома у которых дата постройки не указана, например есть квартал, почти везде всё заполнено но может быть пара домов без даты, мне либо тыкаться по каждому в поисках пустоты, либо зайти на turbo и ввести что-то типа:

nw[building][!start_date]({{bbox}});
(._;>;);
out;

и он мне подсветит building где отсутствует start_date - profit.

Но мне уже надо знать и про тег building и проstart_date.

Про "не умею готовить" - я имел в виду именно это - не могу представить соответствующий сценарий, в моём представлении это инструмент другого назначения.

Но я плохой осмер - редко картографирую, поэтому и с overpass-turbo не взаимодействую, - не могу его из-за этого полноценно оценить.

На счёт сложности - да, для многих порог входа будет очень велик, жаль что Вы отказались от идеи описать его, думаю многим бы это пригодилось. В целом вот хорошая публикация для начинающих: Overpass API: следующий уровень владения OpenStreetMap.

"Кому на Руси жить хорошо?" - это прям хардкор, для начального уровня наверно слишком.

Ну да, я согласен - это другие кейсы, тут я пожалуй тоже не скажу, что оверпасс был бы удобен. Тэги надо либо знать априори, либо хотя бы понимать, где у нас правильно размеченные объекты на карте - и тогда зайти с их стороны. Если ни то ни другое нам не известно - то наверное инструмент для работы с текстовым представлением (либо xml, либо может быть - база) будет лучше.

Для меня оверпасс - это инструмент для задач типа "открыть карту, найти объект какого-то известного типа (станцию метро), изучить, как она размечена, какими тэгами отмечены выходы, и т.п. А потом уже идем в базу, или запускаем осмозис. И выгружаем все станции и все выходы к себе, и мучаем по всякому.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории