Diskussion:HowTo-Liste
Darstellung der Straßennamen im extra layer
Wir hatten das Problem der Abfrage in data für den layer Straßennamen, wenn die Namen und die Geometrie aus den Tabellen alkobj_t_pkt und alkobj_t_line herausgenommen werden sollen. Hilfe erhielten wir von Markus und Herrn Korduan, wobei wir hier die Information von Herrn Korduan mal an Allle weitergeben möchten. Herr Korduan hat ein SQL-Statement geschrieben, welches ermöglicht, in einen Layer die Straßennamen aus zwei unterschiedlichen Geometrietabellen (Punkt und Linie) darzustellen.
Prinzipiell kann MapServer in einem Layer nur eine Art von Geometrie anzeigen. Aber Dank PostGIS können wir da was machen. Hier ein Statement, mit dem aus der Punktgeometrie eine Liniengeometrie gemacht wird. Das Statement haben wir in Data zu unserem layer Straßenname geschrieben. Es entstehen Linien der Länge 10m mit der Richtung von winkel.
the_geom FROM (SELECT t.objnr AS oid,t.label AS label,t.winkel AS winkel,t.objart AS objart,t.folie AS alkfolie,MakeLine(t.the_geom,SetSRID(MakePoint(X(t.the_geom)+(cos(t.winkel*PI()/180)*10),Y(t.the_geom)+(sin(t.winkel*PI()/180)*10)),2398))AS the_geom FROM alkobj_t_pkt AS t WHERE t.objart >= 5100 and t.objart <= 5299 AND t.folie = '022' UNION SELECT l.objnr AS oid,||l.label AS label,'0' AS winkel,l.objart AS objart,l.folie AS alkfolie,l.the_geom AS the_geom FROM alkobj_t_lin AS l WHERE l.objart >= 5100 and l.objart <= 5299 AND l.folie = '022') as foo using unique oid using srid=2398
Wobei man das ganze Where auch weglassen kann und in class packen kann. Je nach dem ob man die Beschriftung der Gebäude und Strassen in einem Layer anzeigen will oder verschiedenen. Das Weglassen der Where Klausel kann aber den Bildaufbau wesentlich verzögern, weil die Abfrage länger dauert.
Zum Ausrichten der Texte muss man nun nicht mehr lableangleitem = winkel verwenden, sondern in der Tabelle labels: angle=AUTO und autoangle=1 einstellen. Das bewirkt die Ausrichtung des Textes an der Linie. Der Layer muss dann auch vom Type Line sein also in tabelle Layer Datentype=1. Passen Sie auch den Style des Layers neu an.
Die Class Expression für den layer Straßenname lautet: ('[objart]' >= '5100' AND '[objart]' <= '5299' AND '[alkfolie]' eq '022')
Bei uns funktioniert das jetzt wunderbar.
Viele Grüße aus Parchim