QGIS : 変動量を矢印で表現するには

各点における変動量を、点から変動量に相当する矢印で表現したい場合がしばしばあるかと思います。
それをQGISで表現するには以下のようにします。

前提、準備

ここでは、期首の座標と期末の座標がCSV形式であって、期首から期末への移動量を表示したいものとします。
まず、これらのテーブルをdelimited textでQGISに読み込み、属性テーブル結合して以下のような形式になっているものとします。

属性テーブル

準備段階での属性テーブル

なお、delimited textレイヤのままではシンボルが正しく反映されないので、ここで一度shapeファイルに保存しておきましょう。

変動量と変動方角フィールドの作成

まずは、期末と期首の座標値の変動量と変動の方角を示すフィールドを作成します。
field calculatorを開いて、以下の式を入力します。

変動量フィールド(ここではdistanceフィールドとする)
sqrt(("X" - "EX")^2 + ("Y" - "EY")^2)
角度(ここではazimutフィールドとする)
90 - atan2(("Y"-"EY", "X"-"EX")*180/pi()
フィールドカリキュレータ

field calculatorで角度を入力しているところ

編集後のテーブル

編集後のテーブル

矢印の棒を作成

フィールドを記録したら、プロパティで以下のように設定します。
新規にシンボルレイヤを追加し、シンプルマーカの中から「|」シンボルに設定し、size、angleをそれぞれ先ほど作成したフィールドに設定します。

sizeフィールドを指定

距離フィールドを指定

angleフィールドを指定

角度フィールドを指定

さらに、anchorをbottomに、sizeの単位をMapUnitに指定します。

anchorを指定

anchorを指定

「|」を選択した場合は、色はアウトラインカラーで指定します。

プロパティ画面

プロパティ画面

ここでは正しくマーカーが設定されていることを確認するために、始点と終点にポイントマーカーを置いています。
図のように、始点から終点まで線でつながっていればOKです。

ここまでの表示状態

ここまでの表示状態

ちなみに、「|」シンボルの代わりに「↑」シンボルを選択すると、一応矢印はできますが、長さとともに矢印自体の大きさも変化するので、下図のようになります。
これでもよければこれ以下の作業は必要ありません。

矢印シンボルでの表示状態

矢印シンボルでの表示状態

矢尻を作成

矢尻の位置はオフセットで指定するので、新たにオフセットの量を定義したフィールドを作成する必要があります。
オフセット量はX、Yそれぞれ指定するようになっていますが、フィールドの指定は1つだけで、文字列型で指定する必要があります。
すなわち、オフセット量は「Xオフセット量,Yオフセット量」の文字列型を記録します。
注意すべき点は、回転とオフセットの両方を指定した場合、適用の順番はオフセット->回転の順になります。
したがって、オフセットにX、Yそれぞれの差分を指定するとそこから点の座標を中心として回転した位置にマーカーが描画されてしまいます。
矢尻の向きは回転で指定する必要があるので、これでは正しく描画されません。
回転の原点は北向きで、オフセット量のYは下向きがプラスです。これらのことから、結論としてオフセットのフィールドに適用する式は以下のようになります。

オフセット量フィールド
concat('0',',',to_string(-1*"distance"))
オフセット量追加

オフセット量追加

すなわち、北方向に距離分オフセットして、そこから回転を適用させるということになります。
こちらも単位をMapUnitに設定します。また、anchorにはTOPを指定します。

矢尻のシンボルは、シンプルマーカーから上向きの△を選択してもいいですが、個人的にはSVGマーカーの矢尻がカッコイイと思います。

完成

完成
アーカイブ