2018/08/25

ポリゴンからラベルへ引出線を書く

前置き

以前、「小班の外に小班名を移動させて、小班まで線を引く方法はないか?」
(訳:ポリゴン外のラベルに引出線を書きたい)
という相談を受けたのですが、多忙で余裕がなかったことと、
おなじみ『森林土木memo』に解答が載っているのは知っていたが、
http://koutochas.seesaa.net/article/450508062.html
職場のネットワークがseesaa.netを規制していて見られなかったことから

「画像でエクスポートして、グラフィックソフトでいじれ」という酷い返答をしました。

その節はごめんなさい。「スマホでググれ」と言えばよかったです。
もはや誰に質問されたのかも覚えてないので、自分用メモとして記しておきます。
(& QGIS3対応ということで)


1.ラベルの配置設定


QGIS2系では、ラベルを移動させるために、ラベル位置のX・Y座標を登録するための属性フィールドを追加する必要がありましたが、3系は属性フィールドがなくてもラベルを動かせます

『ラベルの移動』アイコンを選択後、
任意のラベルをクリックしてみてください。


最初にプライマリキーを選択する必要があるので、地物の個別IDなどが登録されている属性フィールドを選択しましょう。
(属性データにダブりがあるフィールドは選ばないように)

プライマリキーの選択をしたら あとは自由にラベルを移動させることができます。
レイヤのラベル設定を確認すると、ラベル配置の座標X・Yが自動的に
auxiliary_storage_labeling_positionx(及びy)に設定されていることが分かります。



2.シンボロジー設定でラインを引く


小班(ポリゴン)のプロパティを開き、シンボロジーを選択して、
】ボタン(シンボルレイヤの追加)をクリックします。


・シンボルレイヤタイプを【Geometry generator】に設定
・ジオメトリタイプを【ラインストリング/マルチラインストリング】に設定
・右にある【ε】ボタンをクリック

式に
make_line( point_on_surface( $geometry ) , make_point( “auxiliary_storage_labeling_positionx” , “auxiliary_storage_labeling_positiony” ))
と入力してください(↑をコピペでOK)。

これでラベルを移動させると、自動的に線が引かれるようになります。

式の内容を具体的に説明すると、
make_line ( A , B ) → A から B にラインを引く

A→ point_on_surface( $geometry ) → ポリゴンの中心に点を設定
※centroid( ) を使うと、凹型ポリゴンなどの場合、ポリゴンの外に点が設定される場合があります。

B→ make_point( X , Y ) → 座標X・Yに点を設定

ということで、 ポリゴンの中心点Aから、ラベルのある点B にラインを引く式になっています。

ちなみに、コピペではなく自分で式を入力する場合は、
ジオメトリの中に
・make_line
・point_on_surface
・make_point
の項目があります。

また、フィールドと値の中に
・auxiliary_storage_labeling_positionx
・auxiliary_storage_labeling_positiony
の項目があります。
これらはダブルクリックすることで、式へ反映させることができます。

あとはシンボロジー設定から、ポリゴン・ラベル間の線の種類・色など変更することができます。




3.ラベルを元に戻す

設定によりますが、通常は地図をスクロールすると、ラベルはポリゴンの可視範囲内の中心に移動するようになっています。

しかし、ラベルを移動させた場合は、ラベル位置が固定されてしまうので、元に戻したい場合は、
ラベルツールバーの『ラベルを変更する』アイコンをクリックして

戻したいラベルをクリックします。

選択したラベルのプロパティが開くので、『X座標』『Y座標』を削除すれば、

ラベル位置が元に戻ります。


0 件のコメント:

コメントを投稿