Proste linie od etykiety do wyróżnienia w QGIS?

11

Próbuję opisać serię obiektów punktowych, ale ze względu na gęstość obiektów punktowych będę musiał przenieść etykiety od obiektów punktowych. Następnie chcę użyć prostej linii prostej (nie strzałki), aby pokazać, która etykieta odnosi się do którego punktu.

Użyłem wtyczki „Łatwe etykiety niestandardowe” do wygenerowania etykiet i przeniesienia ich tam, gdzie chcę. Ale nie jestem w stanie zrobić prostej cienkiej linii prostej między punktem a stołem.

Najlepsze, co udało mi się osiągnąć, to zmienić „typ warstwy symbolu” (warstwa etykiet> Właściwości> Styl) na „strzałkę”, odznaczyć „zakrzywione strzałki” i odznaczyć „powtórz strzałkę na każdym segmencie”. Następnie ustaw długość i grubość główki na 0 i ustaw „szerokość strzałki” i „szerokość strzałki na początku” tak, jak to możliwe. Ale to wciąż tworzy grubą linię. Zobacz zdjęcie A.

Próbowałem ustawić „typ późniejszego symbolu” na „prostą linię”, ale powoduje to powstanie linii z załamaniami / wierzchołkami / narożnikami. Zobacz obraz B.

Idealnie chciałbym, aby proste linie między etykietami a elementem (jak na obrazku A) były podobne do szerokości na obrazie B.

Przykłady dwóch rodzajów etykietowania

QGIS_Noob
źródło

Odpowiedzi:

11

Możesz użyć wyrażenia, aby utworzyć linię między etykietą a geometrią

wprowadź opis zdjęcia tutaj

Wyrażenie:

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

I to powinno dać wynik:

wprowadź opis zdjęcia tutaj

Carlos López Quintanilla
źródło
Po prostu sidenote, jeśli etykiety są przenoszone ręcznie za pomocą paska narzędzi właściwości etykiet, a pozycja jest przechowywana w projekcie, zmienne label_x, y zmieniają się w pola o nazwie „auxiliary_storage_labeling_positionx” i „auxiliary_storage_labeling_positiony”.
Gabriel C.
1
Umieszczenie środkowego punktu 2 jednostek na zachodzie, tak jak tutaj make_point(label_x -2,label_y), sprawi, że etykiety na zachodnim wybrzeżu będą wyglądały śmiesznie. Również praca w innej skali sprawi, że będzie to bezużyteczne. Lepiej byłoby ustawić ten punkt w stosunku do odległości do etykiety i względnej pozycji od środka ciężkości.
Albert
2

Odpowiedź Carlosa sprawia, że ​​wyrównany poziomo lider na końcu etykiety ma tylko jeden punkt w generatorze geometrii, który daje linie proste. W moim przykładzie przesunąłem etykiety ręcznie za pomocą paska narzędzi etykietowania w QGIS 3.0.3. Należy zauważyć, że technikę można znaleźć w pytaniu 232709 .

Jedyne zmiany, które musiałem wprowadzić, to wartości x, y w moim wyrażeniu:

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

Jeśli chodzi o same linie wiodące, drzewo symboli wygląda następująco:

  • Napełnić
    • Generator geometrii
      • Linia
        • Linia znacznika
          • Znacznik
            • Prosty marker
          • Prosta linia

Aby upewnić się, że linie wiodące kończą się w środku etykiety, po prostu edytuj wartości w danych zdefiniowanych w etykietach, wyrównując je do „Środka” dla poziomej i „Połowy” dla pionowej. Aby stylizować linię według potrzeb, użyj prostej linii zagnieżdżonej w linii znacznika.

Gabriel C.
źródło