TGViewer
sanspie's notes sanspie's notes @sanspie_notes · 816 subscribers
Post #336 2.15K
Overpass

Пару недель назад я решал одну задачу для хакатона ЛЦТ, в которой нам нужно было собрать данные по различным точкам(достопримечательности, отели, ресторанны, кафе и т д) для того, чтобы простаивать маршруты по ним. Одним из источников информации, который мы взяли для системы был open street maps. Однако возник вопрос, как можно выгрузить десятки тысяч точек из такой сложной штуки как open sreet maps (далее osm).

Для тех, кто не знает, что же такое open street maps, попытаюсь кратко рассказать. Osm - аналог Google Maps, бесплатно предоставляющий всему миру данные карт, собранные при помощи маперов - людей, которые заносят данные об окружающей местности в osm. Чем же он лучше, чем Google, Bing, Yandex maps или другой популярный поставщик карт? Ну, во-первых, osm - некоммерческий продукт, что лишает компаний возможности монетизировать локацию, предпочтения, поисковые запросы пользователей. Во-вторых, данные в osm обновляют юзеры, что делают информацию в osm наиболее актуальной. Так же не стоит забывать, что osm можно скачать, запустить у себя на сервере, нарисовать что-то поверх и сделать частью своего сервиса, что уменьшает опасность атак на цепочку поставок, а так же делает компании более независимыми.

Отлично! Но как можно получить данные, не в интерфейсе osm, а, например, в виде геожсонов? Тут нам на помощь приходит Overpass API. Overpass API — это серверное ПО с открытым исходным кодом, созданное для обработки пространственных запросов к данным osm. По умолчанию overpass работает c xml, однако так же можно воспользоваться их QL, который позволяет фильтровать точки в более-менее человекочитаемом формате. Например, вот запрос, чтобы получить все магазины “Дикси” в России:

[out:json]; # указываем оператором настроек, что хотим ответ в виде json
(area["ISO3166-1"="RU"];)->.ru; # создаем фильтр ru, с точками только из рф
(node[shop][name="Дикси"](area.ru);); # оператором node создаем набор данным
со всеми магазинами с називанием Дикси
и применяем фильтр с предыдущей строки
out;

Таким нехитрым образом мы получаем json с точками, всякой информацией типа адреса и т д по тем “тегам”, что мы хотим. Язык описания запросов очень мощный и позволяет даже использовать регулярные выражения, составлять пересечения зон и областей (некоторые интересные запросы можно посмотреть на картинке). Полный набор операторов можно найти тут - https://dev.overpass-api.de/overpass-doc/en/.

Теперь дело за малым: написать запрос и посмотреть что он отдает. Для этого подходит мощный fronted клиент для overpass - overpass turbo. Он не только позволяет отобразить результаты запроса на карте, но и имеет помощника, который как-то криво, но составит запрос.

Таким образом, мы можем автоматизировать всякую работу с данными на карте, подготовить данные для своей системы или просто проанализировать агрегированную информацию.
  • 👍 8
  • 👎 1
  • 🔥 1
More from @sanspie_notes
  1. Apr 30, 2026CVE-2026-31431 Красивая и простая LPE под большинство популярных Linux-дистрибутивов. Репо…
  2. Apr 13, 2026document post
  3. Apr 4, 2026https://habr.com/ru/articles/1019200/
  4. Mar 27, 2026В телеге нашли нолик на 9.8 https://www.zerodayinitiative.com/advisories/upcoming/
  5. Jan 11, 2026Про "балканизацию" интернета я говорю ~15 лет уже. Прости нас, Тим! Мы всё проебали. Cloud…
  6. Dec 30, 2025https://bigdata.2minutestreaming.com/p/mongobleed-explained-simply
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →