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

в соседней теме gryphon поделился запросом получения списка улиц по bbox
http://overpass-turbo.eu/s/aAB

я попытался сделать выборку названий автобусных остановок по указанной (Сахалинской) области
http://overpass-turbo.eu/s/aD1

Вопрос: он долго выполняется из-за того, что выборка происходит по слишком большой области… или я что-то не так написал в запросе?

Есть такое.

  1. много точек в границе (тысячи точек админ границы это уже много)
  2. пространственно большой запрос (иногда global быстрее работает чем выбор по области)

Для больших районов вариант такой есть:

  1. выбор объектов по bbox-query (относительно быстрее, 4 точки ведь)
    2.1 обрезка по шейпфайлу-границе
    2.2 ALT+SHIT+I у админ границы в JOSM (не помню что за плагин и название)

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

В overpass-turbo можно серваки менять. Там серваки Рамблера есть, в них больше ОЗУ - запроси их ночью.

Доброго времени суток!
Подскажите, можно ли с помощью OverPass API выбрать все отношения, в которые входит объект(way) с известным OSM ID. В моем случае нужно выбрать все дома находящиеся на улице с известным ID. Т.е. у меня есть ID всех улиц(переулков, площадей и т.д. внутри города). Необходимо получить все ID домов, внутри города, с их привязкой к ID улиц.

Никак не могу разобраться с тем, как при поиске задавать условия для member`s в relation.
Попробовал выполнять запрос, ограничивая bbox размерами тайла,- работает. Но для моего города таких тайлов около 90000. Не охота их в цикле перебирать.

Общая идея в рекурсии: https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Recurse_.28n.2C_w.2C_r.2C_bn.2C_bw.2C_br.29 CTRL+F “role” решил бы вопрос.

“улица” - это type:relation?

Если улицы известны - рекурсия вниз по улицам
Если улицы неизвестны - рекурсия вверх по участникам попавшим в гео-регион

UPD: http://nadoloni.com/ показывает “улицы” в верхней строке, нацельте его на нужный город

В OSM улицы к домам отношениями обычно не привязывают, так что это вам всё равно не поможет. Привязка идёт по совпадению названия улицы с тегом addr:street у дома. Неоднозначности (одноимённые улицы) резолвятся с учётом полигонов населённых пунктов (place=*) и районов города (т.к. в разных районах тоже могут быть одноимённые улицы). Подробности можно подсмотреть в разных конвертерах, например в osm2mp или в геокодере openstreetmap.ru

Это зависит от страны. В Украине, например, почти вся адресация сделана через отношения associatedStreet.

@OVK, если не секрет, какая страна тебя интересует?

если я правильно понял - как-то так: http://overpass-turbo.eu/s/b3V

…но если зашла речь про отношения - скорее всего город не в России.
играть в угадайку неохота - так что ждем конкретики

Спасибо за оперативность.
Речь действительно идет об Украине (Днепропетровск). Запрос в OverPass следующий:

[out:json]; ({{bbox}});out meta;>;
вместо bbox задавал координаты тайла при 18-ом зуме.

Выдает след конструкцию:

{
“type”: “relation”,
“id”: 3284982,
“timestamp”: “2015-08-15T09:57:04Z”,
“version”: 19,
“changeset”: 33349461,
“user”: “Husim”,
“uid”: 2921272,
“members”: [
{
“type”: “way”,
“ref”: 81004247,
“role”: “house”
},
{
“type”: “way”,
“ref”: 81004311,
“role”: “house”
},

{
“type”: “way”,
“ref”: 115559938,
“role”: “street”
},

{
“type”: “node”,
“ref”: 2626410366,
“role”: “house”
}
],
“tags”: {
“name”: “Комсомольська вулиця”,
“name:en”: “Komsomolska Street”,
“name:ru”: “Комсомольская улица”,
“name:uk”: “Комсомольська вулиця”,
“type”: “associatedStreet”
}
}

Т.е. здесь ID улицы присутствует внутри одного из свойств “members”.

Попробую уточнить вопрос: можно ли как-то в OverPass задавать условие выборки по параметру “ref” узла “members” в relation типа “associatedStreet”. Выбирать все отношения, в кот. входит элемент с указанным ID внутри определенного bbox.

P.S. Или я не в ту сторону копаю и есть какой-тот другой вариант нахождения списка домов на определенной улице?

OVK,
в каком формате нужно получить данные? Или формат не имеет значения?

edward17,
Вообще-то без разницы. А из чего можно выбрать?

у меня сходу не получилось разобраться, но какие-то примеры можно посмотреть тут:
http://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example#QA_on_Streets.2C_Addresses_and_House_Numbers

d1g
СПАСИБО ОГРОМНОЕ!!!
http://nadoloni.com/ - это просто праздник какой-то! Спас гору времени и нервов!
Правда в ответах JSON у них какая-то путаница с названиями городов и улиц. Ну, да не беда,- распарсим, поправим.
Еще раз, благодарю! Удачи!

Подскажите, как указать в запросе выборку POI, в которых отсутствует какой-то тег? Например post_office без opening_hours. Не пустой, а именно отсутствующий

Есть же встроенная справка, где ссылка на wiki

 node["name"!~"."];       /* finds nodes without "name" tag; does not have key name */

На пересечениях водных и наземных путей я писал тэг 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:=
Это описано в документации, но термин “пространство имен” там не употребляется, потому я решил тут это описать, на случай, если кто будет такое искать.