Konstruktion von Diagrammen mit dem UMN MapServer 5.0
Dieses Dokument erläutert die dynamische Konstruktion von Kreissektoren- und Balkendiagrammen im UMN MapServer 5.0.
Diese Anleitung setzt Grundkenntnisse in UMN MapServer-Anwendungen und dem Erstellen einer Map-Datei voraus.
Einleitung
Seit der Version 5.0 existiert mit dem neuen Layertyp CHART eine komfortable Möglichkeit automatisch Kreissektoren- oder Balkendiagramme auf der Basis von Sachdaten zu erzeugen. Dieser Layertyp ist auf punkt-, linien- und flächenhaften Daten anwendbar. I.d.R. werden Balken- und Kreissektorendiagramme in der thematischen Kartographie nur auf Punkt- und Flächenobjekten angewandt. Es lassen sich nun recht einfach thematische Karten vom Typ Standortdiagrammkarte und Flächendiagrammkarte erzeugen. Bei linienhaften Objekten können quantitative Attributwerte über verschiedene Linienbreiten dargestellt werden. Dies ergibt eine Liniendiagrammkarte. Zur Erstellung der Diagramme werden Vektordaten mit dazugehörigen Sachdaten in einer Attributtabelle verwendet.
Unterstützte Bibliotheken
Der Layertyp CHART wird im UMN MapServer von der GD- und der AGG-Bibliothek unterstützt. Die Ausgabe mittels AGG bietet jedoch eine qualitativ bessere Darstellung, besonders bei Kreisdiagrammen aufgrund des generellen Antialiasing. Eine Ausgabe der Diagramme in anderen Formaten, wie PDF, SWF oder SVG, die mit anderen Bibliotheken erstellt werden, ist nicht möglich.
Bild
Kreissektorendiagramme
Diagramme werden in einem gesonderten LAYER vom Typ CHART erzeugt. Der Diagramtyp und die Diagrammgröße werden über PROCESSING-Parameter bestimmt. Für jeden Kreissektor im Diagramm wird ein CLASS-Block angelegt. Im dazugehörigen STYLE-Block wird dann mit SIZE [Attributname] auf den jeweiligen Wert in der Attributtabelle verwiesen. Mit diesem Wert wird dynamisch die Größe (der Winkel) des entsprechenden Kreissektors erzeugt.
Folgende Übersicht erläutert den Aufbau näher:
LAYER TYPE CHART PROCESSING "CHART_TYPE=PIE" # Diagrammtyp, voreingestellt ist PIE für Kreissektorendiagramme PROCESSING "CHART_SIZE=30" # Größe (Durchmesser) der Diagramme in Pixel … CLASS NAME "Text" # Erläuterung bzw. Name des Kreissektors, der in der Legende erscheint STYLE SIZE [Attributname] # gibt an, aus welcher Spalte der Attributtabelle die Sachdaten zur Erzeugung der Sektorengrößen benutzt werden sollen COLOR r g b # Farbe, mit der der Kreissektor gefüllt wird OUTLINECOLOR r g b # wenn angegeben, wird eine Umrandungslinie um den Kreissektor gezeichnet WIDTH w # Breite der Umrandungslinie in Pixel, wenn OUTLINECOLOR spezifiziert wurde OFFSET a b # ’a’ gibt die Anzahl der Pixel an, um die der Kreissektor nach außen verschoben werden soll, bei ’b’ muss auch ein Wert angegeben werden, der aber ignoriert wird END END CLASS … END … END
Im STYLE-Block kann bei SIZE auch ein fester Wert angegeben werden. Mindestens zwei CLASS-Blöcke sind erforderlich, um die Diagramme zu erzeugen.
Beispiel eines LAYERs mit Kreissektorendiagrammen:
LAYER NAME unternehmen TYPE CHART DATA pbezirke STATUS ON PROCESSING "CHART_TYPE=pie" PROCESSING "CHART_SIZE=39" CLASS NAME "übrige Dienstleistungen" STYLE SIZE [L_M_N] OUTLINECOLOR 0 0 0 COLOR 56 168 0 END END CLASS NAME "Dienstleistungen für Unternehmen" STYLE SIZE [J_K_O] COLOR 230 230 0 OUTLINECOLOR 0 0 0 END END CLASS NAME "Handel, Gastgewerbe, Verkehr, ..." STYLE SIZE [G_H_I] COLOR 0 112 255 OUTLINECOLOR 0 0 0 END END CLASS NAME "Produzierendes Gewerbe" STYLE SIZE [D_E_F] COLOR 255 0 0 OUTLINECOLOR 0 0 0 END END END
In diesem LAYER wird die Anzahl der Betriebe in den Stadtbezirken Berlins aufgeteilt auf die verschiedenen Wirtschaftsbereiche dargestellt. Die Angaben bei SIZE verweisen jeweils auf eine Spalte in der Attributtabelle, in der die Anzahl der Betriebe für einen bestimmten Wirtschaftsbereich vorliegen.
Die daraus resultierende und mit AGG erzeugte Karte sowie die Legende sehen folgendermaßen aus:
Karte
Ein Nachteil ist, dass in der Version 5.0 nur Kreissektorendiagramme mit einer festen Größe (Durchmesser) erzeugt werden. Man kann die Kreissektoren also nicht im Zusammenhang zu einem übergeordneten Attribut darstellen. Nur die Anteile der jeweiligen Werte können anhand der Kreissektoren abgelesen werden.
Ab der Version 5.2 wird es mit einem zusätzlichen PROCESSING-Parameter möglich sein, die Kreisgrößen abhängig von einem Attribut zu variieren:
PROCESSING "CHART_SIZE_RANGE = itemname minsize maxsize minval maxval"
Dabei ist:
- itemname der Name des Attributs, welches die Kreisgröße bestimmt
- minsize und maxsize die minimale und maximale Größe der Kreisdiagramme in Pixel
- minval und maxval die minimalen und maximalen Werte des Attributs, welches die Kreisdiagrammgrößen bestimmt, diese korrespondieren dann mit den bei minsize, maxsize angegeben Größen
Sind die Attributwerte kleiner als minval wird die Kreisgröße mit der Angabe bei minsize gezeichnet und sind die Attributwerte größer als maxval werden die Kreisdiagramme mit der bei maxsize angegeben Größe erstellt.
Balkendiagramme
Balkendiagramme werden nach dem gleichen Prinzip wie die Kreissektorendiagramme erzeugt. Es gibt jedoch ein paar zu beachtende Besonderheiten.
Hier zunächst die Erläuterung der LAYER-Struktur:
LAYER TYPE CHART PROCESSING "CHART_TYPE=BAR" # Diagrammtyp, hier BAR für Balkendiagramme PROCESSING "CHART_SIZE=30 40" # Breite und Höhe der Balkendiagramme in Pixel PROCESSING "CHART_BAR_MINVAL=val" # kleinster Attributwert PROCESSING "CHART_BAR_MAXVAL=val" # größter Attributwert … CLASS NAME "Text" # Erläuterung bzw. Name des Balkens, der in der Legende erscheint STYLE SIZE [Attributname] # gibt an, aus welcher Spalte der Attributtabelle die Sachdaten zur Erzeugung der Balkenhöhen benutzt werden sollen COLOR r g b # Farbe, mit der der Balken gefüllt wird OUTLINECOLOR r g b # wenn angegeben, wird eine Umrandungslinie um den Balken gezeichnet WIDTH w # Breite der Umrandungslinie in Pixel, wenn OUTLINECOLOR spezifiziert wurde END END CLASS … END … END
Auch hier gilt: Im STYLE-Block kann bei SIZE auch ein fester Wert angegeben werden. Mindestens zwei CLASS-Blöcke sind erforderlich, um die Diagramme zu erzeugen.