OpenStreetMap Forum

The Free Wiki World Map

You are not logged in.

Announcement

A fix has been applied to the login system for the forums - if you have trouble logging in please contact support@openstreetmap.org with both your forum username and your OpenStreetMap username so we can make sure your accounts are properly linked.

#1 2013-12-24 13:21:09

chnav
Member
From: Moscow, Russia
Registered: 2010-03-18
Posts: 2,660

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

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

Типичная задача - поработать в JOSM с объектами определенного типа, например place. Обычно для этого просто загружается кусок карты в JOSM и ставится фильтр. Но, во-первых, в JOSM есть ограничение на размер скачиваемой области, во-вторых если частями загрузить целый регион то данных может быть очень много и JOSM безбожно тормозит.

Для таких задач можно использовать OverpassAPI, фильтрация будет проведена ещё на сервере и в JOSM подгрузятся только нужные объекты. Всё что для этого нужно - установить плагин mirrored_download и составить правильный запрос при скачивании данных.
Описание языка запросов Overpass QL

1. Устанавливаем mirrored_download и перегружаем JOSM: http://wiki.openstreetmap.org/wiki/Over … tered_data ;
2. Открываем окно загрузки File -> Download from Overpass API...
79f515296a99c153f1b3362829886191.jpeg
3. Выделяем bbox региона. Из приятного - можно игнорировать предупреждение в правом нижнем углу о выделении слишком большой области.
4. Набираем код на языке запросов QL и кнопку Download
Пример 1:

[timeout:15];
/* скачать объекты place */
( node[place];
  way[place];>;
  rel[place];>;);
(._;rel(bn););
(._;rel(bw););
(._;rel(br););
out meta;

5. Результат:
3970da51975898592ae0bb4e85420f11.jpeg

Что произошло: скачались все объекты node, way, relation у которых есть тег place, вместе с входящими в них узлами, а также родительские отношения. Эти данные можно редактировать и заливать обратно в базу, ничего не поломается.

ВАЖНО:
1. Желательно указывать разумный timeout чтобы не перегружать сервер. Я как-то некорректно составил запрос и ждал около минуты, ничего не происходило. Принудительно прервал и порепетировал на другом bbox. Оказалось я пытался скачать границу России.
2. Обязательно использовать оператор out meta, а не просто out.

Пример 2:

[timeout:15];
/* скачать административные границы, которые пересекает bbox, кроме геометрии admin_level=2 */
( way[boundary];>;
  rel[boundary][admin_level!=2];>;);
(._;rel(bw););
(._;rel(br););
out meta;

Например bbox выбран на границе стран. В этом случае скачаются границы смежных районов и смежных областей вместе с геометрией и admin_centre; границы стран будут скачаны только как отношения, без геометрии. Можно подгрузить члены отношения вручную в JOSM.

Примеры попроще:

Пример 3:

[timeout:15];
/* скачать только точки с адресами */
node["addr:housenumber"];
out meta;

Пример 4:

[timeout:15];
/* скачать заправки */
node[amenity=fuel];
out meta;

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

(исправлено: орфогр. ошибка)

Last edited by chnav (2014-12-02 18:23:51)

Offline

#2 2013-12-24 13:25:36

chnav
Member
From: Moscow, Russia
Registered: 2010-03-18
Posts: 2,660

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

Вопросы, возникшие у меня по QL:

1. Как правильно составить запрос "получить все населенные пункты такой-то области" (имеется в виду внутри контура, а не по тегу addr:region). Я пытался скачать нужное мне отношение по известному ID, затем использовать area в разных вариациях. Ничего не получилось.

2. В описании Query Language работа идет с input set. Вопрос такой - правильно ли я понимаю что после каждой операции этот input set дополняется вновь найденными объектами ? Т.е. операторы срабатывают не как фильтры, а как добавление данных ?

Last edited by chnav (2013-12-24 13:43:45)

Offline

#3 2013-12-24 14:13:35

Xmypblu
Member
From: Москва
Registered: 2011-01-18
Posts: 386

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


Последняя заметка в дневниках: [перевод] "OpenStreetMap Mapping Priority"

Offline

#4 2013-12-24 15:05:50

chnav
Member
From: Moscow, Russia
Registered: 2010-03-18
Posts: 2,660

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

Xmypblu
Огромное спасибо !

Модифицированный запрос для JOSM mirrored_download:

[maxsize:10230000]
[timeout:120]
;
area
  ["boundary"="administrative"]
  ["name"="Калининградская область"]
->.a;
(
  relation
    (area.a)
    ["place"~"isolated_dwelling|hamlet|village|town|city|suburb"];>;
  way
    (area.a)
    ["place"~"isolated_dwelling|hamlet|village|town|city|suburb"];>;
  node
    (area.a)
    ["place"~"isolated_dwelling|hamlet|village|town|city|suburb"];>;
);
(._;rel(bn););
(._;rel(bw););
(._;rel(br););
out meta qt;

Название области заменить на нужное. Будут загружены только НП, попавшие в bbox при скачивании и геометрически попавшие внутрь полигона нужной нам области.

Last edited by chnav (2013-12-24 15:06:14)

Offline

#5 2013-12-25 08:46:11

Xmypblu
Member
From: Москва
Registered: 2011-01-18
Posts: 386

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

у меня тоже вопрос.
У Котяры на latlon.org был слой (сейчас ссылку не найду), на котором были отмечены населенные пункты, в радиусе 3 км у которых не было дорог, выше какого-то уровня.
Как сделать такую выборку НП - с помощь запроса QL ?


Последняя заметка в дневниках: [перевод] "OpenStreetMap Mapping Priority"

Offline

#6 2013-12-25 15:04:58

chnav
Member
From: Moscow, Russia
Registered: 2010-03-18
Posts: 2,660

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

У меня вот так получилось в JOSM

[maxsize:10230000]
[timeout:900];
( node[place];
  way[place];>;
  rel[place];>;)->.a;	/* all places in bbox */
( way(around.a:1000.0)[highway~"motorway|trunk|primary|secondary|tertiary|unclassified"];>;) ->.b; /* highways within given distance */
(
	relation
		(around.b:1000.0)
		[place];>;
	way
		(around.b:1000.0)
		[place];>;
	node
		(around.b:1000.0)
		[place];>;
) -> .c;		/* places within given distance from selected highways */
(.a - .c) ->.d;		/* places outside given distance from any highways */
.d out meta qt;

Может не самый оптимальный запрос, но работает. Ищет все place, у которых на расстоянии 1000м нет ни одной дороги unclassified и выше. *_link и service обрублены сознательно.

Last edited by chnav (2013-12-25 15:07:22)

Offline

#7 2013-12-25 20:48:20

Xmypblu
Member
From: Москва
Registered: 2011-01-18
Posts: 386

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

хм... что-то не найду в документации - что не так, но вычитание на http://overpass-turbo.eu как-то по другому нужно делать

немного переделал запрос http://overpass-turbo.eu/s/1Ru

в качестве примера, нужно найти этим запросом Амбарчик

UPDATE: вот этот запрос работает http://overpass-turbo.eu/s/6ju

Last edited by Xmypblu (2014-11-30 16:10:01)


Последняя заметка в дневниках: [перевод] "OpenStreetMap Mapping Priority"

Offline

#8 2014-01-15 12:08:34

dkiselev
Member
Registered: 2010-02-09
Posts: 3,361

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

А можно получить всех пользователей, чьи правки попадают в ббокс? Или лучше такое не через оверпас всеже делать?


mail: dkiselev@osm.me      skype: dmitry.v.kiselev
Open Street Maps are supreme! Exterminate all map forms! Exterminate! Exterminate!

Offline

#9 2014-02-18 13:28:43

Xmypblu
Member
From: Москва
Registered: 2011-01-18
Posts: 386

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

Во время подготовки картинок для заметки в "дневниках", столкнулся с непонятным...
Может кто объяснить или спросить у автора ресурса: почему при добавлении к запросу стиля MapCSS появляются "разрывы"?
Для примера две картинки - без и с MapCSS стилем, где видны "лишние" дырки, которые пропадают при увеличении зума.

http://overpass-turbo.eu/s/2yu

1. без стиля
0_e915e_c2a0781d_XL.png

2. со стилем
0_e9239_e19bf32e_XL.png


Последняя заметка в дневниках: [перевод] "OpenStreetMap Mapping Priority"

Offline

#10 2014-02-18 13:58:04

edward17
Member
Registered: 2013-08-26
Posts: 1,849
Website

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

Покажите пожалуйста, как выполнять запросы к Overpass не из JOSM? Если точнее, то из Android приложения. Я новичок в этом деле, поэтому хотелось бы поподробнее

Last edited by edward17 (2014-02-18 13:59:09)


Все жители частного сектора, вешающие таблички с названием улицы и номером дома, попадают в рай без очереди.

Offline

#11 2014-02-18 15:12:34

zetx16
Member
Registered: 2011-01-21
Posts: 204

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

Xmypblu wrote:

Может кто объяснить или спросить у автора ресурса: почему при добавлении к запросу стиля MapCSS появляются "разрывы"?
Для примера две картинки - без и с MapCSS стилем, где видны "лишние" дырки, которые пропадают при увеличении зума.

На мелких зумах, мелкие полигоны не рисуются просто.

Offline

#12 2014-02-18 16:48:09

Xmypblu
Member
From: Москва
Registered: 2011-01-18
Posts: 386

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

zetx16 wrote:

На мелких зумах, мелкие полигоны не рисуются просто.

рисуются, если не использовать стили MapCSS. можно убедится сходив по ссылке, что я привел. достаточно удалить {{style: * }}


Последняя заметка в дневниках: [перевод] "OpenStreetMap Mapping Priority"

Offline

#13 2014-02-18 17:25:48

Xmypblu
Member
From: Москва
Registered: 2011-01-18
Posts: 386

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

edward17 wrote:

Покажите пожалуйста, как выполнять запросы к Overpass не из JOSM? Если точнее, то из Android приложения. Я новичок в этом деле, поэтому хотелось бы поподробнее

Вопрос непонятен, а подробнее wiki - по видимому и нет ничего.
Начни читать с этой страницы - http://www.overpass-api.de/


Последняя заметка в дневниках: [перевод] "OpenStreetMap Mapping Priority"

Offline

#14 2014-03-05 22:00:19

edward17
Member
Registered: 2013-08-26
Posts: 1,849
Website

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

Можно ли в Overpass API сделать выборку по полигону? Например: точки внутри мультиполигона страны?


Все жители частного сектора, вешающие таблички с названием улицы и номером дома, попадают в рай без очереди.

Offline

#15 2014-03-06 05:39:48

freeExec
Moderator
From: Ульяновск
Registered: 2012-07-31
Posts: 6,702

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

edward17 wrote:

Можно ли в Overpass API сделать выборку по полигону? Например: точки внутри мультиполигона страны?

Чукча не читатель, подыми глаза выше, одну то страницу осиль прочитать.

Offline

#16 2014-03-08 19:13:07

edward17
Member
Registered: 2013-08-26
Posts: 1,849
Website

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

freeExec wrote:
edward17 wrote:

Можно ли в Overpass API сделать выборку по полигону? Например: точки внутри мультиполигона страны?

Чукча не читатель, подыми глаза выше, одну то страницу осиль прочитать.

Если ты про это

то да, спасибо, это то, что нужно


Все жители частного сектора, вешающие таблички с названием улицы и номером дома, попадают в рай без очереди.

Offline

#17 2014-03-20 05:10:02

Xmypblu
Member
From: Москва
Registered: 2011-01-18
Posts: 386

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

В соседней теме пытался выяснить - почему скрипт не работает так, как задумано. Методом научного тыка - пришёл к выводу, что проблема в запросе к Overpass.
В самом скрипте (qat_script\gui.py:1113) строка запроса выглядит так:

overpassurl += 'http://overpass-api.de/api/interpreter?data=' 
overpasquery = 'relation["admin_level"="%s"]["name"="%s"]%s;(way(r:"outer");node(w););out meta;' % (adminLevel, name, optTag)

к сожалению, практически все (исключений я пока не нашёл) границы в России этим запросом почему-то не загружаются в скрипт. Есть подозрения, что это зависит от наличия на первом сегменте(way) отношения, тегов "admin_level=*". Но так как есть примеры, когда тег есть, а все равно не грузит - я не понимаю, что ему не нравится... прошу помощи, подкорректировать запрос до рабочего состояния.

Список границ какие я проверял:

Россия:
Калининградская область(4) - не загружает
в тегах отношений есть (admin_level=4, boundary=administrative),
в тегах линий есть (boundary=administrative, admin_level=2),
note: в первом сегменте прописан тег "admin_level=2"
Новгородская область(4) - не загружает
в тегах отношений есть (boundary=administrative, admin_level=4),
в тегах линий есть различные значения admin_level,
note: в первом сегменте нет тега "admin_level=4"
Италия:
Friuli Venezia Giulia(4) - загружает
граница не собрана в отношение,
в тегах линий есть (boundary=administrative, admin_level=4)
Valle d'Aosta(4) - загружает
граница не собрана в отношение,
в тегах линий есть (boundary=administrative, admin_level=4)
Испания:
Castilla y León(4) - не загружает
в тегах отношений есть (boundary=administrative, admin_level=4),
в тегах линий есть (boundary=administrative, admin_level=4),
note: в первом сегменте прописан тег "admin_level=2"
Польша:
województwo wielkopolskie(4) - не загружает
в тегах отношений есть (boundary=administrative, admin_level=4),
в тегах линий есть (boundary=administrative)
Германия:
Hamburg(4) - загружает
в тегах отношений есть (admin_level=4,boundary=administrative),
в тегах линий есть (admin_level=4)
Nordrhein-Westfalen(4) - загружает
граница не собрана в отношение,
в тегах линий есть (boundary=administrative, admin_level=4)
Франция:
Provence-Alpes-Cote d'Azur(4) - не загружает
в тегах отношений есть (admin_level=4,boundary=administrative),
в тегах линий есть (boundary=administrative, admin_level=4),
note: в первом сегменте нет тега "admin_level=4"
Турция:
Antalya(4) - загружает
в тегах отношений есть (admin_level=4,boundary=administrative),
в тегах линий есть различные значения admin_level,
note: в первом сегменте нет тега "admin_level=4"
İç Anadolu Bölgesi(3) - не загружает
в тегах отношений есть (admin_level=3,boundary=administrative),
в тегах линий есть (boundary=administrative, admin_level=3),
note: в первом сегменте нет тега "admin_level=3"

P.S. автору скрипта я написал, он обещал посмотреть, что можно сделать... но не знает когда появится время для этого.

Last edited by Xmypblu (2014-03-20 05:23:46)


Последняя заметка в дневниках: [перевод] "OpenStreetMap Mapping Priority"

Offline

#18 2014-03-20 06:38:57

freeExec
Moderator
From: Ульяновск
Registered: 2012-07-31
Posts: 6,702

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

Проверял где ? В браузере всё без проблем загружается, у меня файл на 2Мб, но вот на месте в josm не работает.

Offline

#19 2014-03-20 07:23:24

Xmypblu
Member
From: Москва
Registered: 2011-01-18
Posts: 386

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

freeExec wrote:

Проверял где ? В браузере всё без проблем загружается, у меня файл на 2Мб, но вот на месте в josm не работает.

проверял в JOSM конечно - всё подробно расписал вроде. речь про скрипт, на кой мне это все в браузере или где-то ещё?
хотя тоже интересно, почему такое различие в поведении... может в заголовках запроса или в символах перевода строк что-то не так


Последняя заметка в дневниках: [перевод] "OpenStreetMap Mapping Priority"

Offline

#20 2014-03-20 07:37:43

freeExec
Moderator
From: Ульяновск
Registered: 2012-07-31
Posts: 6,702

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

Xmypblu wrote:

на кой мне это все в браузере или где-то ещё?

Ну если в браузере ок, то это проблема не overpass.

Offline

#21 2014-03-20 08:19:42

Xmypblu
Member
From: Москва
Registered: 2011-01-18
Posts: 386

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

freeExec wrote:
Xmypblu wrote:

на кой мне это все в браузере или где-то ещё?

Ну если в браузере ок, то это проблема не overpass.

не все так просто... ок, надо проверить тогда и через браузер, что займет некоторое время.
но как заметил в соседней теме akks:

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

первые запросы вернули пустой ответ, пример такого ответа:

<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Overpass API">
<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
<meta osm_base="2014-03-20T07:05:01Z"/>


</osm>

но дальше отдал границу

Last edited by Xmypblu (2014-03-20 08:22:30)


Последняя заметка в дневниках: [перевод] "OpenStreetMap Mapping Priority"

Offline

#22 2014-03-20 08:22:27

akks
Member
From: Ufa
Registered: 2010-06-11
Posts: 1,725

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

Xmypblu wrote:

...
Список границ какие я проверял:

Россия:
Калининградская область(4) - не загружает
Новгородская область(4) - не загружает
Castilla y León(4) - не загружает
województwo wielkopolskie(4) - не загружает
Hamburg(4) - загружает
Provence-Alpes-Cote d'Azur(4) - не загружает
Antalya(4) - загружает
İç Anadolu Bölgesi(3) - не загружает
...

Закономерность, однако: есть не-ASCII символы (код >127) -> не грузит.
То, что JOSM печатает в логи, открывается нормально, но запрос, похоже, делается не в той кодировке (У GET-запросов всегда с этим проблема). Посмотрю сейчас перехватчиком...

Last edited by akks (2014-03-20 08:22:49)

Offline

#23 2014-03-20 20:28:08

Xmypblu
Member
From: Москва
Registered: 2011-01-18
Posts: 386

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

akks wrote:

Закономерность, однако: есть не-ASCII символы (код >127) -> не грузит.
То, что JOSM печатает в логи, открывается нормально, но запрос, похоже, делается не в той кодировке (У GET-запросов всегда с этим проблема). Посмотрю сейчас перехватчиком...

Очень надеюсь, что у тебя получится что-то найти wink

Я получил ответ от разработчика скрипта:

The following code fixes the problem in Ubuntu (Linux).

Change "qat_script\gui.py" from line number 1111 to this:

overpassurl = 'http://127.0.0.1:8111/import?url='
overpassurl += 'http://overpass-api.de/api/interpreter?data='
overpassquery = 'relation["admin_level"="%s"]' % adminLevel
overpassquery += '["name"="%s"]' % URLEncoder.encode(name, "UTF-8")
overpassquery += '%s;(way(r:"outer");node(w););out meta;' % optTag
overpassurl += overpassquery.replace(" ", "%20")
print overpassurl

Калининградская область(4) - OK
Новгородская область(4) - OK
Санкт-Петербург(4) - OK
Москва(4) - OK
Castilla y León(4) - OK
województwo wielkopolskie(4) - OK
Provence-Alpes-Côte d'Azur(4) - OK
İç Anadolu Bölgesi(3) - OK

к сожалению у меня в WinXP без изменений... по прежнему, не загружает.

UPD: под 10.7.5 Mac OS X тоже не загружает, зато увидел в действии обе кнопки "View"
UPD 2: после плясок с бубном стало загружать под 10.7.5 Mac OS X ... под winXP - проблема осталась

Last edited by Xmypblu (2014-04-02 14:37:41)


Последняя заметка в дневниках: [перевод] "OpenStreetMap Mapping Priority"

Offline

#24 2014-03-22 19:24:59

akks
Member
From: Ufa
Registered: 2010-06-11
Posts: 1,725

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

У меня качает и województwo wielkopolskie и Калининградскую область без всяких правок .py !

Может, дело в последней версии JOSM-latest и последнем qat? (Windows 8.1 Rus)

Offline

#25 2014-05-16 07:14:52

chnav
Member
From: Moscow, Russia
Registered: 2010-03-18
Posts: 2,660

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

Кто знает - можно ли при отображении результатов запросов отображать, например, длину линий ?
Меня спросили на автофоруме как можно оценить длину плохих участков smoothness=bad.

Offline

Board footer

Powered by FluxBB