角度差

211 views
Skip to first unread message

小林

unread,
Jun 13, 2018, 10:41:26 PM6/13/18
to QGIS初心者質問グループ
バラバラに分解した線分A,Bがあったとして、その線分同士の角度差を求める方法がわかりません。
属性テーブル上での、次の線分との角度差をフィールド計算機で拾いたいです。

最終的には角度差〇〇以上の線分のみ抽出という方法をとるつもりです。

環境
OS windows10
QGIS ver2.14.13

よろしくお願いします。


福岡

unread,
Jun 14, 2018, 2:40:05 AM6/14/18
to QGIS初心者質問グループ
小林 様

以前、線分の角度を取得する式に関して投稿したことがありますので、お知らせします。

式:atan2(xat(-1)-xat(0), yat(-1)-yat(0)) / 0.017453
スレッド名:各頂点間の距離、角度を調べる方法

計算ができたら属性テーブルのデータを全選択し、Ctrl+Cでクリップボードへ取り込んで、これをExcelへ貼り付けます。
今回のケースでは違う地物(対比する線分)の角度が計算上必要ですので、Excelを使って処理するのが一番簡単かと思います。

yoh_chan

unread,
Jun 14, 2018, 9:30:24 AM6/14/18
to QGIS初心者質問グループ
小林さま:

こんにちは。

福岡さまの計算と本質的に同じだと思いますが、二点間の角度を得るazimuthという関数があるので、これを利用することもできます。
以下、単一のラインストリングが頂点毎の線分に分割された地物群を想定します。

①地物のIDを振る
例として、"FID"というフィールドを生成しています。
数式: $id
※地物毎に既にユニークかつ隣接する地物で連続する整数IDが振られていれば、それを利用すればよいです。

②始点と終点の二点間の角度(線分の角度)を計算する
例として、"degree"というフィールドを生成しています。
数式: degrees(azimuth(start_point($geometry), end_point($geometry)))
※角度は、北を0°として、時計回りに表されます。

③次の線分との差角を計算する
例として、"difference"というフィールドを生成しています。
数式: attribute(get_feature(@layer_id, 'FID', "FID"+1), 'degree') - "degree"

この方法だと、最後の線分は次の線分を持たないので、差角("difference"列)は最後のレコードがNULLになります。
前後関係で負の値になるものも出てくるので、場合分けが必要かもしれません。


参考まで、このテストで作成したデータを添付します。(QGIS 2.14 で作成しました。)
もし、「交差する別のラインストリング同士の角度を計算する」ということであれば、フィールド計算機ではなかなか難しそうだな…と感じます。
20180614.zip

adachi

unread,
Jun 14, 2018, 4:16:24 PM6/14/18
to QGIS初心者質問グループ
自分で回答をひねり出そうとしたり、皆様の投稿を拝見しているととても勉強になります。

私も当初yoh_chan様と同じような過程をたどり、最後の計算で出る「差角」にどういう意味があるのか頭を悩ませていたのですが
(図でいうと、最初の線分間の角がどちら側から見ても119度には見えない…)
図にしていただいてスッキリしました。

differenceの絶対値が180より大きいかそうでないかでの場合分けになりますね(ここまでくるともはやGISは関係ないですが)。

|difference| > 180 のとき 線分間の角 = |difference| - 180 
|difference| < 180 のとき 線分間の角 = 180 - |difference|
それ以外(|difference| = 180)のとき 線分間の角 = 180

数式にすると

CASE
WHEN abs("difference") > 180 THEN abs("difference") - 180
WHEN abs("difference") < 180 THEN 180 - abs("difference")
ELSE 180
END

でしょうか。
③の手順のあとに新しいフィールド作って上記の式を入れれば(開いてないほうの)線分の角が出るかと思います。
yoh_chan様のおっしゃる通り、線分がすべて順番にきれいに並んでいるという前提ですが…

bins...@gmail.com

unread,
Jun 15, 2018, 3:12:02 AM6/15/18
to QGIS初心者質問グループ
福岡様 yoh_chan様 adachi様

返信が遅くなり、申し訳ありません。

皆様の助言のおかげで、
無事に欲しいデータを作成することができました。
ありがとうございました。

また、別の件で質問する機会があるかもしれません。
そのときもよろしくお願いします。

Reply all
Reply to author
Forward
0 new messages