Allgemeines

Attributblöcke sind neben Einzeltexten eine Möglichkeit, Objekte aus einer GISX2-Datenquelle mit Beschriftungen zu versehen. Dazu wird ein Symbol erzeugt, dass mehrere Texte mit entweder statischen und/oder dynamischen Inhalten besitzt.

GISX3 unterstützt derzeit das bereits von GISX2 Worldview bekannte XML-Format für Attributblöcke. Damit können diese entweder in einem XML-Editor geschrieben oder bestehende, im CAD entworfene Attributblöcke mittels den Konverters "DWG2XML" in XML-Dateien überführt werden. (Details zu "DWG2XML" erfragen Sie ggf. bei GEOGRAT. Dieses Programm wird derzeit nicht mit GISX3 ausgeliefert.)

Um einem Objekt einen Attributblock zuzuweisen, muss dieser - wie in GISX 2.x üblich - in der Spalte C30 der C-Tabelle zum jeweiligen Element namentlich eingetragen sein (ohne die Endung .xml). Das entspechende Symbol (also  die .xml-Datei) muss im Ordner <GISX3HOME>\symbols abgelegt sein. Attributblöcke besitzen üblicherweise das Benennungsschema <Tabelle>_<Nr>.xml, also bspw. "e0101_01.xml", um sie leichter von anderen XML-Symbolen zu unterscheiden, dies ist jedoch nicht zwingend.

Aufbau einer XML-Datei für einen Attributblock

Icon

Das aus GISX 2.x bekannte XML-Format wird derzeit unterstützt, dies ist aber nur als Übergangslösung geplant, um die Migration von GISX 2.x zu erleichtern. Aus diesem Grund wird hier auch nicht das komplette XML-Format erläutert, sondern nur die speziell für Attributblöcke relevanten Teile.

Bis auf Weiteres zeichnet GISX 3 ausschließlich statische und dynamische Objekte aus Attributblöcken. Zeichnungselemente (Linien, Schraffuren etc.) werden ignoriert. Dies gilt selbstverständlich nicht für die in Icon-Stilen referenzierten Symbole, die das grundsätzlich gleiche XML-Format verwenden, aber wiederum keine dynamischen Texte unterstützen.

Die Grundstruktur einer XML-Definition für einen Attributblock ist im Folgenden Codeblock zu sehen. Nach den XML-Header-Informationen folgt ein Tag <symbollibary>, in dem genau ein Symbol mit dem unter "name" angegebenen Symbolnamen befindet. Dieser Symbolname sollte mit dem Namen der XML-Datein übereinstimmen, relevant ist aber der hier angegebene Symbolname! Es folgen ein oder mehrere Definitionen dynamischer (Tag <attdef>) und/oder statischer (Tag <text>) Texte. Dynamische Texte (Attribute) erhalten Ihren Inhalt zur Laufzeit aus der darin referenzierten Spalte des Objekts, für das sie gezeichnet werden. Damit lässt sich bspw. die Breite einer Haltung beschriften. Statische Texte hingegen haben einen festen Textinhalt, wie er oft für Einheiten verwendet wird. Ein Attributblock kann aus beliebig vielen dynamischen und/oder statischen Texten bestehen. Diese sollten sich sinnvollerweise natürlich nicht räumlich überlappen.

Allgemeiner Aufbau
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE symbollibary SYSTEM "geograt.dtd">
<symbollibary>
    <symbol name="SYMBOLNAME">
        <attdef ... >
            ... Definition eines dynamischen Attributs ...
        </attdef>
        <text ...>
            ... Definition eines statischen Texts ...
        </text>
		... weitere dynamische oder statische Texte ...
    </symbol>
</symbollibary> 

Im Folgenden ein konkretes, kommentiertes Beispiel mit einem dynamischen und einem statischen Text.

Auszug aus dem Symbol "E0102_04.xml"
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE symbollibary SYSTEM "geograt.dtd">
<symbollibary>
    <symbol name="E0102_04">
        <text farbnummer="0"                <!-- Statischer Text. CAD-Farbnummer: 0=schwarz, 1=rot usw. -->
			drehwinkel="0.000"              <!-- Drehwinkel des Texts. Üblicherweise 0, da der Block i.d.R. als Ganzes gedreht wird. -->
			neigungswinkel="0.000"          <!-- Textneigung. Standardwert 0 -->
            x_skalierfaktor="1.00"          <!-- Horizontale Textskalierung. Standardwert 1 -->
			fontname="ISO8"                 <!-- Textfont. Das sollte einer der auf dem Server installierten Fonts sein, z.B. Arial, Courier New -->)
			h_just="LEFT" v_just="BASE">    <!-- Horizontale und vertikale Ausrichtung, siehe unten -->
            <startpunkt>                    <!-- Einfügepunkt des Texts relative zum Einfügepunkt des ganzen Blocks. Angabe in m -->
                <x>-1.534</x>
                <y>1.282</y>
            </startpunkt>
            <texthoehe>1.00</texthoehe>     <!-- Texthöhe in m -->
            <textstring>/</textstring>      <!-- Inhalt des statischen Texts. Hier: "/" -->
        </text>
        <attdef                             <!-- Dynamischer Text, aus zugehörigem Objekt ermittelt -->
				farbnummer="0" drehwinkel="0.000" neigungswinkel="0.000" x_skalierfaktor="1.00" fontname="ISO8" h_just="RIGHT" v_just="BASE">
            <startpunkt>
                <x>-5.185</x>
                <y>1.282</y>
            </startpunkt>
            <texthoehe>1.00</texthoehe>
            <vorgabewert></vorgabewert>    <!-- Defaultwert für Textinhalt, wenn Attribut des Objekts leer ist -->
            <anfrageprompt>PROFILART (EI,MAUL)</anfrageprompt>    <!-- Beschreibung des Attributs -->
            <bezeichner>E0102.C06_%S</bezeichner>                 <!-- Angabe des auszugebenden Attributs (Spalte) und Formats -->
        </attdef>
		<!-- ... weitere Attribute ... -->
    </symbol>
</symbollibary> 

Ausrichtung

Für die horizontale Ausrichtung sind die Werte LEFT (linksbündig), CENTER (zentriert) und RIGHT (rechtsbündig) gültig.

Für die vertikale Ausrichtung können folgende Werde verwendet werden:

  • TOP (Einfügepunkt an Oberkante von Buchstabe "H")
  • CENTER/MIDDLE (Einfügepunkt in der Mitte von Buchstabe "H")
  • BASE (Einfügepunkt an Unterkante von Buchstabe "H", also auf der Grundlinie)
  • BOTTOM (Einfügepunkt an Unterkante der Textzeile, also an Unterkante von Buchstaben wie "p" oder "g")

Textinhalt

Die Beschreibung des Attributs im Tag <anfrageprompt> wird für die Darstellung selbst nicht ausgewertet. Sie dient rein zur Dokumentation.

Das Tag <bezeichner> hingegen wird ausgewertet. Er muss das Format
<Tabelle>.<Spalte>_<Format>

besitzen. Dabei referenzieren Tabelle und Spalte die Datenbankspalte, aus der der Wert ermittelt werden soll. Das Format ist im Folgenden beschrieben.

Unterstützte Formatierungen

Die Angabe der Formatierungen erfolgt in der aus dem Befehl "sprintf" der Programmierspache C bekannten Art. Im Folgenden sind übliche, unterstützte Formate angegeben

Textformatierung

  • %S (oder %s) - Gibt den Text unverändert aus
  • %.8S - Kürzt den Text auf maximal 8 Zeichen (von links beginnend) ein.
  • %16.20S - Gibt den Text auf 16 Zeichen (durch Voranstellen von Leerzeichen) aufgefüllt zurück, aber maximal mit einer Länge von 20 Zeichen. (Weitere werden abgeschnitten.)

Zahlenformatierung

  • %0.0F, %0.1F, %0.2F, %0.3F - Formatiert die Zahl mit 0, 1, 2, 3 usw. Nachkommastellen.
  • %.0F oder %.0f - Alternative Schreibweisen des eben genannten
  • %3.2F - Hat ebenfalls die gleiche Auswirkung wie %0.2F, rundet also auf 2 Nachkommastellen (Zahlen werden nie "aufgefüllt".)
  • %.1f‰ - Formatiert die Zahl mit einer Nachkommastelle und hängt das Promillezeichen an
  • %.1F%% - Formatiert die Zahl mit einer Nachkommastelle und hängt das Prozentzeichen an. (Beachten Sie das doppelte % am Ende!)

Grundsätzlich kann eine Formatierung auch beliebigen Text beinhalten, also z.B. "Höhe %0.2F m N.N.", dieser wird jedoch immer in Kleinbuchstaben konvertiert. Hier empfiehlt sich die Verwendung von statischen Texten für die Angabe von Einheiten etc.

Hinweis: Die Groß- und Kleinschreibung der Formatangabe ist in GISX 3 nicht relevant.

Icon

Es werden derzeit nicht alle Formate unterstützt, die "sprintf" anbietet. Die oben angegebenen Formatierungen wurden getestet, einige weitere dürften auch funktionieren, können aber nicht garantiert werden. Sollten Sie die Notwendigkeit einer Formatierung besitzen, die derzeit nicht unterstützt wird, wenden Sie sich bitte mit einem Verbesserungsvorschlag an GEOGRAT.

Icon
Im Gegensatz zu GISX 2.x unterstützt GISX keine SQL-Funktionen in Formatangaben. Ein Grund dafür ist, dass die Attributblöcke in GISX3 zukünftig auch für Datenquellen verwendet werden sollen, die nicht auf einer Oracle-Datenbank basieren und diese SQL-Funktionen möglicherweise nicht unterstützen.