|
|
Im folgenden Beispiel werden die Grundrissdaten mit weiteren Attributen angereichert, die aus einer EXCEL-Tabelle kommen. Diese Attribute sollen bei der Generierung des CityGML-Modells berücksichtigt werden.
|
|
|
Dazu wird die im Abschnitt [Gebäudemodell in LoD 1](Gebäudemodell Lod 1) definierte FME Workbench zunächst so erweitert, dass Attribute aus der EXCEL-Tabelle mit in das CityGML-Modell übernommen werden. Im Einzelnen sollen folgende Attribute abgebildet werden:
|
|
|
|
|
|
|
|
|
| Attribut in EXCEL | Attribut in CityGML |
|
|
|
| ----------------- | ------------------- |
|
|
|
| Baujahr | yearOfConstruction |
|
|
|
| Dachtyp | rooftype |
|
|
|
| Funktion | function |
|
|
|
|
|
|
Zunächst muss ein weiterer <b>Reader</b> zum Prozess hinzugefügt werden, um die EXCEL-Tabelle zu lesen.
|
|
|
Für die Verknüpfung von Objekten kann der Transformer <b>FeatureMerger</b> verwendet werden. Dabei sind die Sachdaten aus dem Excel-Dokument mit dem <i>Supplier </i> und die Gebäude aus der shp-Datei <i>Requestor</i>-Objekte. Im <b>FeatureMerger</b> werden die beiden Datensätze durch einen <i>join</i> bei gleicher Id verknüpft. Dies wird über die Parameter <i>Requestor-</i> und <i>Supplier Join Attribut</i> festgelegt.
|
|
|
|
|
|
![Kap-2-1-Workbench_FeatureMerger](uploads/3b34f76f76e1e88787901a8c9d0e328f/Kap-2-1-Workbench_FeatureMerger.png)
|
|
|
|
|
|
Um die so zugeordneten Attribute auch im CityGML-Modell einzufügen, werden die Attribute <i>Baujahr</i> und <i>Dachtyp</i> im <b>GeometryPropertySetter</b> auf die Attribute <i>citygml_year_of_construction</i> und <i>citygml_roof_type</i> im <b>Writer</b> abgebildet. Das Attribut <i>Funktion</i> muss etwas anders behandelt werden, dazu weiter unten mehr. Erst einmal soll das Ergebnis dbisher hierhin angeschaut werden. In dem resultierenden CityGML Datensatz werden zu jedem Grundriss entsprechende Sachdaten zugeordnet. Fehlen die Sachdaten, wird kein Building erzeugt. Diese Gebäude lassen sich ergänzen, in dem auch die <i>unmergedRequestor</i>-Objekte mit dem <b>Extruder</b> verbunden werden.
|
|
|
|
|
|
![image](uploads/7d3b2ddd544801be45f68ce99baada3c/image.png)
|
|
|
|
|
|
Das resultierende CityGML Dokument hat dann folgende Struktur:
|
|
|
|
|
|
```
|
|
|
<cityObjectMember>
|
|
|
<bldg:Building gml:id="Building_ID_197">
|
|
|
<bldg:yearOfConstruction>2003</bldg:yearOfConstruction>
|
|
|
<bldg:roofType>1010</bldg:roofType>
|
|
|
<bldg:lod1Solid>
|
|
|
```
|
|
|
|
|
|
## Attribut function ##
|
|
|
Das Attribut <i>function</i> in CityGML ist im Gegensatz zu <i>roofType</i> und <i>yearOfConstruction</i> kein elementarer Typ, sondern ein Array, d.h. ein Gebäude kann in CItyGML mehrere Funktionen haben, die als Liste angegeben werden können. Deshalb lässt sich der einzelne Wert <i>Funktion</i> nicht auf diese Liste abbilden. Mit dem <b>AttributCopier</b> kann aber der Wert der <i>Funktion</i> als erstes Element in die Liste <i>function</i> kopiert werden. Dabei kann auch ein default-Wert angegeben werden, der verwendet wird, wenn für ein Gebäude keine Funktion angegeben ist.
|
|
|
|
|
|
![image](uploads/55ab2498e4a5f689965397a85c4e5d3b/image.png)
|
|
|
|
|
|
Der vollständige Workbench sieht nun wie folgt aus:
|
|
|
|
|
|
![image](uploads/04e79cb13fc0cc18d1a7cd28204edfdb/image.png)
|
|
|
|
|
|
## Addressen ##
|
|
|
Adressen sind in CityGML konform zum xAL address standard (OASIS 2003) spezifiziert[^2]. Dabei handelt es sich um ein generisches Schema für alle Arten internationaler Adressen.
|
|
|
Jedes Gebäude (<i>Building</i>) bzw. Gebäudeteil (<i>BuildingPart</i>) kann eine oder mehrere Adressen haben. Ebenso können ab LOD3 einer Tür (<i>Door</i>) eine Adresse zugeordnet werden.
|
|
|
|
|
|
[^2]: eXtensible Address Language, Namespace – urn:oasis:names:tc:ciq:xsdschema:xAl:2.0
|
|
|
|
|
|
![image](uploads/c096877447d0ab2d2df9f9fd94d16947/image.png)
|
|
|
|
|
|
Im Folgenden wird das Mapping von Adressen in den bisherigen FME-Prozess zur Generierung von LoD1 Gebäudemodellen integriert. In der EXCEL-Tabelle ist zu jedem Gebäude eine Adresse gegeben. Die Adresse wird dabei mit den Attributen Straße, Hausnummer, Postleitzahl und Ort beschrieben. Um diese Attribute in das xAL Schema für Adressen abzubilden, kann in FME ein sog <b>xml Templater </b> genutzt werden. Damit kann eine beliebige XML Struktur definiert und mit Attributen aus dem FME Workflow gefüllt werden.
|
|
|
|
|
|
![image](uploads/0ea31468404696602ce3c5a65c213fdb/image.png)
|
|
|
|
|
|
Das Template für die Adressen sieht wie folgt aus:
|
|
|
|
|
|
```
|
|
|
<core:xalAddress xmlns:core="http://www.opengis.net/citygml/2.0">
|
|
|
<xAL:AddressDetails xmlns:xAL="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
|
|
|
<xAL:Locality Type="Town">
|
|
|
<xAL:LocalityName>{fme:get-attribute("Ort")}</xAL:LocalityName>
|
|
|
<xAL:Thoroughfare Type="Street">
|
|
|
<xAL:ThoroughfareNumber>{fme:get-attribute("Hausnummer")}</xAL:ThoroughfareNumber>
|
|
|
<xAL:ThoroughfareName>{fme:get-attribute("Strasse")}</xAL:ThoroughfareName>
|
|
|
</xAL:Thoroughfare>
|
|
|
<xAL:PostalCode>
|
|
|
<xAL:PostalCodeNumber>{fme:get-attribute("PLZ")}</xAL:PostalCodeNumber>
|
|
|
</xAL:PostalCode>
|
|
|
</xAL:Locality>
|
|
|
</xAL:AddressDetails>
|
|
|
</core:xalAddress>
|
|
|
```
|
|
|
|
|
|
Um die Adresse mit dem CityGML <i>Building</i> zu verbinden, muss analog zum <i>citygml_lod_name</i> ein Attribut <i>citygml_feature_role</i> erzeugt werden. Dazu wird wieder ein <b> AttributCreator </b> verwendet. Das Attribut <i>citygml_feature_role</i> bekommt den Wert <i>address</i>.
|
|
|
|
|
|
![image](uploads/3033e0783e15636a94fd69077377c2ec/image.png)
|
|
|
|
|
|
Die Adresse muss abschließend dem <i>Building</i> zugeordnet werden. Dazu muss ein neuer <b>CityGML Writer</b> erzeugt werden. Am besten vorher den bestehenden <b>Writer</b> löschen[^3]. Bei dem neuen <b>Writer</b> die Feature Typs <i>Building</i> und <i>Address</i> auswählen. Die Adresse wird über die <i>ID</i> mit der <i>citygml_parent_id</i> im <b>Writer</b> verknüpft.
|
|
|
|
|
|
[^3]: Und auch die Ausgabedatei, falls diese schon vorhanden ist. Ansonsten nimmt der <b>Writer</b> nur Feature Types, die in diesem CityGML Dokument vorkommen.
|
|
|
|
|
|
![image](uploads/6385d6d448ad1184133a8935cdbe345c/image.png)
|
|
|
|
|
|
Das resultierende CityGML Dokument hat nun folgende Struktur:
|
|
|
![image](uploads/148338c2b44ff08d24089a6c992d432d/image.png)
|
|
|
|
|
|
Ein umfangreicheres Beispiel zur Generierung von CityGML LoD 1 Gebäudemodellen mit Attributen, externen Codelisten und externen Referenzen findet sich als Beispiel auf dem Safe Hub: [CityGML LoD 1 Gebäude mit Attributen](https://hub.safe.com/templates/citygml-create-building-lod1-with-address-and-external-reference). |