Hm. The GML itself looks fine; the errors are complaining about expecting core:externalReference nodes where it’s encountering core:informationSystem nodes (which, per the schema and subject under test, are a child node of core:externalReference). Which means it may be a bug in how libcitygml deals with externalReferenceType.
Unfortunately, our support for CityGML is not exhaustive. We use libcitygml for parsing CityGML, and it looks like it’s failing on the <core:externalReference> tags in that file. On visual inspection, they appear to be correct in the file as defined by the schema. We’re looking at whether it’s a problem in libcitygml, or just in our handling of the emitted element. If it’s the latter, we’ll try to support the feature.
Thank you for your patience; I’ll keep this thread up to date as there’s news.
If we compare the Saxony CityGML dataset to the versions from other German states such as Baden-Württemberg, we can find that the problem lies in how the data is structured.
The original Saxony CityGML files include a <gml:boundedBy> element inside every individual building. Each building defines its own coordinate reference system (CRS) through an attribute such as:
However, Cesium Ion expects a valid CityModel-level envelope (global bounding box) and a single consistent CRS definition at the top level. When the CRS is repeated per building, Ion cannot identify a unified spatial reference, and tiling fails with the message “Input does not contain any eligible features for tiling.”
To resolve this, I wrote a Python script that performs the following corrections:
Removes all per-building <gml:boundedBy> elements.
Computes the global bounding box (min/max coordinates) from all buildings.
Adds a single <gml:boundedBy> under <core:CityModel> with:
<gml:Envelope srsName="urn:adv:crs:ETRS89_UTM33*DE_DHHN2016_NH" srsDimension="3">
Or srsName="EPSG:25833" srsDimension="3" which is simple.
Replaces the root <core:CityModel> namespaces and schema locations with the official AdV (Germany) schema definitions.
Reformats the entire XML with proper indentation and encoding.
Optionally compresses each fixed CityGML file back into a .zip ready for upload to Cesium Ion.
After applying this fix, the data uploads and tiles correctly in Cesium Ion — identical to the behavior of CityGML data from other federal states.
If you’re still experiencing issues, please ensure the corrected file structure looks like this at the top level:
@MWIMANGIRE_CEPHAS That sounds interesting. I don’t have much context about CityGML and the tiling error, but am curious: Is this Python script publicly available, so that others can easily try out whether it resolves their issues?