Gerade Linien vom Etikett zum Feature in QGIS?

11

Ich versuche, eine Reihe von Punktmerkmalen zu beschriften, aber aufgrund der Dichte der Punktmerkmale muss ich die Beschriftungen von den Punktmerkmalen entfernen. Ich möchte dann eine einfache gerade Linie (keinen Pfeil) verwenden, um zu zeigen, welche Beschriftung sich auf welchen Punkt bezieht.

Ich habe das Plugin "Easy Custom Labels" verwendet, um die Etiketten zu generieren und an die gewünschte Stelle zu verschieben. Was ich aber nicht tun kann, ist eine einfache dünne gerade Linie zwischen dem Punkt und der Tabelle zu erstellen.

Das Beste, was ich erreicht habe, ist, den "Symbolebenentyp" (Beschriftungsebene> Eigenschaften> Stil) in "Pfeil" zu ändern, "gekrümmte Pfeile" zu deaktivieren und "Pfeil für jedes Segment wiederholen" zu deaktivieren. Und dann machen Sie die Kopflänge und Dicke 0 und machen Sie die "Pfeilbreite" und "Pfeilbreite am Anfang" so wie möglich. Aber das schafft immer noch eine klobige Linie. Siehe Bild A.

Ich habe versucht, den Typ "Symbol später" auf "einfache Linie" zu setzen, aber dies führt zu Linien mit Knicken / Eckpunkten / Ecken. Siehe Bild B.

Im Idealfall möchte ich gerade Linien zwischen den Beschriftungen und dem Feature (wie in Bild A), die eine ähnliche Breite wie in Bild B haben.

Beispiele für zwei Arten der Kennzeichnung

QGIS_Noob
quelle

Antworten:

11

Sie können einen Ausdruck für verwenden, um eine Linie zwischen Beschriftung und Geometrie zu erstellen

Geben Sie hier die Bildbeschreibung ein

Ausdruck:

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

Und das sollte das Ergebnis sein:

Geben Sie hier die Bildbeschreibung ein

Carlos López Quintanilla
quelle
Nur eine Randnotiz: Wenn die Beschriftungen manuell mithilfe der Symbolleiste für Beschriftungseigenschaften verschoben werden und die Position im Projekt gespeichert wird, ändern sich die Variablen label_x, y in die Felder "auxiliary_storage_labeling_positionx" und "auxiliary_storage_labeling_positiony".
Gabriel C.
1
Wenn Sie Ihren Mittelpunkt 2 Einheiten nach Westen platzieren, wie Sie es hier tun make_point(label_x -2,label_y), sehen die Etiketten an der Westküste lustig aus. Wenn Sie in einem anderen Maßstab arbeiten, wird dies ebenfalls unbrauchbar. Es wäre besser, diesen Punkt in Bezug auf den Abstand zu Ihrem Etikett und die relative Position von Ihrem Schwerpunkt festzulegen.
Albert
2

Carlos 'Antwort ergibt eine horizontal ausgerichtete Führungslinie am Etikettenende, obwohl nur ein Punkt weniger im Geometriegenerator gerade Linien ergibt. In meinem Beispiel habe ich die Beschriftungen manuell mithilfe der Beschriftungssymbolleiste in QGIS 3.0.3 verschoben. Beachten Sie, dass die Technik in Frage 232709 zu finden ist .

Die einzigen Änderungen, die ich vornehmen musste, sind die x, y-Werte in meinem Ausdruck:

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

Was die Führungslinien selbst betrifft, sieht der Symbologiebaum folgendermaßen aus:

  • Füllen
    • Geometriegenerator
      • Linie
        • Markierungslinie
          • Marker
            • Einfacher Marker
          • Einfache Linie

Um sicherzustellen, dass die Führungslinien in der Etikettenmitte enden, bearbeiten Sie einfach die Werte in der Datendefinition der Etiketten in 'Mitte' für Horizontale und 'Hälfte' für Vertikale. Verwenden Sie die einfache Linie, die in der Markierungslinie verschachtelt ist, um die Linie nach Ihren Wünschen zu gestalten.

Gabriel C.
quelle