Franz-Josef Behr: GML-basierte Kodierung von Geodaten:  Einleitung | XML, SVG, CSS | GML | Definition von Objekten in GML | Zusammenfassung | Literatur

Definition von Objekten in GML

Geo-Objekte und Eigenschaften

Kern des GML-Ansatzes sind Geo-Objekte (Features) mit ihren geometrischen und nichtgeometrischen Eigenschaften; hier werden (endlich) die Daten abgelegt! Features dienen der Repräsentation von Objekten der realen Welt, wie z. B. Straßen, Gebäuden, Flüssen, Vermessungspunkten, jeweils bezogen auf einen bestimmten Anwendungskontext (OGC 2002).

Im folgenden Beispiel wird die Instanz eines Geo-Objekts Radweg in GML modellliert:

<Radweg gml:id="EZ02LLB"> ... </Radweg>

Der Instanz ist das Attribut id zugeordnet, das dem gml-Namensraum angehört. Eine solche eindeutige Kennung ist innerhalb eines GML-Dokuments für jede Objektinstanz zwingend notwendig.

Eigenschaften werden zu Kindelemente, die die Objektinstanz näher beschreiben. Für unseren Radweg werden beispielweise Angaben zu objektArt, kategorie und kartenBlattNummer spezifiziert:

<Radweg gml:id="EZ02LLB">
<objektArt>9102</objektArt>
<kategorie>1470</kategorie>
<kartenBlattNummer>l7120</kartenBlattNummer>
</Radweg>

Während die Namen von Features mit Großbuchstaben anfangen, beginnen die Namen von Eigenschaftselemente üblicherweise mit einem Kleinbuchstaben. Nachfolgende Wortbestandteile werden jeweils mit einem Großbuchstaben begonnen.

Eigenschaftswerte können, wie im Beispiel gezeigt, innerhalb der Objektinstanz deklariert werden. Unter Nutzung von XLink können Eigenschaften auch an anderer Stelle in diesem Dokument oder in einem beliebig anderen, über einen URI identifizierbaren Dokument referenziert werden:

<objektArt xlink:href=<a href="http://www.anyserver.de/objArt.xml#9401">http://www.anyserver.de/objArt.xml#9401</a>

Das objektArt-Element wird hierbei zu einem leeren XML-Element; der Verweis wird als Attribut dem Start-Tag beigefügt. Die eigentliche Information findet sich auf dem Server www.anyserver.de im Fragment 9401 der Datei objArt.xml.

Beziehungen zwischen Features

Features können Eigenschaften besitzen, die wiederum Features sind. Liegt ein Badesee an einem Wanderweg, kann diese Beziehung beispielsweise folgendermaßen notiert werden:

<BadeseeBadeplatz>
<objektArt>9401</objektArt>
<liegtAn>
<tkfd:WanderWeg gml:id="wanderweg001"/>
</liegtAn>
</BadeseeBadeplatz>

Als Verweis auf ein referenziertes Feature (hier im selben Dokument) wird die Beziehung folgendermaßen beschrieben:

<Badesee_Badeplatz>
<liegtAn xlink:href="#wanderweg001"/>
</Badesee_Badeplatz>

Geometrische Eigenschaften

Während in GML 2 nur wenige Grundformen wie Punkt, Linie, Fläche und Multipolygon vorgesehen waren, verfügt die aktuelle Version GML 3 über eine deutlich erweiterte Vielzahl geometrischer Elemente. Dazu zählen (Kolbe 2004):

Dazu kommen noch komplexe Geometrien, räumliche und zeitliche Referenzsysteme, Topologie, Maßeinheiten, Metadaten, Coverages; Beobachtungen (Observations) und an SVG angelehnte Stilvorgaben (Default Styles) für die Visualisierung der Geodaten.

Features dürfen beliebig viele geometrische Eigenschaften besitzen. Jede geometrische Eigenschaft wird in einem geometryProperty-Kindelement eingeschlossen, das den Datentyp bzw. die Rolle des Geometrie-Objekts (z.B. centerLineOf, curveProperty, surfaceProperty) bezeichnet

Kindelement dieses Geometrie-Eigenschaftselements sind ein oder mehrere Geometrie-Objekte (z.B. Point, LineString, Polygon usw.). Im ersten Beispiel wird der Verlauf eines linienförmigen Objekts durch fünf Stützpunktkoordinaten festgelegt:

<gml:centerLineOf>
<gml:LineString>
<gml:pos>3512126.69 5411713.94</gml:pos>
<gml:pos>3512219.35 5411712.56</gml:pos>
<gml:pos>3512462.85 5411720.61</gml:pos>
<gml:pos>3512627.57 5411729.57</gml:pos>
<gml:pos>3512748.51 5411740.24</gml:pos>
</gml:LineString> </gml:centerLineOf>

Neben dem pos-Element können Koordinatenangabe beispielsweise auch über gml:coordinates erfolgen. Das zweite Beispiel zeigt lagemäßige Beschreibung eines punktförmigen Features:

<gml:centerOf>
<gml:Point>
<gml:pos>3512280.93 5410246.16</gml:pos>
</gml:Point>
</gml:centerOf>

Auch für geometrische Eigenschaften gilt, dass der Elementinhalt als Referenz auf eine anderes XML-Element definiert werden kann:

<gml:centerLineOf xlink:href="#0000002CFV9019101R00000002CFU9019101R0"></gml:centerLineOf>

GML und räumliche Bezugssysteme

Zur Geometrieinformation muss das räumliche Bezugssystem (engl. spatial reference system, SRS, bzw. coordinate reference system, CRS, vgl. Whiteside 2005, Lake 2004:192ff) benannt werden, in dem die Koordinaten vorliegen. Bei zusammengesetzten Geometrien reicht es, wenn das Bezugssystem bei der Angabe des umschließenden Rechtecks (boundedBy bzw. Envelope) benannt ist (Kolbe 2004). Für die Referenzierung eines Bezugssystems wird durch Angabe eines URI auf die Klassifikation geodätischer Bezugssysteme der European Petrol Survey Group EPSG (http://www.epsg.org) zurückgegriffen. Jedem Bezugssystem entspricht darin einer eindeutigen Codenummer (z. B. 31467 für Gauß-Krüger-Projektion, 3. System):

<tkfd:Bahnhof gml:id="b00214">
<gml:centerOf>
<gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#31467">
<gml:pos>3514623.36 5411115.90</gml:pos>
</gml:Point>
</gml:centerOf>
</tkfd:Bahnhof>


Sammlungen von Features

Geo-Objekte können zu Sammlungen von Features (FeatureCollections) zusammen gefasst werden, die Ähnlichkeit mit einem Layer in einem Geo-Informationssystem aufweisen. Eine solche Sammlung kann leer sein oder beliebig viele Mitglieder (FeatureMembers) besitzen.

Eine Sammlung kann selbst eigene räumliche und nichträumliche Eigenschaften besitzen. Sie ist per definitionem selbst ein Feature; somit sind auch FeatureCollections von FeatureCollections möglich!

Im nachfolgenden Beispiel sind Features aufgeführt, die Teil einer Sammlung SportFreizeit sind:

<tkfd:SportFreizeit gml:id="ID000001">
<gml:featureMember>
<tkfd:BadeseeBadeplatz gml:id="ID000002">
...
</tkfd:BadeseeBadeplatz>
</gml:featureMember>
<gml:featureMember>
<tkfd:Bootsvermietung gml:id="ID000004">
...
</tkfd:Bootsvermietung>
</gml:featureMember>
...


Beispiel

Im nächsten, umfangreicheren Beispiel wird ein Wanderweg modelliert, der sich aus einzelnen Abschnitten zusammensetzt. Der Wanderweg besitzt Eigenschaften, die für ihn in seiner Gesamtheit gültig sind. Jeder Wegabschnitt besitzt zusätzliche Eigenschaften, die nur für ihn gelten.

Das Element WanderWeg ist vom Typ WanderWegType und wird indirekt abgeleitet von der abstrakten Klasse gml:AbstractFeatureCollectionType.

AbstractFeatureCollectionType ist ein abstrakter Typ, der unter anderem die Eigenschaften Name, Beschreibung, id-Attribut, das boundedBy-Attribut sowie eine beliebige Anzahl von Members vorsieht.

<element name="WanderWeg" substitutionGroup="gml:_FeatureCollection">
<complexType>
<complexContent>
<extension base="tkfd:WanderWegType"/>
</complexContent>
</complexType>
</element>

Der komplexe Typ WanderWegType sieht über die Eigenschaften des AbstractFeatureCollectionType hinaus die Eigenschaften objektArt, kartenBlattNummer und WanderWegTeil vor:

<complexType name="WanderWegType">
<complexContent>
<extension base="gml:AbstractFeatureCollectionType">
<sequence>
<element ref="tkfd:objektArt"/>
<element name="kartenBlattNummer" type="string">
</element>
<element ref="tkfd:WanderWegTeil" minOccurs="1" maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>

Ein Geo-Objekt WanderWeg besteht also aus mindestens einem Geo-Objekt WanderWegTeil. Die Maximalanzahl ist unbegrenzt.


Das Element WanderWegTeil wird wie folgt definiert:
<element name="WanderWegTeil" substitutionGroup="gml:_Feature">
<complexType>
<complexContent>
<extension base="tkfd:WanderWegTeilType"/>
</complexContent>
</complexType>
</element>

Der zugehörige Datentyp besitzt folgenden Aufbau:

<complexType name="WanderWegTeilType">
<complexContent>
<extension base="gml:AbstractFeatureType">
<sequence>
<element ref="gml:centerLineOf"/>
<element name="beschaffenheitDesWeges" type="tkfd:bwgType">
</element>
</sequence>
</extension>
</complexContent>
</complexType>

Neben den über AbstractFeatureType geerbten Eigenschaften wird hier zunächst als Verweis die Geometrieeigenschaft gml:centerLineOf definiert. Die weitere Eigenschaft beschaffenheitDesWeges ist durch einen Sub-Typ des Datentyps string bestimmt, der als zulässige Werte 11110, 11120, 1130 und 9998 enthält:

<simpleType name="bwgType">
<restriction base="string">
<enumeration value="1110 "/>
<enumeration value="1120 "/>
<enumeration value="1130 "/>
<enumeration value="9998 "/>
</restriction>
</simpleType>
In ähnlicher Weise erfolgt die Definition des Elements objektArt bzw. seines Typs tkfd:objektArtType:
<element name=" objektArt" type="tkfd:objektArtType"/>
<simpleType name="objektArtType">
<restriction base="string">
<enumeration value="9501"/>
<enumeration value="9502"/>
<enumeration value="9503"/>
<enumeration value="9510"/>
<enumeration value="9511"/>
<enumeration value="9520"/>
</restriction>
</simpleType>

Die Definition einer GML-Instanz hat schließlich folgenden Aufbau:

<tkfd:Wanderweg gml:id="w00001B">
<tkfd:objektArt>9101</tkfd:objektArt>
<tkfd:kartenBlattNummer>l7120</tkfd:kartenBlattNummer>
<gml:featureMember>
<tkfd:WanderwegPart gml:id="0000002BZX">
<gml:centerLineOf">
<gml:LineString>
<gml:pos>3516104.74 5409978.21</gml:pos>
<gml:pos>3516066.86 5409966.49</gml:pos>
<gml:pos>3515995.92 5409982.26</gml:pos>
<gml:pos>3515914.83 5409992.39</gml:pos>
</gml:LineString>
</gml:centerLineOf>
<tkfd:bwg>1110</tkfd:bwg>
</tkfd:WanderwegPart>
<tkfd:WanderwegPart gml:id="0000005WQR">
<gml:centerLineOf>
<gml:LineString>
<gml:pos>3515899.76 5409993.11</gml:pos>
<gml:pos>3515843.89 5409995.77</gml:pos>
<gml:pos>3515775.19 5409993.52</gml:pos>
</gml:LineString>
</gml:centerLineOf>
<tkfd:bwg>1110</tkfd:bwg>
</tkfd:WanderwegPart>
</tkfd:Wanderweg>

Valid XHTML 1.0! Check valid XHTML
[ Sponsored Links ]