Как получить только ближайшее подмножество узлов пути

Я использую Overpass API для запроса к Open Street Maps близлежащих участков дороги. Я почти уверен, что мой запрос возвращает все из nodes ближайших way... но мне нужны только рядом nodes из ближайших way.

В документации упоминается эта проблема:

В общем, вас скорее будут интересовать полные данные, чем просто элементы одного типа. Во-первых, существует несколько допустимых определений того, что означает «полные картографические данные». Первая неясная тема — что делать с узлами за пределами ограничивающей рамки, которые являются элементами путей, частично лежащих внутри ограничивающей рамки.

Тот же вопрос повторяется для отношений. Если вы ожидаете ограничения поворота, вы можете предпочесть включить все элементы отношения. Если ваша ограничивающая рамка касается, например, границы России, вы, вероятно, не захотите загружать десять тысяч километров границы вокруг половины мира.

Но я посмотрел на последующие примеры и не увидел решения.

По сути, в их примере, как бы я ограничил возвращаемые элементы теми, которые строго находятся в ограничивающей рамке (вместо того, чтобы возвращать всю границу России)?

Мой текущий запрос

way (around:100,50.746,7.154) [highway~"^(secondary|tertiary)$"];
>;
out ids geom;

Я думаю, может быть, мне нужно изменить его на node (around:...), а затем вернуться вверх к way, чтобы запросить тег шоссе, но я не уверен, что я на правильном пути.


person Brad Dwyer    schedule 12.08.2016    source источник


Ответы (1)


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

Обратите внимание, что в зависимости от тегов нет гарантии, что вы найдете узел на определенном расстоянии, особенно если дороги довольно прямые и длинные. Это наверняка повлияет на ваши результаты, поэтому, вероятно, потребуется немного поэкспериментировать с подходящим радиусом.

// Find nodes up to 100m around center point 
// (center is overpass turbo specific for center point lat/lon in current map view)
node(around:100,{{center}})->.aroundnodes;

// recurse up to ways with highway = secondary/tertiary
way(bn.aroundnodes)[highway~"^(secondary|tertiary)$"]->.allways;

// determine nodes belonging to found ways
node(w.allways)->.waynodes;

( 
// determine intersection of all ways' nodes and nodes around center point  
  node.waynodes.aroundnodes;  
// and return ways (intersection is just a workaround for a bug)  
  way.allways.allways; 
 );
out;

проверьте это в Overpass Turbo: http://overpass-turbo.eu/s/hPV

person mmd    schedule 12.08.2016