0

Overpass APIにクエリを実行して、特別な関係 (鉄道)​​ の距離を調べたいと考えています。リクエストは問題なく、すべてのrelationwayおよびnode興味のあるオブジェクトを返します。ハンブルグの例:

[out:json];(rel(53.55224324163863, 10.006766589408304, 53.55314275836137, 10.008081410591696)["route"="train"];>;);out body;

Overpass では、各relationオブジェクトにこの関係を定義するメンバーがあります。オブジェクトの場合way、その属性の緯度/経度を解決し、nodeその方法で距離を計算できます。すべての距離を合計すると、妥当なようです。

relationただし、タイプのメンバーがありnode(ほとんどの場合、role「停止」の があります)、それからの停止の正しい順序を表しているようですrelation。でも、メンバーの中間ではなく、だいたい最後にいる。ウェイの内側のストップを調べようとすると、すべてが存在するわけではありません。特定の 2 つの停留所間の距離を計算するにはどうすればよいですか?

4

1 に答える 1

1

関係について誤解があるようです。リレーション メンバーは、必ずしも並べ替える必要はありません。したがって、必要に応じて、メンバーを自分でソートする必要がある場合があります。

さまざまなタイプのリレーションに対してきちんとした並べ替えアルゴリズムを備えたJOSMを見ることができます。しかし、ロールストップのメンバーを正しい位置に配置することはできないと思います。stop ロールを持つ各ノードでウェイを必ずしも分割する必要がないため、これが常に可能であるとは限りません。これはまた、1 つのウェイに stop ロールを持つ複数のノードが含まれる可能性があることを意味し、リレーション メンバーを正しく並べ替えることができなくなります。それに応じて各方法を分割するための前処理を行わない限り。

各ストップ間の距離を計算するために、要素を並べ替える必要はないようです。すべての各ノードを繰り返し処理し、各ノードが対応するリレーションで停止ロールを持っているかどうかを確認する方法に従ってください。道の終わりに達したら、開始または終了で同じノードを共有し、関係のメンバーでもあるものに進みます。

于 2014-11-05T08:00:40.870 に答える