ポイント位置に直交するラインを書きたい(一本は矢印にしたい)

516 views
Skip to first unread message

フリード・ティンクス

unread,
Sep 15, 2020, 5:49:50 AM9/15/20
to QGIS初心者質問グループ
フリードです。
お疲れ様です。
QGIS3.10を用いて、ポイント位置に直交する2本のラインを書きたいです。
そのうち一本は矢印のように配置したいです。

主線は、下記の属性テーブルにある、
「長さ」と「角度(北0)」
を用いて書いて、従属線は、主線から90°回転させた方向にラインを書きたいという事です。



idが2のラインをシンプルマーカーで作成した時のイメージ図は、

のようになり、赤色のラインが主線となっております。
直交するラインのみは書けたのですが、赤色の主線に対して矢印状に設定したいです。

矢印にすればよいと思い、シンプルマーカーの矢印を選択してやると

のようになり、主線が太くなりすぎて、幅の制御ができません。
欲しい矢印のイメージは

のように、同じ線幅での矢印になってほしいです。
このような場合の矢印線の設定方法を教えていただきたいです。

サンプルの点群ファイルを添付いたします。
よろしくお願いします。

質問.zip

sakuya_izayoi

unread,
Sep 15, 2020, 6:45:27 AM9/15/20
to QGIS初心者質問グループ
izayoiです。
これ結構難しいかもですね。
一応、回避策ですが、SVGマーカーを使えば何とか逃げれました。
主線と提示されている赤矢印を、SVGマーカーのarrowに設定して、長さを「長さ」、高さを「長さ*0.5」に設定して、角度は「角度(北0)」と設定してやることで
それっぽいものができました。
qmlファイルを添付します。
確認してみてください。

そして、これ私も知りたいかも、
主応力のトンボ図作成するときに、これはすごく使える気がする。
svg併用.qml

フリード・ティンクス

unread,
Sep 15, 2020, 6:59:44 AM9/15/20
to QGIS初心者質問グループ
izayoi様
素早い回答ありがとうございます。
主応力トンボ、まさしくそのような図です。それをQGISを用いて作成しようとしておりました、

SVGマーカーを使うとそれっぽくなりますね。なかなかジオメトリジェネレーターなどでは式が思い浮かばず、四苦八苦しておりました。
なんとかジオメトリジェネレーターで書く方法はないのかな?(SVGだと矢印の開き方が調整できない)

ありた

unread,
Sep 15, 2020, 8:05:15 AM9/15/20
to QGIS初心者質問グループ
こんにちは

ジオメトリジェネレータで形状を設定します。
用意されている関数についてよく確認し、落ち着いて考えればそんなに難しくないと
思います。各関数についてはフィールド計算機で確認できるヘルプを参照してください。

主線
collect_geometries(
  make_line(
    project($geometry, "長さ"/2, radians("角度(北0)"-180)),
    project($geometry, "長さ"/2, radians("角度(北0)"))
  ),
  make_line(
    project($geometry, "長さ"/2, radians("角度(北0)")),
    project(
      project($geometry, "長さ"/2, radians("角度(北0)")),
        2, radians("角度(北0)"-180-30))
  ),
  make_line(
    project($geometry, "長さ"/2, radians("角度(北0)")),
    project(
      project($geometry, "長さ"/2, radians("角度(北0)")),
        2, radians("角度(北0)"-180+30))
  )
)

従属線
make_line(
  project($geometry, "長さ"/2, radians("角度(北0)"-90)),
  project($geometry, "長さ"/2, radians("角度(北0)"+90))
)

矢印の長さは2、開きの角度は30度としていますが、好みによって適宜変更してください。

フリード・ティンクス

unread,
Sep 15, 2020, 9:35:44 PM9/15/20
to QGIS初心者質問グループ
ありた様
ご回答ありがとうございます。色々と出来るのですね。
これは呪文ですね。これがそんなに難しくないと言えるようになりたいですね。
主部コードの6から11行目なのですが
make_line(
    project($geometry, "長さ"/2, radians("角度(北0)")),
    project(
      project($geometry, "長さ"/2, radians("角度(北0)")),
        2, radians("角度(北0)"-180-30))

赤く塗ったprojectが二回出てくるのは何をやっているのでしょうか?

ありた

unread,
Sep 18, 2020, 9:06:12 AM9/18/20
to QGIS初心者質問グループ
こんにちは

主線の矢印部分ですが、下記の方がよいですね。すみません
(以前のものは線を太くしたときに矢じり部分のスタイルが少し汚いため)
collect_geometries(
  make_line(
    project($geometry, "長さ"/2, radians("角度(北0)"-180)),
    project($geometry, "長さ"/2, radians("角度(北0)"))
  ),
  make_line(
    project(
      project($geometry, "長さ"/2, radians("角度(北0)")),
        2, radians("角度(北0)"-180-30)),
    project($geometry, "長さ"/2, radians("角度(北0)")),
    project(
      project($geometry, "長さ"/2, radians("角度(北0)")),
        2, radians("角度(北0)"-180+30))
  )
)

project が二重になっている件ですが、落ち着いて考えてみましょう。

まず内側の project ですが、 $geometry は点データ本来の座標データです。
ですので、その座標から「角度」方向に「長さ/2」だけ進んだ地点を計算します。

そして外側の project は「「角度」方向に「長さ/2」だけ進んだ地点」から
「角度-180-30度」方向に「2」だけ進んだ地点を計算します。
(矢印の矢じりの長さを2、ひらきの角度を30度とする場合)

フリード・ティンクス

unread,
Sep 29, 2020, 2:02:14 AM9/29/20
to QGIS初心者質問グループ
ありた様
たびたびすみません。そして、返信遅れて申し訳ありません。

ジオメトリジェネレータもなかなか難しいですね。
複数人でやらないといけない作業だったので、今回はizayoiさんのやり方で対応しましたが、今度個人で行う作業となった場合にはありた様のやり方も取り入れていきたいです。

2020年9月18日金曜日 22:06:12 UTC+9 ありた:
Reply all
Reply to author
Forward
0 new messages