| ... | ... | @@ -2,23 +2,73 @@ |
|
|
|
|
|
|
|
This example shows how to add a schematic attribute (here: year_of_construction) to an existing CityGML document using FME. The same method can be used for adding any schematic attribute(s) by attribute join to any CityGML CityObjects irrespective of its Level Of Detail. For example purpose here, CityGML 2.0 building dataset is used.
|
|
|
|
|
|
|
|
Method 1: Using feature merger and attribute creator
|
|
|
|
**Method 1: Using feature merger and attribute creator**
|
|
|
|
|
|
|
|
With this method, you first add another reader to the workbench (here: CSV). Then in the feature merger transformer, you connect port from "CityGML Building" to requestor port and, CSV to supplier port. Inside, feature merger mapping on gml_ID is done. The output port "Merged" is then connected to the attribute creator transformer. Within attribute creator, select "citygml_year_of_construction" under new attribute and the CSV field containing year of construction values under attribute value. Connect the output port to the writer port of "CityGML Building" and run the workbench.
|
|
|
|
|
|
|
|
An example workbench is available [here](https://transfer.hft-stuttgart.de/gitlab/coors/3d-stadtmodelle/-/blob/master/FME_Workbenches/citygml_yoc_method1.zip).
|
|
|
|
An example workbench is available [here](https://transfer.hft-stuttgart.de/gitlab/coors/3d-stadtmodelle/-/blob/master/FME_Workbenches/citygml_yoc_method1.zip).
|
|
|
|
|
|
|
|
Method 2: Using database joiner and attribute manager
|
|
|
|
<div align = center>
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
The output CityGML file will contain the schematic attribute for year of construction.
|
|
|
|
|
|
|
|
<div align = center>
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
**Method 2: Using database joiner and attribute manager**
|
|
|
|
|
|
|
|
In this method, instead of adding another reader database joiner, transformer is used to connect datasets based on gml_id or any primary key. Here you connect the port from "CityGML Building" to the input port of database joiner transformer. Inside the transformer you select your database (here: CSV), select the CSV table and then map your gml_id from the CityGML file to gml_id from the CSV file. Under "Fields to Add", the field containing year of construction values is selected (here: construction ). Also make sure to set cardinality to either 1:1 or 1:0..1. This will prevent unmatched gml_id from giving you an error and terminating the workbench. Next connect the joined port of database joiner to attribute manager input port. Inside attribute manager, in front of the "citygml_year_of_construction" assign value "construction ". Join the output port to the writer port of "CityGML Building" and run the workbench.
|
|
|
|
|
|
|
|
An example workbench is available [here](https://transfer.hft-stuttgart.de/gitlab/coors/3d-stadtmodelle/-/blob/master/FME_Workbenches/citygml_yoc_method2.zip).
|
|
|
|
An example workbench is available [here](https://transfer.hft-stuttgart.de/gitlab/coors/3d-stadtmodelle/-/blob/master/FME_Workbenches/citygml_yoc_method2.zip).
|
|
|
|
|
|
|
|
<div align = center>
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
The output CityGML file will contain the schematic attribute for year of construction.
|
|
|
|
|
|
|
|
<div align = center>
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
The difference between using database joiner and CSV as a reader, is that CSV reader with cache all the data from the CSV file on your local machine. This is not good if you are working with a large dataset. With a database joiner, the transformer will read your database on the run and hence will not cache any data on your local machine. This saves time, memory and disk space.
|
|
|
|
</div>
|
|
|
|
|
|
|
|
>The difference between using database joiner and CSV as a reader, is that CSV reader with cache all the data from the CSV file on your local machine. This is not good if you are working with a large dataset. With a database joiner, the transformer will read your database on the run and hence will not cache any data on your local machine. This saves time, memory and disk space.
|
|
|
|
|
|
|
|
## Adding a generic attribute to the CityGML dataset (Generic Attribute: Specific Space Heating Demand)
|
|
|
|
|
|
|
|
In this example, we will add a generic attribute (here: specific space heating demand) to an existing CityGML document using FME. The same method can be used for adding any generic attribute(s) by attribute join to any CityGML CityObjects irrespective of its Level Of Detail. For example purpose here, CityGML 2.0 building dataset for HFT campus in LOD2 is used. For adding generic attribute of Specific space heating demand to HFT CityGML file, SimStadt simulated heating energy demand result is used. Database joiner method is used in this example as explained above. The complete FME workench along with its input and outputs can be downloaded from **here**.
|
|
|
|
In this example, we will add a generic attribute (here: specific space heating demand) to an existing CityGML document using FME. The same method can be used for adding any generic attribute(s) by attribute join to any CityGML CityObjects irrespective of its Level Of Detail. For example purpose here, CityGML 2.0 building dataset for HFT campus in LOD2 is used. For adding generic attribute of Specific space heating demand to HFT CityGML file, SimStadt simulated heating energy demand result is used. Database joiner method is used in this example as explained above.
|
|
|
|
|
|
|
|
First, we connect the port from "CityGML Building" to the input port of database joiner transformer. Inside the transformer you select your database (here: CSV), select the CSV table and then map your gml_id from the CityGML file to gml_id from the CSV file. Under "Fields to Add", the field containing specific space heating demand values is selected (here: Specific space heating demand ). Also make sure to set cardinality to either 1:1 or 1:0..1. This will prevent unmatched gml_id from giving you an error and terminating the workbench. Next we will join the output port to the writer port of "CityGML Building". At this point, the new attribute of Specific space heating demand must be added to the attribute list of CityGML building. To access the existing attribute list of CityGML building, click on wheel icon . Next, select the User Attributes tab and manually add the new attribute Specific space heating demand with xml_real64 type. Now save and run the workbench.
|
|
|
|
|
|
|
|
>An easier way to define new generic attributes would be to switch "Attribute Definition" from Automatic to Manual. This will reduce time to manually add all the new generic attributes to the CityGML attribute list but for all the newly added generic attributes FME will define their type based on their data type defined in the input database (e.g. excel, CSV, Postgres etc.). To manually change a data type, switch back to Manuall attribute definition.
|
|
|
|
|
|
|
|
The complete FME workench along with its input and outputs can be downloaded from **here**.
|
|
|
|
|
|
|
|
<div align = center>
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
>If the generic attribute to be added is not part of a database (e.g excel, CSV, Postgres etc.) then use [Attribute Creator](https://www.safe.com/transformers/attribute-creator/) transformer instead of database joiner and then follow the above process.
|
|
|
|
|
|
|
|
The output CityGML file will contain the schematic attribute for year of construction.
|
|
|
|
|
|
|
|
<div align = center>
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
## Adding an Address to the CityGML dataset
|
|
|
|
|
| ... | ... | |