[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