標高に基づいてポイント間の距離を測定するにはどうすればよいですか?


10

ポイント間の距離を測定できるようにする必要がありますが、距離は標高との関係で計算する必要があります。ポイントは、19世紀の語り手たちの家と、その物語で言及されている場所です。したがって、距離は「歩行距離」でなければなりません。谷に沿ったパスは、実際の直線距離が短い場合でも、山の上のパスよりも短くなる可能性があります。添付のスクリーンショットは私の考えを示しています。したがって、画像では、パスAとCはパスBよりも短く計算されます。ポイントと標高

ポイントはCSVファイルからのものですが、標高データを含むラスターレイヤーもあります。


1
歩行時間を計算した方がいいと思います。歩行の速度は傾斜に依存し、上向きは下向きよりも時間がかかります。
AndreJ 2014年

1
フラットマップの距離と比較した「3D」距離?その差はおそらくあなたが思っているよりも小さいでしょう。MICRODEMの背後にいる男Peter Guthは、「距離または面積は、傾斜角の割線によって増加し、非常に大きな傾斜に達するまで、割線は本質的に1になります。」と述べました。
nhopton 2014年

回答:


6

この目標を達成することはGISのいくらか基本的なタスクですが、QGISの方法は簡単ではないかもしれません。最良の可能性は、GRASSのr.walk関数を使用することです。この関数は、異方性コストサーフェスを作成します(dem + slope +その他の要素)。

まず、への入力として摩擦サーフェスを作成する必要がありますr.walk。あなたのケースでは、DEMの範囲に一致する単一値のラスター(1.0)にすることができます。次r.mapcalculatorの式で作成できます:A*0+1AはDEMです。

次に、CSVから一連の開始点を選択する必要があります。これらはポイントであり、累積コストサーフェスはそこから計算されます。すべての開始点から個別の原価面を作成する必要があります。このステップのすべての開始ポイントに関連付けられている終了ポイントを(コース外の個々のレイヤーで)定義する方が賢明な場合があります。その後、r.walk作成した入力で実行できます。開始点は単一のレイヤーにすることができ、ダイアログボックスの緑の矢印を使用して開始点を繰り返すことができます。

理想的なケースでは、コストサーフェスとすべてのコストサーフェスの終点があります。理論的には、で最小コストのパスを見つけることができましたr.drainが、私にとってはエラーになりました(PythonはQgisRasterライブラリをインポートできませんでした)。同じ問題が発生する場合は、SAGAの「最小コストパス」アルゴリズムを使用できます。コストサーフェスのあるすべての終点にポイントとラインレイヤーが作成されます(繰り返しボタンをもう一度使用します)。すべてのラインを取得したら、SAGAの「シェイプレイヤーのマージ」ツールを使用して、ラインを1つのシェープファイルにマージできます。

このメソッドは、ポイントの増加により非常に遅くなる可能性があるため、ポイントが多い場合は、Pythonでメソッドを自動化しようとする場合があります。計算にはまだ時間がかかりますが(特にコストサーフェス)、大量の終点レイヤーを手動で作成する必要はありません。


おかげで、おそらくGRASSの使い方を学ぶ必要があります。私も問題があると思います。投稿したイラストでは、山の多くが通行できないと想定しているので、「山がxよりも高い場合は回避してください」などを追加する必要があります...しかし、答えは、これはおそらく私が始めるのに役立つでしょう。
トラウスティド2014年

それはで簡単な状態ですr.walk。摩擦マップを使用して、通行できないセルを設定できます。ルールファイルr.reclassなどのルールを使用してDEMを再分類します1 thru 2000 = 1 2000 thru * = 9999(しきい値が2000mの場合)。このようにして、アルゴリズムは高い摩擦値を持つセルを通過させず、それを回避するためのコストが削減されます。
Gabor Farkas 2014年

これを本当にありがとう!私は本当にGRASSの知識があまりありませんが、これは本当に素晴らしい出発点です。
Traustid 2014年

どういたしまして。正直なところ、私はまだあなたの仕事に驚いています。これは最良の例の1つであり、GISを最も広範な分野に適用する方法です。
Gabor Farkas 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.