MapGuide OpenSource Splitter


Color in der VectorLayerDefinition aus Datenbank (Featuresource)

Vektorlayer in MapGuide Open Source (kurz MGOS) enthalten verschiedene Parameter, die wahlweise konstant oder variabel definiert werden können. Beispielsweise die Linienstärke <Thickness>. Dafür kann man entweder einen festen Wert definieren oder einen Wert aus der Datenbank (Featuresource) entnehmen. Es ist naheliegend, dass es sich dabei um einen numerischen Datentyp handelt und damit funktioniert es auch. Ebenso unter anderem für den <Rotation> Tag.

Will man auch die Farbe <Color> der Elemente einer VectorLayerDefinition variabel gestalten, ist das etwas tricky. Beispielsweise für die Linienfarbe. Üblicherweise werden die MGOS-Farben als RGB-Werte inkl. vorangestelltem Alpha-Wert gespeichert. Also scheint es logisch, in der Featuresource ein Datenfeld vom Typ CHARACTER dafür vorzusehen und es in der Layerdefinition zu benutzen. Das ist leider nur teilweise richtig, denn  in diesem Datenfeld muss die Farbe als Integer Wert gespeichert werden.

Nochmal in anderen Worten … zuerst ist der Hex-Wert der Farbe (inkl. Alpha) nach Integer umzurechen. Grün wäre also im Hex-Format ff00ff00 und 4278255360 als Integer. Diese Zahl, oder besser diese Ziffernfolge ist als Text in einem Datenbankfeld vom Typ CHARACTER zu speichern. Dann kann man in der MapGuide VectorLayerDefinition dieses Datenfeld im <Color>  Tag verwenden. Das nacholgende einfache Beispiel einer Linienlayer-Definition Benutz also für die Linienstärke das numerische Datenbankfeld ‚linienbreite‘ und für die Farbe das Datenfeld ‚farbe‘.

[codesyntax lang=“xml“]

<VectorLayerDefinition>
<ResourceId>Library://battefeld/pgtest/dbverbindung.FeatureSource</ResourceId>
<Watermarks />
<FeatureName>public:linientest</FeatureName>
<FeatureNameType>FeatureClass</FeatureNameType>
<Geometry>graphik</Geometry>
<VectorScaleRange>
  <LineTypeStyle>
	<LineRule>
	  <LegendLabel />
	  <LineSymbolization2D>
		<LineStyle>Solid</LineStyle>
		<Thickness>linienbreite</Thickness>
		<Color>farbe</Color>
		<Unit>Centimeters</Unit>
		<SizeContext>MappingUnits</SizeContext>
	  </LineSymbolization2D>
	</LineRule>
  </LineTypeStyle>
</VectorScaleRange>
</VectorLayerDefinition>

[/codesyntax]

Gestestet wurde dieses Verfahren mit MGOS 2.5.2 und PostGIS 9.2.

Für Rückfragen oder weitergehende Informationen stehen wir Ihnen gerne zur Verfügung.