QGISのラベルからフィーチャへの直線?


11

私がやろうとしているのは、一連のポイントフィーチャにラベルを付けることですが、ポイントフィーチャの密度が高いため、ラベルをポイントフィーチャから遠ざける必要があります。次に、(矢印ではなく)単純な直線を使用して、どのラベルがどのポイントを参照しているかを示します。

プラグイン「Easy Custom Labels」を使用してラベルを生成し、希望する場所に移動しました。しかし、私ができないことは、ポイントとテーブルの間に単純な細い直線を作成することです。

私が達成した最高の方法は、「シンボルレイヤータイプ」(「ラベルレイヤー」>「プロパティ」>「スタイル」)を「矢印」に変更し、「曲線矢印」のチェックを外し、「各セグメントの矢印を繰り返す」のチェックを外すことです。そして、頭の長さと太さを0にし、これをできるだけ「矢印の幅」と「開始時の矢印の幅」にします。しかし、これはまだ分厚いラインを作成します。画像Aを参照してください。

「シンボルの後でタイプ」を「単純な線」に設定してみましたが、これにより、ねじれ/頂点/コーナーが線で表示されます。画像Bを参照してください。

理想的には、画像Bと同じ幅のラベルと対象物(画像Aのような)の間の直線が欲しいです。

2種類のラベルの例

回答:


11

の式を使用して、ラベルとジオメトリの間に線を作成できます

ここに画像の説明を入力してください

表現:

CASE 
 WHEN (label_x IS NOT NULL AND label_y IS NOT NULL) THEN
  make_line(centroid($geometry),make_point(label_x -2,label_y), make_point(label_x ,label_y))
ELSE
  NULL
END

そして、これは結果になるはずです:

ここに画像の説明を入力してください


余談ですが、ラベリングプロパティツールバーを使用してラベルを手動で移動し、位置をプロジェクトに保存すると、label_x、y変数は「auxiliary_storage_labeling_positionx」および「auxiliary_storage_labeling_positiony」というフィールドに変わります。
Gabriel C.

1
ここでmake_point(label_x -2,label_y)行うように、中点を西に2ユニット配置すると、西海岸のラベルが面白くなります。また、異なるスケールで作業すると、これは役に立たなくなります。ラベルまでの距離と重心からの相対位置との関係でこのポイントを設定する方が効果的です。
アルバート

2

カルロスの答えは、ジオメトリジェネレーターで直線が1つだけ少ないポイントを提供しますが、ラベルの端に水平に配置されたリーダーを作成します。私の例では、QGIS 3.0.3のラベル付けツールバーを使用して手動でラベルを移動しました。テクニックは質問232709にあります。

私が行う必要がある唯一の変更は、式のx、y値です。

CASE
   WHEN ("auxiliary_storage_labeling_positionx" IS NOT NULL AND "auxiliary_storage_labeling_positiony" IS NOT NULL) THEN
        make_line(centroid($geometry),make_point("auxiliary_storage_labeling_positionx","auxiliary_storage_labeling_positiony"))
   ELSE
      NULL
END

リーダーライン自体については、シンボルツリーは次のようになります。

  • 埋める
    • ジオメトリジェネレータ
      • ライン
        • マーカーライン
          • マーカー
            • シンプルなマーカー
          • シンプルなライン

リーダーがラベルの中央で終了するようにするには、ラベルのデータ定義の配置の値を編集して、水平の場合は「中央」、垂直の場合は「半分」に変更します。線を必要なものにスタイルするには、マーカー線にネストされた単純な線を使用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.