[FOSSGIS-Talk] QGIS - Bezugslinien zu Beschriftungstexten automatisch generieren lassen

Claas Leiner claas.leiner at gkg-kassel.de
Mi Sep 21 10:10:38 CEST 2016


Hallo Peter,

wenn Du, wie Bernhard vorschlägt, Deine Beschriftungen mit der Maus 
platziert, in dem Du die für die datendefnierte Platzierung notwendigen 
Spalten anlegst (z.B. xc und yc), kannst Du in einem zwiten Schritt 
Bezugslinien generieren..
Das geht mittels räumlicher SQL als virtueller Layer (Layer hinzufügen > 
virtueller Layer) oder über den Geometriegenerator in in der Symbolisierung.

Etwas sperrig aber effektiv.

Du erzeugst eine Linie zwischen einer Punktgeometrie und der Position 
des Labels über die Funktion MakeLine(Startpunkt, Zielpunkt). Wenn es 
sich um Polygone handelt, müsstest Du Dich z.B. auf das Centroid des 
Polygons beziehen.
------------------------
Prinzip des SQL-Aufrufs im virtuellen Layer:

Select
MakeLine(Startpunkt, Zielpunkt) As geometry
from Layer

------------------------
Startpunkt wäre die Punktgeometrie

Select
MakeLine(geometry, Zielpunkt) As geometry
from Layer

beim Polygon müsste das centroid verwendet werden oder PointOnSurface
Select
MakeLine(centroid(geometry), Zielpunkt) As geometry
from Layer
--------------------------
Der Zielpunkt (der Ort des Labels) wird aus einem WKT String mit der 
Funktion PointFromText erzeugt. Wobei die Koordinaten aus den Spalten xc 
und yc stammen, die für die datendefinierte und mausgesteuerte 
Platzierung des Labels angelegt worden sind.

PointFromText('POINT('||xc||' '||yc||')', 25832)
Mit Hilfe der Verkettungsoperatoren || wird der WKT-String erzeugt. Die 
Ziffer hinten ist der EPSG-Code des Koordinatensyswtems.
------------------------------------------------
Mit dem Aufruf
Select
MakeLine(geometry,
(PointFromText('POINT('||xc||' '||yc||')', 25832))
) As geometry
from
Layer

entsteht die Verbindungslinie.

--------------------------------------------------
Dort wo das Label nicht verschoben worden ist, sind keine Werte in der 
xc und xy Spalte, so dass die Spalte ausgeschlossen werden soll.

where xc is not NULL and yc is not NULL
----------------------------------------------
Gesamtaufruf für virtuellen layer:
(Layer hinzufügen > virtueller Layer)

Select
MakeLine(geometry,
(PointFromText('POINT('||xc||' '||yc||')', 25832))
) As geometry
from
Layer
where xc is not NULL and yc is not NULL

----------------------------------------
Im Geometriegenerator der Symbolsierung erreicht man das das Gleiche über:
Case
when  "xc" IS NOT NULL AND  "yc" IS NOT NULL
then
make_line($geometry,
geom_from_wkt('POINT('||xc||' '||yc||')')
)
end

Viele Grüße,

Claas


-- 
-----------------------------------------
GKG-Kassel - Dr.-Ing. Claas Leiner
QGIS-Support und mehr

Geodatenservice, Kartenwerkstatt &
GIS-Schule Kassel

Wilhelmshöher Allee 304 E
34131 Kassel
Tel. 0561/56013445
claas.leiner at gkg-kassel.de
http://www.gkg-kassel.de
----------------------------------------
Unterstützen Sie QGIS
QGIS-DE e.V. | http://qgis.de