Overpass API - примеры запросов

Воспользуйтесь nominatim

ua9lif, кажется, у Вас неправильная постановка задачи. ИМХО, Ваш вопрос звучит так - “Как определить к какому району принадлежит указанная точка?”
Первое что нужно, это определить какой “район” Вас интересует - https://wiki.openstreetmap.org/wiki/RU:Tag:boundary%3Dadministrative

Спасибо за ответ, с nominatim возникла проблема:
Есть остров - https://www.openstreetmap.org/#map=16/57.3272/65.0330
Запрос nominatim https://nominatim.openstreetmap.org/reverse.php?format=json&lat=57.3265571&lon=65.031597&zoom=12 возвращает только один объект:

{“place_id”:“179297093”,“licence”:“Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright”,“osm_type”:“relation”,“osm_id”:“897988”,“lat”:“57.2068608”,“lon”:“65.5398027882382”,“display_name”:“Центральный административный округ, Тюмень, городской округ Тюмень, Тюменская область, Уральский федеральный округ, 625000, РФ”,“address”:{“city_district”:“Центральный административный округ”,“city”:“Тюмень”,“county”:“городской округ Тюмень”,“state”:“Тюменская область”,“postcode”:“625000”,“country”:“РФ”,“country_code”:“ru”},“boundingbox”:[“57.1359188”,“57.277846”,“65.398993”,“65.672417”]}

Хотя должен быть Тюменский район и который описан https://www.openstreetmap.org/relation/1660242#map=11/57.2759/65.1476

Мне нужен admin_level=6.

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

по мотивам темы про “landuse=military” попытался составить запрос:
http://overpass-turbo.eu/s/yWN

но для полного счастья не хватает условия - выбрать объекты у которых номер версии больше 1, то есть после создания были изменения.
Ранее тут писали что с историей объектов overpass не работает, но в последнее время вроде были большие изменения, а вдруг теперь и это можно?

Хотя это не поможет в “особо хитром случае”, но как вариант простого просмотра и для составления списка пакетов правок может сгодится.

Возможно кто-то знает лучший способ мониторинга изменения тега “military”?

P.S. если у кого запрос не пашет, я в настройках выбрал сервер https://overpass.kumi.systems/api/
P.P.S. надо как-нибудь собраться и составить таблицу - как подписывают и комментируют объекты “military” в России… думаю будет весело.

Подскажите пожалуйста, как найти два highway=footway, соединённые одной или двумя highway=service общей длиной не более 50 метров?

Коллеги, подскажите, можно найти отдельную линию из двух точек на одной из точек которой стоит определённый тег?
В частности, мне нужно найти highway=track у которой на конце traffic_calming=*
Вот такую, например, https://www.openstreetmap.org/way/401638910

Можно, смотрите справки по count_members, возможно foreach, но мне кажется можно без него.

Подскажите, почему запрос работает нестабильно? Он рисует дороги на пешеходных полигонах, но не всегда, некоторые дороги не отображаются, так и не нашел закономерности.
Достаточно частая ошибка когда дорога просто подсоеденина к краю полигона и в итоге роутинг через него не работает.
Или может есть сервис который находит подобные ошибки? osmose и keepright их не видят.

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

Пробовал смотреть с помощью (around.area:0), но это не работает для путей, которые не пересекают границу, либо надо увеличивать радиус (до 1, 5, 10? метров), что тоже не гарантирует 100 % результат.

[timeout:20][bbox:{{bbox}}];

(
way ["area:highway"="footway"];
relation ["area:highway"="footway"];
relation ["highway"="footway"];
way ["area:highway"="pedestrian"];
relation ["area:highway"="pedestrian"];
relation ["highway"="pedestrian"];
);

out geom;
map_to_area ->.area;

(
way ["highway"](area.area);
);
out geom;

Upd: внезапно на полигонах 3337985 (Neumarkt) и 3337984 (Frauenkirche) все стало нормально отображаться, но рядом полно площадей где до сих пор не работает.

  1. Роутинг по area:highway не предполагается, это чисто для красоты
  2. map_to_area работает только для полигонов в name

Так я про это и говорю, что не всем мапперам очевидно, что только для красоты. Часто встречаю просто дороги брошенные на такой полигон и все.

Как это не работает? Часть дорог же отображается, и они ограничены именно .area. Может быть криво работает? Или area работает только с name?
Причем некоторые мультиполигоны последний раз редактировались более года назад, думаю overpass должен был успеть их перегенерить, если менялась геометрия.

Внезапно на полигонах 3337985 (Neumarkt) и 3337984 (Frauenkirche) все стало нормально отображаться, но рядом полно площадей где до сих пор не работает.
Попробовал поменять сервера, через //overpass-api.de/api/ и https://overpass.kumi.systems/api/ (не)отображаются одни и те же дороги, может быть дело в overpass-turbo?

У overpass поиск по значению действительно медленнее, чем по ключу, или есть какая то хитрость?
а то по ключу можно искать регуляркой по всему миру, а по значению отказывается искать в 100х100 км несильно замапленной территории.
по ключу я ищу так:

node[~"."~"value"];

есть более производительный способ или это особенность базы?

предположу что это особенности индексации базы ??
к примеру, индекс ключей есть, а индекс значений не формируют.
для значений некоторых ключей, name operator, индексы имеют мало смысла.
вариант2: индексы значений неимоверно больше индекса ключей - что в принцеипе логично.
и т.д.

Сдается мне что regexp сам по себе очень небыстр и индексация для него не работает вообще.

Я бы не сказал, что прямо уж так небыстр, например

way[~"^[^:]*[а-я]"~"."];

выполняется за три секунды (именно обращение к API, остальное, как понимаю, делается в браузере) без ограничений по координатам, а way[“Тип”]; за две. По мне так сложноуловимая разница.

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

Добрый день, подскажите пожалуйста, как можно выгрузить связанные улицы с районами (и микрорайонами), по определенному городу ?

Напишите подробнее:

  • что значит связанные? Это пересекают район где-то, полностью в нем находятся, дома с этой улицы попадают в район или на улице стоит индекс района?
  • сколько районов, насколько больших

Последний вариант “связности” делается просто, иначе нужно примерно то, о чем я спрашивал несколько постов назад. Но это работает очень медленно (т.е. оверпасс может отказываться выполнять) и к тому же нестабильно.

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

В первом приближении можно вот так получить улицы которые хоть где-то пересекают границу района:

[out:csv(::id,"name")][timeout:10];
way(216882430);
out geom;
map_to_area ->.area;

way [highway]["name"](area.area);
out;

То есть руками смотрите номер линии, соответствующей району (или мультиполигона, тогда надо заменить “way” на “rel”), вбивате его и получаете список улиц в этом районе в таком виде:

180119057	Calle Ramo Toscana
180119058	Calle del Ogio o de la Rugheta
180119059	Calle del Paradisio
180119060	Calle del Sturion

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

Но я вижу одну проблему: не знаю найдет ли оверпасс линию, которая проходит внутри района, но точек внутри него не имеет. Можете поискать пример, проверим (не обязательно район с улицей, любой путь пересекающий полигон, желательно не очень большой).
И одну возможную проблему: улицы могут быть разбиты на куски (мостами, отличающимися скоростными ограничениями и т.п.) и вы получите кучу дубликатов. Если нужны только именованные улицы, то это решаемая проблема, а вот если есть неименованные, то я не вижу простого способа их соединить.

way [highway]["name"](area.area);

Найдёт всё что внутри.
Другое дело, что у нас кучу “микрорайонов” это не понятное “вон там за дрогой” и отмечено просто точкой.
Если это не разовая хотелка для своего города, то имеет смысл поднимать свой локальный nominatim.