Symbole und Klassifikationen

Die visuelle Darstellung der GIS Daten auf der Karte wird über Symbole welche in Symbolset organisiert sind gesteuert. Die Daten können dabei wie in der GIS Welt üblich über eine Klassifiaktio der vorhandenen Sachdatenattribute gesteuert werden.

Die Symbole und Klassifikationen werden in IWAN wie alle anderen Befehle über Skripte bzw. durch die Beschreibung in ASCII Dateien gesteuert. Dadurch ist für die Erstellung keine Zusatzsoftware notwendig.

Maßstabsabhängige Darstellung

Iwan bietet verschiedene Möglichkeiten Symbole in Abhängigkeit vom aktuellen Kartenmaßstab darzustellen. Dabei kann es entweder um Optimierung der Darstellungsqualität gehen, oder auch um die Performance zu optimieren.

Beispiel

Im Folgenden soll anhand eines Punktsymboles die verschiedenen Möglichkeiten demonstriert werden.

Wie eindeutig zu erkennen ist, ist die Darstellung mit einem Vektormarker ca. 2x so schnell, wie die Darstellung mit einem TrueType Marker (jeweils ein Symbollayer). Die angegebenen Zeiten beziehen sich auf die Darstellung einer ungefilterten Punktmenge aus einer Shape Datei. Dabei wurde alle ~23.000 Punkte zur Anzeige gebracht. 

 

TrueType - Marker mit 2 Layern

Zeichendauer: 1450 ms

Bereich: 1:0 ... 1:2000

 

TrueType - Marker mit 1 Layer

Zeichendauer: 1079 ms

Bereich: 1:2001 ... 1:5000

 

Vektormaker, 1 Element

Zeichendauer: 520 ms

Bereich: 1:5001 ...

Die Symbolpalette (ipalx)

Go;

   SetNewSymbolCount(20,false,false);

  

   /////////////////////////////////////////////////////////////7

   //1. Defintion des Standardsymboles

   // Diese bietet die detailierteste Darstellung

   /////////////////////////////////////////////////////////////7

   SetTrueTypeMarker(10,

                   "Webdings", //Name der Schriftart

                   10,         //Größe in Karteneinheiten

                   "None",     //Keine Hintergrundfarbe

                   "Red",110,  //Marker-Layer 1: Roter Kreis

                   "Yellow",120);//Marker-Layer 2: Weißes Kreis mit Diagonale

   /////////////////////////////////////////////////////////////7

   //Skalierung begrenzen. Symbol ist hier mit 10 Karteneinheiten

   //als Größe definiert

   //Nie kleiner als 10 Pixel, nie größer als 15 Pixel

   /////////////////////////////////////////////////////////////7

   SetMinMaxWidth(10,10,50);  

   /////////////////////////////////////////////////////////////7

   //Einfacherer Darstellung des Objektes

   /////////////////////////////////////////////////////////////7

   SetTrueTypeMarker(11,

                   "Wingdings 2",  //Name der Schriftart

                   20,         //Größe in Karteneinheiten

                   "None",     //Keine Hintergrundfarbe

                   "Red",156); //Marker-Layer 1: Roter Kreis mit "Loch"

   /////////////////////////////////////////////////////////////7

   //Wenn der Maßstab von 0-1000 ist, dann Symbol 10 verwenden.

   //Außerhalb diese Maßstabes Symbol Nr. 11 verwenden

   /////////////////////////////////////////////////////////////7

   SetSymbolRule(10,   //Diese Regel für Symbol Nr. 10 definieren

                   11, //Alternatives Symbol, falls diese Regel *nicht* zutrifft

                   0,  //Symbol 10 trifft zu, wenn MinScale >= 0

                   1000/*  bis MaxScale <= 1000 gegeben ist,

                           ansonsten verwende Symbol Nr. 11*/);

   /////////////////////////////////////////////////////////////7

   //Bis hier ist die Darstellung optisch gelungen, aber die Performance

   //lässt zu wünschen übrige. Die Datenmenge ist i.d.R. vom

   //Maßstab abhängig. Ein TrueType Marker ist immer etwas "langsamer"

   //als ein Vektor-Marker, also noch ein Symbol und eine Regel dazu definieren

   /////////////////////////////////////////////////////////////7

   BeginVectorMarker(12,

                   10, //Größe in Karteneinheiten

                   "Yellow", //Rahmenfarbe

                   "Red"); //Hintergrundfarbe

           VMBox(0,0,100,100);/*Rechteck in den log. Koordinate

                   0,0 bis 100%,100%  */

   EndVectorMarker();

   //Skalierung "aushebeln", immer mit 10px darstellen

   SetMinMaxWidth(12,10,10);  

   /////////////////////////////////////////////////////////////7

   //Wenn der Maßstab von 1000 - 5000 ist, dann Symbol 11 verwenden.

   //Außerhalb diese Maßstabs Symbol Nr. 12 verwende

   /////////////////////////////////////////////////////////////7

   SetSymbolRule(11,   //Diese Regel für Symbol Nr. 11 definieren

                   12, //Alternatives Symbol, falls diese Regel *nicht* zutrifft

                   1000,  //Symbol 10 trifft zu, wenn MinScale >= 0

                   5000/*  bis MaxScale <= 5000 gegeben ist,

                           ansonsten verwende Symbol Nr. 12*/);

End;

Ebenendefinition

Bei der Definition der Ebene ist lediglich darauf zu achten, dass hier Symbol 10 zugewiesen werden muss. Dieses wird durch die Symbolregeln abhängig vom Maßstab während des Zeichenvorgangs durch das entsprechend definierte Symbol ersetzt. In der Legende wird immer Symbol Nr. 10 dargestellt.

Symbole

Symbole

Die Darstellung der kartographischen Elemente wird durch Symbolnummern geregelt. Diese Symbolnummern beziehen sich dabei auf den Null-basierten Index aus der jeweils geladenen Symboldatei.

Übersicht

Ein Symbol kann definiert werden durch:

  • einen Stift,
  • einen Pinsel,
  • ein Punktsymbol oder
  • eine Schriftart.

Alle genannten Elemente können in einem Symbol definiert werden. Wie die Darstellung eines geographischen Objektes erfolgt, ist durch den Geometrietyp festgelegt:

  • bei flächenhaften Objekten wird der Stift für die Umrandung und der Pinsel für die Füllung des Objektes verwendet.
  • bei linienförmigen Objekten wird nur der Stift berücksichtigt.
  • bei Punkten findet das entsprechend definierte Punktsymbol seine Anwendung.
  • und alle Arten von Beschriftungen verwenden die eingestellten Schriftparameter.

Dieses Vorgehen macht Sinn, da IWAN generell die Mischung von unterschiedlichen Geometrie in einer Datenquelle unterstützt.

Dateiformate

In den ersten IWAN Versionen wurden die Symboldateien noch in einem binären Format gespeichert. Die Erstellung erfolgte über einen Symboledior. Dieser war Bestandteil unsererer Desktopanwendung IWANView. Da die Erweiterbarkeit schlecht war, wurde bald auf ein Skriptbasiertes Dateiformat gewechselt. Die Dateierweiterung für das Skriptbasierte Format ist "IPALX", für das Binäre Format "IPAL". Mit IPALX Dateien können IPAL Dateien zur Laufzeit modifiziert werden. Damit konnte ein Verlust der Kompatibilität vermieden werden.

Die IpalX Dateien werden wie IWS Dateien behandelt. Der Befehlsatz der Grundfunktionen ist dabei identisch. In IpalX existieren entsprechenden Funktionen zur Beschreibung der Eigenschaften.

IPALX-Dateien

Eine Ipalx Datei präsentiert ein Symbolset in Form einer ASCII Datei in welcher mit einfachen Skriptbefehlen die entsprechenden Symbol definiert werden. Das Attribut zur Verwendung, z.B. bei der Zuweisung an Ebenen, enthählt demzufolge den entsprechenden Dateinamen.

Geben Sie bei Symboldateiangaben einen Dateinamen ohne Extension an, so wird zuerst geprüft ob eine .ipal existiert, danach ob eine .ipalx existiert.

Als Besonderheit können einer Datei auch Argumente analog der Darstellung eins Query-Strings übergeben werden. Die Datei greift wie gewohnt mit der Schreibweise $VARIABLE auf die so übergebenen Parameter zu.

Beispiel, der Aufruf:

  ... theSymbolSet:"test.ipalx?COLOR=Red&FONT=WingDings&CHARCODE=46" ...

test.ipalx:

Go;
  SetTrueTypeMarker(0,$FONT,10,"NULL",$COLOR,$CHARCODE);
End;
Klassifikationen

Klassifikationen

Zur Klassifikation von Elementen einer Ebene kann eine Legendendatei angegeben werden. Die Legendendateien haben immer die Extension ".ILF". Dies steht für IwanLegendFile.

Bei diesen Dateien handelt es sich ebenfalls um einfache ASCII Dateien, welche z.B. mit einem einfachen Text-Editor erstellt werden können.

Die Legendendateien werden einmalig beim Laden einer Ebenen gelesen. Veränderungen wirken sich erst nach dem Neuladen der Ebene aus.
Es gibt zwei Typen von Klassifikationen:

  • Eindeutiger Wert,
  • Bereich ("von bis")

Bei beiden Typen muss in der ersten Zeile der Legendetyp in Großschreibung angegeben werden.
Der nächste Wert ist jeweils der Name des Bezugsfeld in der Ebene.
Die Legendendatei wird durch die theSymbolFile bei der Ebenendefinition angegeben. Auch eine Inline-Definition ist möglich, weiteres dazu am Ende dieser Seite.

Zusätzliche Steuerparameter

Ab Version 3.2.0 können in der ersten Zeile weitere Schlüsselwörter eingefügt werden:

{FORCEORDER|NOORDER}
Legt fest, ob bei der Ausgabe der Legende die Reihenfolge wie beim Einlesen erhalten bleibt (FORCEORDER), oder ob die Ausgabe alphanumerisch sortiert erfolgen soll. (nur für UNIQUE) 

{FORCECOUNTING|NOCOUNTING}
ForceCounting legt fest, dass nur für die Einheiten, welche auch mind. eine Geometrie enthalten, die Ausgabe in der Legende erfolgen soll. Zudem wird in der Legende die Anzahl der Elemente je Eintrag mit ausgegeben. Diese Option wirkt nur auf ShapeLayer.
NoCounting ist die Standardeinstellung. Dabei werden immer alle Einträge der Legendendatei in der von IWAN automatisch generierten Legende angezeigt.

Ab Version 3.3.1 steht zusätzlich:
SYMBOLRULE{minScale,maxScale,alternateSmbIndex} zur Verfügung.
Diese Angabe legt fest, das für einen bestimmten Maßstabsbereich nur ein einfaches Symbol zum Einsatz kommt.

Ab der Iwan Version 3.4.x ist die Verwendung von ILF Dateien im Zusammenhang mit mehr als einem Symbol möglich. Dabei werden verschiedene neue Optionen in der Kopfzeile definiert.

Die Schreibweise scheint auf den ersten Blick berechtigter Weise nicht sehr komfortabel, aber die damit gewährleistete Abwärtskompatibilität ist uns in der Entwicklung sehr wichtig.

Die Verwendung der gebotenen Möglichkeit umgeht ein bekanntes Darstellungsproblem von geschichteten Symbolen, dazu finden Sie [hier] weitere Details.

Neu sind dabei die Schlüsselwörter:

SYMBOLLAYERCOUNT:n

Dieser Parameter ist im Fall des Einsatzes von mehreren Symbolebenen nicht optional und gibt die Anzahl der Layer vor. Jeder folgende Klassifikationseintrag in dieser ILF Datei muss genau über die durch nfestgelegte Anzahl von Symbolen verfügen. Die Symbolnummern werden dabei durch ein | - Zeichen getrennt, siehe Beispiel.

... und ...

LAYERRULES{index,showInLegend,minScale,maxScale;...}

Dieser Parameter ist optional. Die Argumente stellen ein Viererpaar von kommagetrennten Werten pro Symbollayer dar, die zu beschreibenden Layer werden durch ein Semikolon getrennt.

  • index - der Null basierte Index des Symbollayers für welche die folgenden Werte zutreffen
  • showInLegend - ein Boolscher Wert (true/false) welcher angibt das dieser Symbollayer in der Legende mit aufgenommen werden soll. Die Legendensymbole für diesen Layer werden je Klassifikationseintrag in der angegebenen Reihenfolge übereinander dargestellt, wenn an dieser Stelle keine Ausnahme (durch Angabe von false) definiert wird
  • minScale - die unterer Maßstabsgrenze ...
  • maxScale - und die obere Maßstabsgrenze in der dieser Symbollayer dargestellt werden soll. Die Werte -1 definieren "unendlich" groß bzw. klein.

Die Angabe kann für jeden Layer optional erfolgen. Standardwerte sind: - immmer in Legende anzeigen,
- keine Maßstabsbegrenzung.

Als Beispiel folgende Anweisung (type ist entsprechend der untenstehenden Definition zu ersetzten):

type SYMBOLLAYERCOUNT:2 LAYERRULES{0,TRUE,-1,-1;1,TRUE,-1,100000}
OBJART
3201 120|121 Schienenbahn
3205 120|121 Bahnstrecke
...

Für den Platzhalter Type ist entsprechend den Ausführungen unten IWAN_LEGEND_UNIQUE oder IWAN_LEGEND_RANGE einzusetzten.

Dabei wird festgelegt, dass der später zugewiesene Layer zwei Zeichendurchgänge erfährt. Die Schienenbahn/Bahnstrecke wird im Maßstabsbereich von >100000 nur mit Symbol Nummer 120 dargestellt, darunter wird diese Ebene einmal vollständig mit Symbol Nr. 120 und danach mit Symbol Nr. 121 gezeichnet. Das Legendensymbol wird für jede Zeile als Überlagerung beider Symbole dargestellt.

 

Ab Version 4.0.3 ist das Schlüsselwort ALLOWQUERYOPTIMIZE verfügbar.

Wenn SYMBOLLAYERCOUNT definiert wurde, kann je nach Datenquelle eine Optimierung bei dem Zeichenvorgang erfolgen.

Umgesetzt z.Z. bei dem Ebenentyp Oracle SDO.

Bei Zeichenvorgängen wird das generierte SQL Statement um " ... BEZUGSSPALTE IN (Alle,In,Frage,Kommenden,Werte,Bei,DiesemMaßstab)" erweitert.

Sie sollten einen Index auf die Bezugsspalte vorsehen.

Ab Version 4.1.4.201

ENABLESTRINGESCAPE ermöglicht das Niederschreiben der Werte mit Escape-Zeichen um Sonderzeichen zu maskieren. Ausgewertet werden Maskierungen für TAB, LF, CR und dem Backslash.

WARNINGSASERROR behandelt Warnungen als Fehler. Konkret ist dies dann gegeben, wenn nicht alle Zeilen korrekte Werte enhalten. Bisher wurde nur eine Warnung im Tracefile ausgegeben.

Eindeutiger Wert

Ab der dritten Zeile folgen die Einträge in der Form:

FELDWERT{TAB}SYMBOLNUMMER{TAB}BESCHRIFTUNG{CRLF}

IWAN_LEGEND_UNIQUE
OBJART
3501	51	Bahnhofsanlage
3502	50	Raststätte
3514	52	Brücke/Überführung/Unterführung

Ab der Version 4.0.2.186 kann als Wert auch $NULL angegeben werden. In diesem Fall werden Datenbank NULL Werte entsprechend zugewiesen. Die Angabe eines leeren Wertes führt zur Konvertierung in den Zieldatentypen. (z.B. wird "" als Ganzahl 0 interpretiert)

Bereichsklassifizierung

Diese Art der Klassifizierung ist nur für Numerische Datentypen möglich.
Es muss eine Angabe des Datentyp erfolgen. IWAN unterscheiden zwischen Fließkommazahlen und Ganzzahlen.
Für Ganzzahlige Argumente ist das Schlüsselwort LONG, für Fließkommazahlen das Wort FLOAT zu verwenden.
Die Werte werden in folgender Form geprüft: VAL>=LOWER AND VAL<=HIGHER, wie zu erkennen ist, sollte die Liste entsprechend Sortiert vorliegen.
Die Angabe vierten Zeile folgen die Einträge in der Form:
LOWER{TAB}HIGHER{TAB}SYMBOL{TAB}BESCHRIFTUNG{CRLF}

IWAN_LEGEND_RANGE
GUETE
LONG
1	10	1	gering
10	100	2	mittel
100	900	3	hoch
Allgemeine Hinweise

In der letzten Zeile muss ebenfalls ein Zeilenumbruch erfolgen.

Kommentare werden durch ein vorangestelltes /* Zeichen pro Zeile eingeleitet. Es ist zu beachten, dass Kommentare nur im Datenteil ausgewertet werden.

Ab Version 3.2.5 kann der Pseudowert $ALLOTHER verwendet werden. Dabei werden alle anderen Werte mit diesem Symbol dargestellt.

Die Syntax dafür lautet:

$ALLOTHER{TAB}SYMBOL{TAB}BESCHRIFTUNG{CRLF}
Inline-Definition

Ab der Iwan Version 3.3.3.450 ist die Angabe von Inlinedefinitionen möglich. Dabei muss keine separate Datei mehr erstellt werden, die Angabe des Inhaltes kann direkt in der .iws Datei mit erfolgen. Dazu muss als erstes Wort "INLINE:" angegeben werden. Danach kommt, in der gleichen Zeile, der Inhalt der Datei. Diese Schreibweise ist an Stelle des Dateinamen zu verwenden.

Hinweise zur Kartenqualität

Hinweise zur Kartenqualität

Die Darstellung einer Karte ist ein sehr komplexer Vorgang. Iwan ermöglicht eine große Auswahl an Optionen zur Beeinflussung der Qualität und/oder Geschwindigkeit. Dabei können alle Varianten beliebig kombiniert werden, um somit einen vernüftigen Kompromiss zwischen Darstellungsqualität und Performance über einen breiten Maßstabsbereich zu erreichen.

Das Problem liegt oft in dem angesprochenen großen Maßstabsbereich, der durch interaktive Anwendungen abgedeckt werden muss.

Im Gegensatz dazu stellt eine "gedruckte" Karte weniger Anforderungen an den Bearbeiter, da die Ausgabegröße und damit der Karteninhalt im Voraus festgelegt sind. Auf dieser Seite werden einige der üblichen Probleme angesprochen.

Antialias

Dieses Verfahren verringert die "Treppenstufen" bei Liniendarstellungen. Dabei werden Pixel mit einem Alpha- (Transparenz) Wert zur eigentlichen Linie hinzugefügt. Natürlich ist diese Verbesserung nicht ohne "Kosten". Der Aufwand für die Bildberechnung kann je nach Linienstärke bis um den Faktor 7 größer sein.

Iwan verwendet die Antigrain Bibliothek für Darstellungen dieser Art. Diese arbeitet mit einem Subpixel-Antialiasing Verfahren und erzielt damit besondes gute Ergebnisse bei der Ausgabequalität.

Das folgende Beispiel stammt aus dem Themenstadtplan von Dresden und soll den Effekt verdeutlichen:


Mit Antialias Ohne Antialias

mit Anti-Alias

ohne Anti-Alias

In der detailierten Darstellung ist der Effekt recht gut zu erkennen:

Mit Antialias Ohne Antialias

mit anti-Alias

ohne anti-Alias

Der Laie nimmt diese Verbesserungen oft nur im direkten Vergleich war.

Mehrschichtige Liniensymbole

Zur Abbildung von Linienelementen, die aus kombinierten Symbolen bestehen, stehen zwei grundsätzliche Möglichkeiten zur Verfügung.

Zum einen die objektweise Schichtung der Geometrieabschnitte, zum anderen die ebenenweise Überlagerung. Für Ersteres steht der Befehl MakeSymbolGroup zur Verfügung. Die zweite Variante kann in einer Legendendatei (ILF) definiert werden.

Die meisten Systeme untersützen nur die objektweise Symbolüberlagerung. Dabei wird jeder einzelne Linienabschnitt durch mehrfaches Zeichnen mit verschiedenen Symbolen auf der Karte dargestellt.

In Iwan steht dafür die Symboleigenschaft MakeSymbolGroup zur Verfügung. Dabei wird für jedes Symbol definiert, wieviele weitere Darstellungsebenen für ein Geometrieobjekt existieren.

Am Beispiel einer Straße soll dies verdeutlicht werden. Die Darstellungsübergänge der einzelnen Segmente sind dabei durch unschöne Brüche sichtbar.

Komplexe Linien

Komplexe Linien

Sonstige Symbole

 

Eisenbahn - Hauptgleis (Kyrillisch)
Hauptgleis 1: 400
1:200

//Hauptgleis

SetLinePropEx(11,color_401,0,0,"PS_NULL","none");

BeginPattern(11,"#010101","80px","21px",700);

SetPatternTargetPen();

SetPatternMode("COLOR","#010101");

SetTargetDrawUnit("UNIT_PIXEL");

SetPatternExtents(24,6,240,63);

//Strich 1

line(25,20,0,20,21);

box(26,20,0,21,21);

//Strich 2

line(25,60,0,60,21);

box(26,60,0,61,21);

//BasisLinie 1

line(25,0,13,80,13);

box(26,0,13,80,14);

//BasisLinie 2

line(25,0,6,80,6);

box(26,0,6,80,7);

//Füllung

box(26,0,7,20,13);

box(26,60,7,80,13);

//Text

Text(29,40,7,6,"Ãë");

EndPattern();

Darstellung Grenzlinie
Grenze 1:8000
1:8000
SetLinePropEx(14,"Magenta","0","0",
		"PS_SOLID","NONE",
		"PS_ENDCAP_ROUND","PS_JOIN_ROUND");
SetMinMaxWidth(14,2,2);
BeginPattern(14,"#FFFFFE","10px","10px",25000);
	SetPatternTargetPen();
	SetPatternMode("COLOR","#FFFFFE");
	SetPatternExtents(20,20,80,80);
	SetTargetDrawUnit("UNIT_PIXEL");
	SetPatternAlphaValues(20,30);
	box(15,0,5,10,0);
EndPattern();
SetBrushPropEx(15,"TRUE","Magenta","NONE","NULL");
SetAntialias(14,true);
		
Die folgenden Symbole sind Auszüge aus der Planzeichenverordnung der Bauleitplanung
Flächen für Abgrabungen
Abgrabung 1:5000
1:500
Abgrabung 1:10000
1:10000
SetLinePropEx(45,"BLACK",0,0,"PS_SOLID","NONE");
BeginPattern(45,"BLUE","10px","20px",10000);
	SetPatternTargetPen();
	SetPatternMode("COLOR","BLUE");
	SetPatternExtents(5,10,40,80);
	SetTargetDrawUnit("UNIT_PIXEL");
	polygon(46,"0|10|5|20|10|10");
EndPattern();
SetBrushPropEx(46,true,"BLACK","none","null");
		
Hauptversorgungs- und Hauptabwasserleitungen
Abwasser 1:500
1:500
Abwasser 1:5000
1:10000
SetLinePropEx(30,"BLACK",0,0,"PS_NULL","NONE");
BeginPattern(30,"GREEN","120px","24px",500);
	SetPatternTargetPen();
	SetPatternMode("COLOR","GREEN");
	SetPatternExtents(30,6,120,24);
	SetTargetDrawUnit("UNIT_PIXEL");
	line(32,0,12,120,12);
	circle(31,60,12,10);
EndPattern();
SetBrushPropEx(31,true,"BLACK","none","null");
SetLinePropEx(31,"BLACK",0.5,500,"PS_SOLID","NONE");
SetMinMaxWidth(31,1,3);
SetLinePropEx(32,"BLACK",0.5,500,"PS_SOLID","NONE");
SetMinMaxWidth(32,2,3);
Seilbahnen
Seilbahn 1:500
1:500
Seilbahn 1:5000
1:5000
SetLinePropEx(25,"BLACK",0,0,"PS_NULL","NONE");
BeginPattern(25,"BLUE","120px","24px",500);
	SetPatternTargetPen();
	SetPatternMode("COLOR","BLUE");
	SetPatternExtents(30,6,120,24);
	SetTargetDrawUnit("UNIT_PIXEL");
	line(26,0,12,50,12);
	line(26,70,12,120,12);
	circle(26,60,12,10);
EndPattern();
SetLinePropEx(26,"#A580AC",0.5,500,"PS_SOLID","NONE");
SetMinMaxWidth(26,1,3);
Straßenbahnen
Straßenbahn 1:500
1:500
Straßenbahn  1:5000
1:5000
SetLinePropEx(20,"#A580AC",0.2,0,"PS_NULL","NONE");
BeginPattern(20,"BLUE","100px","80px",100);
	SetPatternTargetPen();
	SetPatternMode("COLOR","BLUE");
	SetPatternExtents(13,10,40,32);
	SetTargetDrawUnit("UNIT_PIXEL");
	line(21,0,40,100,40);
	line(21,40,40,40,80);
	line(21,60,40,60,80);
EndPattern();
SetLinePropEx(21,"#A580AC",0.5,100,"PS_SOLID","NONE");
SetMinMaxWidth(21,2,4);
Baugrenzen
Baugrenze  1:5000
1:5000
Baugrenze 1:20000
1:20000
SetLinePropEx(15,"BLACK",1,2500,"PS_NULL","NONE");
BeginPattern(15,"BLUE","40px","40px",10000);
	SetPatternTargetPen();
	SetPatternPenDO("PATTERN");
	SetPatternMode("COLOR","BLUE");
	SetPatternExtents(8,8,128,128);
	SetTargetDrawUnit("UNIT_PIXEL");
	Box(16,0,20,40,0);
	Line (17,0,20,30,20);
	Line (17,35,20,36,20);
EndPattern();
SetBrushPropEx(16,true,"#57BBCA","none","null");
SetLinePropEx(17,"BLACK",3,2500,"PS_SOLID","NONE");
SetMinMaxWidth(17,2,8);
Hochwasserrückhaltebecken
Hochwasserrückhalt  1:2500
1:2500
Hochwasserrückhalt 1:10000
1:10000
SetLinePropEx(70,"BLACK",0,0,"PS_NULL","NONE");
BeginPattern(70,"BLUE","60px","50px",5000);
	SetPatternTargetPen();
	SetPatternMode("COLOR","BLUE");
	SetPatternExtents(18,15,120,100);
	SetTargetDrawUnit("UNIT_PIXEL");
	box(71,0,25,60,41);
	circle(71,15,28,20);
	circle(73,45,53,20);
	box(73,0,25,60,"-10");
	arc(72,15,27,20,220,100);
	arc(72,45,53,20,40,100);
	line(72,0,25,60,25);
EndPattern();
SetBrushPropEx(71,true,"#38A1BF","none","null");
SetLinePropEx(72,"BLACK",1,200,"PS_SOLID","NONE");
SetMinMaxWidth(72,2,2);
SetBrushPropEx(73,true,"BLUE","none","null");
Umgrenzung von Flächen für Maßnahmen zum Schutz, zur Pflege und zur Entwicklung von Natur und Landschaft
Umgrenzungen  1:500
1:500
Umgrenzungen 1:2500
1:2500
SetLinePropEx(50,"BLACK",0,0,"PS_NULL","NONE");
BeginPattern(50,"BLUE","40px","40px",1000);
	SetPatternTargetPen();
	SetPatternMode("COLOR","BLUE");
	SetPatternExtents(10,10,80,80);
	SetTargetDrawUnit("UNIT_PIXEL");
	box(51,0,20,40,38);
	line(52,0,20,40,20);
	line(52,10,38,30,38);
	line(52,20,20,20,38);
EndPattern();
SetBrushPropEx(51,true,"#67AD54","none","null");
SetLinePropEx(52,"BLACK",1,1000,"PS_SOLID","NONE");
SetMinMaxWidth(52,1,3);
Umgrenzung von Flächen zum Anpflanzen von Bäumen, Sträuchern und sonstigen Bepflanzungen
Umgrenzungen  1:2500
1:2500
Umgrenzungen 1:1000
1:1000
SetLinePropEx(55,"BLACK",0,0,"PS_NULL","NONE");
BeginPattern(55,"BLUE","30px","50px",10000);
	SetPatternTargetPen();
	SetPatternMode("COLOR","BLUE");
	SetPatternExtents(7,12,30,50);
	SetTargetDrawUnit("UNIT_PIXEL");
	line(56,0,25,30,25);
	circle(56,16,37,8);
EndPattern();
SetLinePropEx(56,"BLACK",1,1000,"PS_SOLID","NONE");
SetMinMaxWidth(56,2,3);
Umgrenzung von Erhaltungsbereichen, wenn im Bebauungsplan bezeichnet (§ 172 Abs. 1 BauGB)
Umgrenzungen  1:2500
1:2500
Umgrenzungen 1:1000
1:1000
SetLinePropEx(65,"BLACK",0,0,"PS_NULL","NONE");
BeginPattern(65,"#FFFFFE","40px","40px",5000);
	SetPatternTargetPen();
	SetPatternMode("COLOR","#FFFFFE");
	SetPatternExtents(10,10,80,80);
	SetTargetDrawUnit("UNIT_PIXEL");
	box(66,0,20,40,38);
	line(67,0,20,40,20);
	line(67,20,20,20,38);
	line(67,0,38,40,38);
EndPattern();
SetBrushPropEx(66,true,"#D58B4A","none","null");
SetLinePropEx(67,"BLACK",1,200,"PS_SOLID","NONE");
SetMinMaxWidth(67,1,2);
Punktsymbole

Punktsymbole

Darstellung Abfalltonnen

1:2500

Go;

    SetNewSymbolCount(35,false,false);

 

 

    //Variablen

    def_tonne_size=20;

    def_tonne_trueType="dd_stadtplan_muell";

   

    def_tonne_color_gelb="#F1ED03";

    def_tonne_color_braun="RGB(137,88,32)";

    def_tonne_color_rest="#363636";

   

    def_tonne_bg_idx=49;

    def_tonne_fill_idx=48;

    def_tonne_left_idx=51;

    def_tonne_right_idx=50;

 

    SetTrueTypeMarker(17,

                    def_tonne_trueType,

                    def_tonne_size,

                    "NONE",

                    def_tonne_color_rest,

                    def_tonne_bg_idx,

                    def_tonne_color_gelb,

                    def_tonne_right_idx,

                    def_tonne_color_braun,

                    def_tonne_left_idx);

End;