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.

#101 2016-05-28 20:43:57

pfg21
Member
From: Чебоксары
Registered: 2012-10-18
Posts: 2,665

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

в свое время делал скрипт для получения всех н.п. в республике
----------------
[timeout:25];
area[admin_level=4]["name"="Чувашия"][boundary=administrative]->.boundaryarea;

( node(area.boundaryarea)["place"];
  way(area.boundaryarea)["place"];
  relation(area.boundaryarea)["place"]; );

out meta;
>;
out meta;
----------------
для скорости думаю надо было сначала делать выборку по тегам, а уж потом проверять на вхождение в area, быстрее обработается.
переделай под себя.

Offline

#102 2016-09-15 12:40:20

madeinussr
Member
From: Феодосия
Registered: 2013-11-17
Posts: 58

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

А кто подскажет, можно ли как-то отсеять запрашиваемые объекты по габаритам (для way)? Например, для natural=water показать все больше 100 метров в широтной или долготной протяженности. Или по длине way. Просто мелких уж очень много получается, мне достаточно только самые крупные.

Offline

#103 2017-05-11 11:50:57

freeExec
Moderator
From: Ульяновск,Модератор всех слоёв
Registered: 2012-07-31
Posts: 7,009

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

У кого-то есть проблемы, что сохранённые в браузере запросы пропали?

Offline

#104 2017-05-11 12:45:00

Vort
Member
Registered: 2010-11-29
Posts: 472

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

freeExec wrote:

У кого-то есть проблемы, что сохранённые в браузере запросы пропали?

У меня какой-то чужой запрос появился вместо того, который был загружен.

Offline

#105 2017-05-11 13:45:05

Владимир К
Member
Registered: 2015-05-22
Posts: 408

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

ого. действительно все мои сохраненные запросы пропали, вместо них чьи-то чужие.

Offline

#106 2017-05-11 15:16:08

LLlypuk82
Member
From: Витебск (Беларусь)
Registered: 2012-12-23
Posts: 2,191
Website

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

У меня такой нормально сохранился

[out:xml];
(
//  node["note"~"."]({{bbox}});
// You can also change node into way below

  node["fixme"~"."]({{bbox}});
);
out meta;
>;
out meta qt;

{{style:
node[note]{ 
  text : note;
  color: blue;
  fill-color:blue;
  fill-opacity:1.0;
}
node[fixme]{
  text: fixme; 
  color: red;
  fill-color:red;
  fill-opacity:1.0;
}
way[note]{ 
  text : note;
  color: blue;
  fill-color:blue;
  fill-opacity:1.0;
}
way[fixme]{
  text: fixme; 
  color: red;
  fill-color:red;
  fill-opacity:0.3;
}
}}

Offline

#107 2017-06-15 12:15:40

rinatbakiev
Member
Registered: 2017-05-23
Posts: 6

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

Всем привет!

А подскажите, пожалуйста, пример запроса для выгрузки субъектов РФ? Вроде admin_level 4
И еще вопрос - можно ли выгрузить и районы, города? Или для каждого субъекта надо будет ручками делать?

Offline

#108 2017-06-27 06:58:56

Eduard Popov
Member
From: Vladivostok
Registered: 2017-01-09
Posts: 37

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

rinatbakiev wrote:

Всем привет!

А подскажите, пожалуйста, пример запроса для выгрузки субъектов РФ? Вроде admin_level 4
И еще вопрос - можно ли выгрузить и районы, города? Или для каждого субъекта надо будет ручками делать?

Выгрузка региона:
[out:xml][timeout:25][bbox:{{bbox}}];
(
  relation["admin_level"="4"]["addr:country"="RU"];
);
(._;>;);
out meta;


<br>

У меня тоже вопрос. Хочу выгрузить недостающие полигоны, не попавшие в нарезку, одним запросом.
Возможно можно сделать компактнее, но нужные мне данные приходят вот на такой запрос (3 отношения):
upd. удалось сократить до такого
(
  relation(1125603);
);
(
  ._;
  relation(151225);
);
(
  ._;
  relation(151223);
);
(
  ._;
  way(r);
  node(w);
);
out meta;


Overpass при этом возвращает дублирующиеся данные, если точки/линии содержатся в нескольких линиях/отношениях. Впоследствии на это ругается osmosis. Приходится искать дополнительно, чем бы убить дубли в файле osm.

upd. Последний вариант запроса работает, хотя наверняка можно ещё короче записать

Last edited by Eduard Popov (2017-06-27 08:20:02)

Offline

#109 2017-06-27 07:34:00

rinatbakiev
Member
Registered: 2017-05-23
Posts: 6

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

Eduard Popov wrote:
rinatbakiev wrote:

Всем привет!

А подскажите, пожалуйста, пример запроса для выгрузки субъектов РФ? Вроде admin_level 4
И еще вопрос - можно ли выгрузить и районы, города? Или для каждого субъекта надо будет ручками делать?

Выгрузка региона:
[out:xml][timeout:25][bbox:{{bbox}}];
(
  relation["admin_level"="4"]["addr:country"="RU"];
);
(._;>;);
out meta;


Спасибо за ответ! Но всегда практически runtime error. Какой масштаб использовать или что-нужно сделать, чтобы не было ошибки и получить границы всех регионов? ))

Last edited by rinatbakiev (2017-06-27 07:34:36)

Offline

#110 2017-06-27 07:50:40

freeExec
Moderator
From: Ульяновск,Модератор всех слоёв
Registered: 2012-07-31
Posts: 7,009

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

Да вы микроскопом гвозди забиваете.
https://osm.wno-edv-service.de/boundaries/

Offline

#111 2017-06-27 09:50:26

rinatbakiev
Member
Registered: 2017-05-23
Posts: 6

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

freeExec wrote:

Да вы микроскопом гвозди забиваете.
https://osm.wno-edv-service.de/boundaries/

круто. Но получается как минимум 85 раз нажать , чтобы выбрать субъекты и это не считая районы

Offline

#112 2017-06-27 10:09:21

Sergey Astakhov
Member
From: St.Petersburg, Russia
Registered: 2009-11-13
Posts: 5,456

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

rinatbakiev wrote:

круто. Но получается как минимум 85 раз нажать , чтобы выбрать субъекты и это не считая районы

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

Last edited by Sergey Astakhov (2017-06-27 10:10:06)

Offline

#113 2017-06-27 10:11:07

rinatbakiev
Member
Registered: 2017-05-23
Posts: 6

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

Sergey Astakhov wrote:
rinatbakiev wrote:

круто. Но получается как минимум 85 раз нажать , чтобы выбрать субъекты и это не считая районы

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

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

Offline

#114 2017-06-27 12:32:30

Sergey Astakhov
Member
From: St.Petersburg, Russia
Registered: 2009-11-13
Posts: 5,456

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

rinatbakiev wrote:

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

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

Offline

#115 2017-11-12 15:48:01

molnike
Member
Registered: 2017-11-12
Posts: 4

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

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

Мне хочется просто выгрузить всё содержимое 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););

Offline

#116 2017-11-12 16:25:59

freeExec
Moderator
From: Ульяновск,Модератор всех слоёв
Registered: 2012-07-31
Posts: 7,009

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

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

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

out skel qt;

Offline

#117 2017-11-12 17:11:11

molnike
Member
Registered: 2017-11-12
Posts: 4

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

freeExec wrote:

Но если вам так хочется всё лишнее отрезать

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

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

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

Offline

#118 2017-11-12 20:11:10

gryphon
Member
From: Pskov
Registered: 2010-09-16
Posts: 1,442

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

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

Last edited by gryphon (2017-11-12 20:11:28)

Offline

#119 2017-11-12 21:05:27

molnike
Member
Registered: 2017-11-12
Posts: 4

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

gryphon wrote:

выгружайте дамп с гислаба

Спасибо, но мне нужны полностью АКТУАЛЬНЫЕ данные, даже если они были изменены 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 с водой нужной местности.

Offline

#120 2017-11-12 21:11:27

freeExec
Moderator
From: Ульяновск,Модератор всех слоёв
Registered: 2012-07-31
Posts: 7,009

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

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

Offline

#121 2017-11-12 21:53:18

gryphon
Member
From: Pskov
Registered: 2010-09-16
Posts: 1,442

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

molnike wrote:
gryphon wrote:

выгружайте дамп с гислаба

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

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

Offline

#122 2017-11-12 22:13:43

molnike
Member
Registered: 2017-11-12
Posts: 4

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

gryphon wrote:

всего пара сотен

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

Offline

#123 2017-11-12 22:53:21

Sergey Astakhov
Member
From: St.Petersburg, Russia
Registered: 2009-11-13
Posts: 5,456

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

molnike wrote:

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

Тогда на кой хрен вам актуальность "5 секунд назад"? roll

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

Last edited by Sergey Astakhov (2017-11-12 22:58:30)

Offline

#124 2017-11-14 11:41:48

Cd_spb
Member
From: Санкт-Петербург
Registered: 2011-11-04
Posts: 1,184

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

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

Offline

#125 2017-11-14 11:45:17

freeExec
Moderator
From: Ульяновск,Модератор всех слоёв
Registered: 2012-07-31
Posts: 7,009

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

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

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

Offline

Board footer

Powered by FluxBB