Linie łączące etykiety z obiektami w QGIS

Z problemem etykiet, które nie chcą się zmieścić użytkownicy QGIS spotykają się dość często. Występuje on zwykle przy opracowaniu map, dla których skala i zawartość nie mogą zostać zmienione. Wykorzystanie jednej z metod automatycznego rozmieszczenia etykiet w obszarach o dużym zagęszczeniu obiektów może być niewystarczające.

Znacie takie obrazki? Część etykiet nie została wyświetlona.

Możemy oczywiście wymusić wyświetlanie wszystkich etykiet wraz z nachodzącymi na siebie ale wówczas (przynajmniej w tym wypadku) przekaz będzie jeszcze mniej czytelny.

Włączenie wyświetlania etykiet nachodzących na siebie pogorszyło czytelność

W takich sytuacjach można zastosować ręczne rozmieszczenie etykiet, tak żeby się nie pokrywały, obecnie bardzo łatwo to zrobić narzędziem „Przesuń etykiety” z paska narzędzi „Etykiety”. Jednak przy dużej liczbie etykiet trudno jest w jednoznaczny sposób przyporządkować odbiorcy etykietę do obiektu.

Wszystkie etykiet są wyświetlone jednak czytelność nadal pozostawia wiele do życzenia.

Aby poprawić czytelność można wykorzystać Generator geometrii do rysowania linii łączących obiekty z etykietami. Żeby uniknąć przecinania etykiet powstałymi liniami należy zróżnicować punkt przyłączenia (z prawej lub lewej strony, można też dodać różnicowanie z góry i z dołu) w zależności od kierunku etykiety. Do wskazania punktu położenia etykiety służą funkcje (albo raczej ukryte wirtualne kolumny) „auxiliary_storage_labeling_positionx” i „auxiliary_storage_labeling_positiony”.

CASE WHEN 
degrees( azimuth( make_point($x, $y),
make_point ("auxiliary_storage_labeling_positionx" , "auxiliary_storage_labeling_positiony") ) ) < 185 THEN
make_line(
  make_point($x, $y),
  make_point("auxiliary_storage_labeling_positionx" ,"auxiliary_storage_labeling_positiony" )
)

 WHEN 
degrees( azimuth( make_point($x, $y),
make_point ("auxiliary_storage_labeling_positionx" , "auxiliary_storage_labeling_positiony") ) ) < 337.5 THEN
make_line(
  make_point($x, $y),
  make_point("auxiliary_storage_labeling_positionx"+(length ("name")/1.5),"auxiliary_storage_labeling_positiony")
)
 WHEN 
degrees( azimuth( make_point($x, $y),
make_point ("auxiliary_storage_labeling_positionx" , "auxiliary_storage_labeling_positiony") ) ) > 337.5 THEN
make_line(
  make_point($x, $y),
  make_point("auxiliary_storage_labeling_positionx" ,"auxiliary_storage_labeling_positiony")
)
END
Linie poprawiają czytelność etykiet

Dodam jeszcze belkę podkreślającą i będzie w „stylu CAD”. Znów przyda się Generator geometrii, który posłuży do utworzenia stosownej linii. Tym razem linia zostanie narysowana pod etykietą, między dwoma punktami, pierwszym będzie punkt położenia etykiety, drugi dobieramy w zależności od długości etykiety.

make_line(
    make_point("auxiliary_storage_labeling_positionx" ,"auxiliary_storage_labeling_positiony" ),
	make_point("auxiliary_storage_labeling_positionx" + (length ("name")/1.5)	,"auxiliary_storage_labeling_positiony" ))
Tak wygląda końcowy efekt.

One Reply to “Linie łączące etykiety z obiektami w QGIS”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *