QGISでラインに平行なラベルを付ける
QGIS 3.4が発表されているのに、今更2.18について何で書いてるのか・・・?という疑問は無視して、QGIS 2.xでラインに平行なラベルを書くための設定を説明します。
デフォルトの表示
QGISでラインに対し平行なラベルを表示させようとすると、回転角が上手く計算できずに困ったことはありませんか?
私は、いつも悩みます。
2点で構成された直線aに水平なラベルを描くのですが、回転角によって表示にバラツキが生じます。
デフォルトでは、こんな感じに表示されます。
図1 デフォルト表示
図1に示した表示はデフォルトでの表示例です。
一見、回転角に合わせて表示されている様にも見えますが、線分を360度回転させた時に必ず上もしくは左に表示されています。
今回の目的は、線分の始点(P1)と終点(P2)が反転した場合には、反転して表示して欲しいので、目的とは合いません。
この現象は、QGIS 3.xでも同じようになります。
ちなみに、図1の線分に平行して表示されている数値はP1→P2に向けた線分の回転角になります。
線分の回転角は以下の計算で算出しています。
【数式1】
1 |
degrees( azimuth( point_n($geometry,1),point_n($geometry,2))) |
線分の回転に合わせてラベルを回転させる
ここから、線分の回転角に合わせてラベルを回転させる設定を施します。
図2 ラベルの配置設定
ラベルの配置設定で以下の項目を設定します。
①「配置」→「許容される位置」→「ラインの方向に依存した位置」を指定します。
②回転の角度を指定します。
回転の角度は以下に示す数式を指定します。
【数式2】
1 |
360-degrees(azimuth( point_n( $geometry ,1), point_n( $geometry ,2)))+90 |
数式1で示した計算で表示出来れば良いのですが、どうも線分の回転角とラベルの回転角は、回転方向が異なっている様です。
その為、「360-」とすることで、回転角を逆方向にしています。
更に、このままですと線分に対して垂直にラベルが表示されてしまうため、最後に「+90」をすることで水平な角度へ変換しています。
QGIS 3.xでは、この計算が異なります。
「360-」を除いた以下の数式になります。
【数式3】
1 |
degrees(azimuth( point_n( $geometry ,1), point_n( $geometry ,2)))+90 |
次に、レンダリングの設定を変更します。
図3 ラベルのレンダリング設定
ラベルの「レンダリング」で「ラベルを逆さまに表示する」を「回転が指定されている場合」に設定します。
設定は以上になります。
結果は以下の通りです。
図4 結果表示
P1とP2が逆の場合は、応用問題ですから適当に数式を変更するなどの対処が必要となるかも知れませんが、概ねこれで参考情報にはなるでしょう。