2016-08-12 5 views
0

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

In the documentation it references this problem:

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

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

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

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

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

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

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

ответ

2

На самом деле, это даже немного сложнее, поскольку вам необходимо установить пересечение всех узлов на расстоянии 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; 

проверить его в путепровода турбо: http://overpass-turbo.eu/s/hPV