2016-08-12 8 views
0

私はオーバーパスAPIを使用して、近くの道路セグメントに対してオープンストリートマップを照会しています。私は私のクエリは近くwaynodesのすべてを返していることをかなり確信している...しかし、私は近くのway近くnodesをしたいです。ウェイのノードの近くのサブセットを取得する方法

In the documentation it references this problem:一般的に

、あなたは、単一のタイプの単なる 要素よりも完全なデータではなく、興味があるだろう。最初に、「完全な地図データ」が意味するもののいくつかの有効な定義があります。 最初の不明な話題は、 が境界ボックスの外側にあるノードで、 が部分的に境界ボックスの内側にある方法のメンバーであることです。

リレーションに対して同じ質問が繰り返されます。 の制限を待つ場合は、関係のすべての要素を取得することをお勧めします。 あなたのバウンディングボックスが、たとえばロシアの国境に当たる場合、 境界の数十キロメートルをダウンロードしたくない可能性があります。 世界の約半分。

しかし、私は後の例を見て、解決策を見ませんでした。

基本的に、これらの例では、返される要素を(ロシアの境界線全体を返すのではなく)境界ボックス内に厳密に制限する方法を教えてください。

私の現在のクエリは、私は多分私はnode (around:...)に変更した後、高速道路のタグを照会するwayに上向きに再帰する必要がありますが、私は、私もだかはわからないと思ってい

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

です適切なトラックに。

答えて

2

実際には、100mの距離にあるすべてのノードと関連する方法の1つに属するノードが設定されている必要があるため、さらに複雑になります。クエリは次のようになります。必要に応じて距離、タグを調整します。

タグ付けによっては、特定の距離にノードがあることを保証するものではありません。特に、道路が比較的まっすぐで長めの傾向がある場合は特にそうです。これは確かにあなたの結果に影響を与えるので、適切な半径で少し実験することが必要になるでしょう。

// 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

関連する問題