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

Можно, смотрите справки по 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.

Найдёт всё что внутри.
В смысле не обязательно, чтобы внутри были точки?

Спасибо, оказывается формат запросов изменился, раньше area писалась в начале запроса. То-то я смотрю мои старые запросы с area выдают ошибку. А может и не в этом дело…

Это только у меня JOSM который день выдает ошибку соединения с Overpass API? Предлагает проверить наличие Интернет соединения. Или это новогодние каникулы сервера Overpass API?

Здрасти, уже почти год будет, как основной адрес заблокирован телеграмом. Используйте альтернативы.

Какой адрес заблокирован? Какой рабочий? Я весь год пользовался без проблем. При чем здесь телеграмм?
В работе был - http://overpass.openstreetmap.ru/cgi/
В резерве - https://overpass-api.de/api/
Прошу развернуть ответ. Укажите адрес. Спасибо.

https://overpass-api.de/api/

https://overpass.kumi.systems/api/

Не телеграммом, конечно, а роскомпозором, который всё ещё пытается с ним воевать при помощи ковровых блокировок.

За что гонения?! В чём его вина? Впрочем спасибо за развернутый ответ. Запустил. На долго ли? Никогда с этим не сталкивался.