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

Мне кажется вам стоит перейти на выгрузки и фильтровать всё самому, через osmosis или osmfilter. Написал один раз батник с нужными параметрами и потом просто запускаешь для получения всех нужных данных (в том числе и районы, города).

имеется ввиду выгрузить всю дату по России и потом там искать районы и прочее?

Имеется в виду - взять готовый дамп (отсюда) и отфильтровать из него то, что вам нужно, а не насиловать overpass.

Новичёк и так и не могу вкурить до конца логику языка…

Мне хочется просто выгрузить всё содержимое osm внутри bbox-прямоугольника, так чтобы этот квадрат можно было бы отрендерить в картинку. То есть если в прямоугольник попала область, то она должна выгрузиться со всеми точками, чтобы при рендере было понятно как заливать область.

(way({{bbox}});<;>;);out; - простой запрос решает проблему, но слишком много ненужных данных…
Если линия пересекает область, то мне достаточно только эту линию, без связанных с ней.
Заметил, что проблема в основном в железных дорогах, автотрассах, реках. Если они попали в прямоугольник, то выгружаются все точки через пол страны.

Своими силами додумался до такого запроса:
(
(way({{bbox}})[railway!~“.”][highway!~“.”][waterway!~“.”];<;>;);
(way({{bbox}});node(w););
(way({{bbox}})[railway];node(w););
(way({{bbox}})[highway];node(w););
(way({{bbox}})[waterway];node(w););
);out;

Но столкнулся с тем, что выгружаются все линии тэга “boundary”=“administrative”. Так как эта область рендерится без заливки (только пунктирные края), то мне не нужно применять рекурсию. Помогите ещё больше оптимизировать запрос. Выгружать границу двух микрорайонов, а то и более за пределами bbox мне не надо.

ps
писал запрос давно, но проблемы с administrative уже невыносимы, а сейчас уже не помню смысл строки (way({{bbox}});node(w););

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


[out:json][timeout:25];
node({{bbox}}) ->.raw;
(
.raw;
way(bn.raw);
);

out skel qt;

То что вы дали - абсолютно не то. Разрезанную область невозможно гарантированно правильно закрасить. Потому что нет информации в какую сторону её закрашивать. Даже если закрашивать по направлению внутрь выпуклости, то всё-равно нет гарантий, что часть линии за пределами bbox не будет являться вогнутость по отношению к общему контуру всей области.

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

ps
Я тут только что заметил, что и мой запрос выше тоже не всегда корректно работает :frowning:

выгружайте дамп с гислаба, как вам советовали выше, и вырезайте нужный кусок osmconvert, он умеет полностью сохранять полигоны, которые зацепило границей обрезки

Спасибо, но мне нужны полностью АКТУАЛЬНЫЕ данные, даже если они были изменены 5 секунд назад. Дампы недели или месяца назад (и даже вчерашние) не годятся. Да и целые города выгружать и обработать не может выбранная программная среда рендера. Годится только url запрос.

Пока наилучший результат мне даёт:
(
(way({{bbox}})[railway!~“.”][highway!~“.”][waterway!~“.”];rel(bw)[type!=“boundary”];way(r)[railway!~“.”][highway!~“.”][waterway!~“.”];<;>;);
(way({{bbox}})[railway!~“.”][highway!~“.”][waterway!~“.”];node(w);rel(bn)[type!=“boundary”];way(r)[railway!~“.”][highway!~“.”][waterway!~“.”];<;>;);
(way({{bbox}})[railway];node(w););
(way({{bbox}})[highway];node(w););
(way({{bbox}})[waterway];node(w););
);out;

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

Ещё есть проблема океанов(говорю для тех кто возможно найдёт этот запрос), но тут в моём случае по условию задачи допустимо подгрузить geojson с водой нужной местности.

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

Ничего не мешает вырезать из дампа нужный вам поселок и обновлять только его. Хоть раз в минуту.
А в лимиты оверпаса вы упретесь очень быстро: всего пара сотен простых запросов и следующие несколько часов вы будете получать 403 с сервера.

Ни о каких сотнях речи не идёт. Мне пары штук в день будет достаточно. И “рабочие дни” будут в лучшем случае раз в неделю.
Я в курсе существования дампов и если бы приоритет был на большом числе запросов то использовал бы их без сомнений.

Тогда на кой хрен вам актуальность “5 секунд назад”? :roll_eyes:

У overpass, кстати, тоже есть запаздывание в обновлении, хоть сейчас и относительно небольшое.
Но иногда оно может измеряться часами: http://wiki.openstreetmap.org/wiki/Overpass_API/status
А были времена, когда и месяцами…

Может кто-нибудь подсказать запрос, который даст выгрузку notes, созданные определённым пользователем?

Нет такого, можно только кто последний трогал объект. Но можно отсеять на примерную дату.

way[notes]({{bbox}})(user:"Cd_spb")(changed:"2012-09-14T07:00:00Z","2012-10-14T07:01:00Z") /* (newer:"2015-01-01T00:00:00Z") */;

Спасибо.
Upd. Как выяснилось, моя задача через overpass не решается.

Вычисление к каким станция привязан выход.
https://overpass-turbo.eu/s/w5N


[out:xml][timeout:25][bbox:{{bbox}}];

( node({{bbox}})[railway=subway_entrance]; );
foreach(
  rel(bn)->.r;
  out skel;
  convert node 
  			::id = id(),
  			ref = t[ref],
  			colour = t[colour],
  			label = "Выход № " + t[ref] + " со станции: " + r.set(t[name]);
  out;
);
{{style:
node {
  text: label;
}
}}


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

А такое не подойдет ??
http://resultmaps.neis-one.org/unmapped#8/54.561/43.720

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

https://overpass-turbo.eu/s/wwt


[out:json][timeout:25];
// gather results
(
   way["place"]({{bbox}});
   rel["place"]({{bbox}});
);
map_to_area -> .f;
(
  node(area.f)[place];
) -> .a;
(
  node[place]({{bbox}}) -> .e;
);

(.e - .a) -> .d;

.d out geom qt;