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

На пересечениях водных и наземных путей я писал тэг level=-1 вместо layer=-1 (ну или 1), причём довольно давно. Перепутал. Почему - не знаю. Можно ли при помощи Overpass API получить все объекты, созданные мной и содержащие тэг level? Чтобы загрузить всё это в JOSM и исправить.

P.S. С запросом на сайте Overpass Turbo справился, но в JOSM такое не загрузить:

Сделать что-нибудь типа http://overpass-turbo.eu/s/dbK
Зачем разбираться “я, не я…”? Поправить уж все ошибки, без поисков виноватых.

Напрямую нет потому что в Overpass нет history API у объектов и фильтровать по свойствам пакетов нельзя (“автор” объекта). Это можно обойти, но много кода будет обрабатывающего.

Если объекты до сих пор живые

user:“Roman Shuvalov” and type:way and level=“-1” - загрузит последние объекты твои пока ещё их никто не трогал
убираем условие на пользователя и получаем ещё пару объектов которые можно потом будет посмотреть

Там кнопки есть для этого “Экспорт” - “Запрос” - “Преобразовать в компактный”

https://wiki.openstreetmap.org/wiki/Overpass_turbo/Wizard

http://www.openstreetmap.org/user/Roman%20Shuvalov - у тебя только 300 пакетов, их можно просмотреть быстро в https://josm.openstreetmap.de/wiki/Help/Dialog/ChangesetManager Ты же не во всех 300 пакетах такое делал?

Как выяснилось, на авторство пофиг - найденных объектов в моей области буквально два десятка, даже если найду что-то чужое - не страшно, отфильтрую руками.

Но про JOSM не понял. После “Преобразовать в компактный” получаю ссылку, напрямую выдающую OSM XML. И что, его надо сохранить как .osm и открыть в JOSM? А попроще способа нет?

Внимательнее при экспорте, там три вкладки: “данные”, “карта”, “запрос”.

Во вкладке “запрос” получается такая ссылка http://overpass-api.de/api/convert?data=%2F*%0AThis%20has%20been%20generated%20by%20the%20overpass-turbo%20wizard.%0AThe%20original%20search%20was%3A%0A%E2%80%9Cuser%3A%22Roman%20Shuvalov%22%20and%20type%3Away%20and%20level%3D%22-1%22%E2%80%9D%0A*%2F%0A%5Bout%3Ajson%5D%5Btimeout%3A25%5D%3B%0A%2F%2F%20gather%20results%0A(%0A%20%20%2F%2F%20query%20part%20for%3A%20%E2%80%9Cuser%3A%22Roman%20Shuvalov%22%20and%20level%3D%22-1%22%E2%80%9D%0A%20%20way(user%3A%22Roman%20Shuvalov%22)%5B%22level%22%3D%22-1%22%5D(51.58389660297623%2C46.10961914062499%2C54.76900862613557%2C51.668701171875)%3B%0A)%3B%0A%2F%2F%20print%20results%0Aout%20body%3B%0A%3E%3B%0Aout%20skel%20qt%3B&target=compact

Но проще всего данные загрузить сразу в открытый JOSM (“данные” “JOSM”) https://help.openstreetmap.org/questions/29022/overpass-turbo-query-wizard-output-to-josm-how. Минус там что нужно будет починить запрос (overpass turbo сам скажет перед экспортом в JOSM), иначе JOSM его не понимает.

Возится с XML сохранять/открывать данные или запрос нужды нет.

Совершенно случайно, может кому пригодится. Wizard на overpass-turbo.eu ругается на двоеточие и не понимает условия с тегами, использующими пространство имен (вида namespace:key=value).
Потому, если для какой-то цели нужно выбрать, например, все теги в одном пространстве имен, шаблон должен использовать регулярные выражения.
Пример:

node[~"^recycling:.*$"~"."]

такой шаблон выбирает все точки с тегами вида recycling:=
Это описано в документации, но термин “пространство имен” там не употребляется, потому я решил тут это описать, на случай, если кто будет такое искать.

Тег с двоеточием надо просто обкавычить

Раз пошла такая пьянка, накину парочку из последних интересных
Города в пределах (по прямой) 20км от МКАД

[out:json][timeout:25];
// gather results
(
  rel(2094222)->.mkad;
  (
    node(around.mkad:20000)["place"="city"];
    node(around.mkad:20000)["place"="town"];
  ) ->.city;
);
// print results
.city out body;
//>;
//out skel qt;
{{style:
node 
{ color:green; text: name; }
}}

Что за населённый пункт в центре карты

[out:json][timeout:25];
// gather results
(
  is_in({{center}}) -> .b;
  
  (way(pivot.b)["place"];
   rel(pivot.b)["place"];
   )-> .c;
  
);
.c out body;
>;
out skel qt;

Посмотреть как проходит маршрут общественного транспорта

[out:json];
relation
  ["route"="bus"]
  ["ref"="38"]({{bbox}})
->.hr;
(
  .hr;
  way(r.hr)->.hrp;
  node(r.hr);
);
out body qt;
node(w.hrp);
out skel qt;

“просто” - не работает.
Приведите пример того, что вбивать в wizard для recycling:=

Я ввёл в визард

type:node and ~"^recycling:"~"."

и всё работает:
http://overpass-turbo.eu/s/dp4

edward17, регулярка ~“^recycling:” не сильно отличается от ~“^recycling:.*$”

Я не в курсе почему overpass матчит всё, а не минимальные десять символов у ^recycling:

http://regexr.com/3cff9 - матчится весь тег recycling:red
http://regexr.com/3cfff - вариант без .*$, матчится только recycling:

в .*$ тоже есть неточность потому как в неё попадёт recycling:

Поэтому наиболее безопасный вариант вот такой:
^recycling:.+$

edward17, я спрашивал, что имел в виду wowik под “просто обкавычить тег” (когда отвечал на мое предложение использовать шаблон с регулярками http://forum.openstreetmap.org/viewtopic.php?pid=567480#p567480 ), потому что

"recycling:"

, очевидно, нифига не работает.
Речь, напомню, идет про условие для выборки всех тегов, входящих в пространство имен (т.е. recycling:key=value , где key и value - любые )

Перечитал дискуссию и понял, что моё сообщение было ни к чему.

Увидел это:

и ответил. Но не заметил, что вверху уже написан почти такой же запрос.

Зато в итоге разобрали несколько сходных шаблонов, которые выбирают одно и то же, но с разными нюансами (не пустой key, например).
А вообще, если совсем по-хорошему, wizard (и api вообще) должны понимать namespace, по крайней мере - в классическом виде, раз это довольно широко используется.

А вы про другое писали :wink:

посему “просто” это так:
“namespace:key”=value или даже “namespace:key”=“value”

wowik, признайтесь честно, вы дальше первого предложения (откуда процитировали про namespace:key=value) не читали. А уже во втором было написано:

В первом предложении было ошибочное утверждение “ругается на двоеточие и не понимает условия с тегами, использующими пространство имен (вида namespace:key=value)”. Его исправление и предлагал, ибо вдруг кто и впрямь поверит, что нельзя писать двоеточие в запросе. Вы же про wildcardы ничего там не говорите, проблема-то в них, а не в двоеточии. Сразу бы и писали про namespace:*=value.

А то у вас как у Путина, сначала заявление, а потом разъяснение Пескова, что на самом деле имелось ввиду в заявлении.

Вы и там дальше первого предложения не читали.
В этом же сообщении написано:

.
Это и есть namespace:= и ни что другое.
Бросайте привычку отвечать на одно (любое) предложение из сообщения, игнорируя остальные.

Подскажите, возможно ли, и, если возможно, приведите пример запроса, в котором по координатам точки(центр карты) можно получить название области РФ. Заранее спасибо.

что-то типа так
http://overpass-turbo.eu/s/eUf