From 9bf39b18ed306faa43e67b96ade89bf12fb82de9 Mon Sep 17 00:00:00 2001
From: Eric Duminil <eric.duminil@gmail.com>
Date: Sat, 11 Apr 2020 15:48:28 +0200
Subject: [PATCH] Added tests for CRS from header

---
 .../CRSfromCityGMLHeaderTests.java            |  54 ++++
 .../Others.proj/Aachen_LoD2_293_5623_1_NW.gml | 149 ++++++++++
 .../testdata/Others.proj/SimpleSolid_MSBS.gml | 273 ++++++++++++++++++
 .../Valladolid_Spain_only_header.gml          |  10 +
 4 files changed, 486 insertions(+)
 create mode 100644 src/test/java/eu/simstadt/regionchooser/CRSfromCityGMLHeaderTests.java
 create mode 100644 src/test/resources/testdata/Others.proj/Aachen_LoD2_293_5623_1_NW.gml
 create mode 100644 src/test/resources/testdata/Others.proj/SimpleSolid_MSBS.gml
 create mode 100644 src/test/resources/testdata/Others.proj/Valladolid_Spain_only_header.gml

diff --git a/src/test/java/eu/simstadt/regionchooser/CRSfromCityGMLHeaderTests.java b/src/test/java/eu/simstadt/regionchooser/CRSfromCityGMLHeaderTests.java
new file mode 100644
index 0000000..5e902fa
--- /dev/null
+++ b/src/test/java/eu/simstadt/regionchooser/CRSfromCityGMLHeaderTests.java
@@ -0,0 +1,54 @@
+package eu.simstadt.regionchooser;
+
+import static org.junit.Assert.assertEquals;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import org.junit.Test;
+import eu.simstadt.geo.RegionChooserUtils;
+
+
+public class CRSfromCityGMLHeaderTests
+{
+	private Path repo = Paths.get("src/test/resources/testdata");
+
+	private void testExtractCSRNameFromHeader(Path citygmlPath, String crsName) throws IOException {
+		assertEquals(crsName, RegionChooserUtils.crsFromCityGMLHeader(citygmlPath).toString());
+	}
+
+	@Test
+	public void testExtractCRSFromStuttgart() throws IOException {
+		testExtractCSRNameFromHeader(repo.resolve("Stuttgart.proj/Stuttgart_LOD0_LOD1_buildings_and_trees.gml"), "EPSG:31463");
+	}
+
+	@Test
+	public void testExtractCRSFromGruenbuehl() throws IOException {
+		testExtractCSRNameFromHeader(repo.resolve("Gruenbuehl.proj/20140218_Gruenbuehl_LOD2_1building.gml"), "EPSG:31467");
+	}
+
+	@Test
+	public void testExtractCRSFromMunich() throws IOException {
+		testExtractCSRNameFromHeader(repo.resolve("Muenchen.proj/Munich_v_1_0_0.gml"), "EPSG:32632");
+	}
+
+	@Test
+	public void testExtractCRSFromNYC() throws IOException {
+		testExtractCSRNameFromHeader(repo.resolve("NewYork.proj/ManhattanSmall.gml"), "EPSG:32118");
+	}
+
+	@Test
+	public void testExtractCRSFromAachen() throws IOException {
+		testExtractCSRNameFromHeader(repo.resolve("Others.proj/Aachen_LoD2_293_5623_1_NW.gml"), "EPSG:25832");
+	}
+
+	@Test
+	public void testExtractCRSFromValladolid() throws IOException {
+		testExtractCSRNameFromHeader(repo.resolve("Others.proj/Valladolid_Spain_only_header.gml"), "EPSG:25830");
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void testDontExtractCRSFromBrokenCityGML() throws IOException {
+		Path citygmlPath = repo.resolve("Others.proj/SimpleSolid_MSBS.gml");
+		testExtractCSRNameFromHeader(citygmlPath, "Nothing found. Should throw an exception");
+	}
+}
diff --git a/src/test/resources/testdata/Others.proj/Aachen_LoD2_293_5623_1_NW.gml b/src/test/resources/testdata/Others.proj/Aachen_LoD2_293_5623_1_NW.gml
new file mode 100644
index 0000000..37dbef2
--- /dev/null
+++ b/src/test/resources/testdata/Others.proj/Aachen_LoD2_293_5623_1_NW.gml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="windows-1252" standalone="yes"?>
+<core:CityModel xmlns:xal="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:app="http://www.opengis.net/citygml/appearance/1.0" xmlns:core="http://www.opengis.net/citygml/1.0" xmlns:tex="http://www.opengis.net/citygml/texturedsurface/1.0" xmlns:dem="http://www.opengis.net/citygml/relief/1.0" xmlns:veg="http://www.opengis.net/citygml/vegetation/1.0" xmlns:wtr="http://www.opengis.net/citygml/waterbody/1.0" xmlns:tran="http://www.opengis.net/citygml/transportation/1.0" xmlns:bldg="http://www.opengis.net/citygml/building/1.0" xmlns:frn="http://www.opengis.net/citygml/cityfurniture/1.0" xmlns:grp="http://www.opengis.net/citygml/cityobjectgroup/1.0" xmlns:gen="http://www.opengis.net/citygml/generics/1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:luse="http://www.opengis.net/citygml/landuse/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/1.0 http://schemas.opengis.net/citygml/building/1.0/building.xsd http://www.opengis.net/citygml/cityfurniture/1.0 http://schemas.opengis.net/citygml/cityfurniture/1.0/cityFurniture.xsd http://www.opengis.net/citygml/appearance/1.0 http://schemas.opengis.net/citygml/appearance/1.0/appearance.xsd http://www.opengis.net/citygml/cityobjectgroup/1.0 http://schemas.opengis.net/citygml/cityobjectgroup/1.0/cityObjectGroup.xsd http://www.opengis.net/citygml/generics/1.0 http://schemas.opengis.net/citygml/generics/1.0/generics.xsd http://www.opengis.net/citygml/texturedsurface/1.0 http://schemas.opengis.net/citygml/texturedsurface/1.0/texturedSurface.xsd http://www.opengis.net/citygml/relief/1.0 http://schemas.opengis.net/citygml/relief/1.0/relief.xsd http://www.opengis.net/citygml/vegetation/1.0 http://schemas.opengis.net/citygml/vegetation/1.0/vegetation.xsd http://www.opengis.net/citygml/waterbody/1.0 http://schemas.opengis.net/citygml/waterbody/1.0/waterBody.xsd http://www.opengis.net/citygml/transportation/1.0 http://schemas.opengis.net/citygml/transportation/1.0/transportation.xsd http://www.opengis.net/citygml/landuse/1.0 http://schemas.opengis.net/citygml/landuse/1.0/landUse.xsd">
+  <gml:name>LoD1_293_5623_1_NW</gml:name>
+  <gml:boundedBy>
+    <gml:Envelope srsName="urn:adv:crs:ETRS89_UTM32*DE_DHHN92_NH">
+      <gml:lowerCorner srsDimension="3">293000.0 5623000.0 291.37</gml:lowerCorner>
+      <gml:upperCorner srsDimension="3">294000.0 5624000.0 294.37</gml:upperCorner>
+    </gml:Envelope>
+  </gml:boundedBy>
+  <core:cityObjectMember>
+    <bldg:Building gml:id="DENW39AL10003jfi">
+      <core:creationDate>2015-12-18</core:creationDate>
+      <core:externalReference>
+        <core:informationSystem>http://repository.gdi-de.org/schemas/adv/citygml/fdv/art.htm</core:informationSystem>
+        <core:externalObject>
+          <core:name>DENW39AL10003jfi</core:name>
+        </core:externalObject>
+      </core:externalReference>
+      <gen:stringAttribute name="DatenquelleDachhoehe">
+        <gen:value>3000</gen:value>
+      </gen:stringAttribute>
+      <gen:stringAttribute name="DatenquelleLage">
+        <gen:value>1000</gen:value>
+      </gen:stringAttribute>
+      <gen:stringAttribute name="Gemeindeschluessel">
+        <gen:value>05334002</gen:value>
+      </gen:stringAttribute>
+      <gen:stringAttribute name="DatenquelleBodenhoehe">
+        <gen:value>1100</gen:value>
+      </gen:stringAttribute>
+      <bldg:function>31001_2000</bldg:function>
+      <bldg:measuredHeight uom="urn:adv:uom:m">3.0</bldg:measuredHeight>
+      <bldg:lod1Solid>
+        <gml:Solid gml:id="UUID_5975d8a4-ac67-451c-ac07-94b17249c272">
+          <gml:exterior>
+            <gml:CompositeSurface gml:id="UUID_09896245-a517-4309-8009-6aa452c83241">
+              <gml:surfaceMember>
+                <gml:Polygon gml:id="UUID_b9db823d-cc7e-41ed-9dd3-0edae5e35968">
+                  <gml:exterior>
+                    <gml:LinearRing gml:id="UUID_b9db823d-cc7e-41ed-9dd3-0edae5e35968_0_">
+                      <gml:posList srsDimension="3">293419.864 5623614.091 294.37 293420.389 5623616.431 294.37 293420.389 5623616.431 291.37 293419.864 5623614.091 291.37 293419.864 5623614.091 294.37</gml:posList>
+                    </gml:LinearRing>
+                  </gml:exterior>
+                </gml:Polygon>
+              </gml:surfaceMember>
+              <gml:surfaceMember>
+                <gml:Polygon gml:id="UUID_6ab56fed-c69d-4ca7-ab10-4e1df778ba42">
+                  <gml:exterior>
+                    <gml:LinearRing gml:id="UUID_6ab56fed-c69d-4ca7-ab10-4e1df778ba42_0_">
+                      <gml:posList srsDimension="3">293420.389 5623616.431 294.37 293422.915 5623617.223 294.37 293422.915 5623617.223 291.37 293420.389 5623616.431 291.37 293420.389 5623616.431 294.37</gml:posList>
+                    </gml:LinearRing>
+                  </gml:exterior>
+                </gml:Polygon>
+              </gml:surfaceMember>
+              <gml:surfaceMember>
+                <gml:Polygon gml:id="UUID_9f7551d0-a458-4959-9b48-75a7bd2eb1a3">
+                  <gml:exterior>
+                    <gml:LinearRing gml:id="UUID_9f7551d0-a458-4959-9b48-75a7bd2eb1a3_0_">
+                      <gml:posList srsDimension="3">293422.915 5623617.223 294.37 293424.598 5623615.468 294.37 293424.598 5623615.468 291.37 293422.915 5623617.223 291.37 293422.915 5623617.223 294.37</gml:posList>
+                    </gml:LinearRing>
+                  </gml:exterior>
+                </gml:Polygon>
+              </gml:surfaceMember>
+              <gml:surfaceMember>
+                <gml:Polygon gml:id="UUID_6f1c4986-26fd-44bb-9962-d12321915256">
+                  <gml:exterior>
+                    <gml:LinearRing gml:id="UUID_6f1c4986-26fd-44bb-9962-d12321915256_0_">
+                      <gml:posList srsDimension="3">293424.598 5623615.468 294.37 293424.06 5623613.068 294.37 293424.06 5623613.068 291.37 293424.598 5623615.468 291.37 293424.598 5623615.468 294.37</gml:posList>
+                    </gml:LinearRing>
+                  </gml:exterior>
+                </gml:Polygon>
+              </gml:surfaceMember>
+              <gml:surfaceMember>
+                <gml:Polygon gml:id="UUID_dd97b9a6-a10e-44e6-895d-e94ab9d802b2">
+                  <gml:exterior>
+                    <gml:LinearRing gml:id="UUID_dd97b9a6-a10e-44e6-895d-e94ab9d802b2_0_">
+                      <gml:posList srsDimension="3">293424.06 5623613.068 294.37 293421.595 5623612.293 294.37 293421.595 5623612.293 291.37 293424.06 5623613.068 291.37 293424.06 5623613.068 294.37</gml:posList>
+                    </gml:LinearRing>
+                  </gml:exterior>
+                </gml:Polygon>
+              </gml:surfaceMember>
+              <gml:surfaceMember>
+                <gml:Polygon gml:id="UUID_d2373d80-6e27-4604-863d-fa730626ffcc">
+                  <gml:exterior>
+                    <gml:LinearRing gml:id="UUID_d2373d80-6e27-4604-863d-fa730626ffcc_0_">
+                      <gml:posList srsDimension="3">293421.595 5623612.293 294.37 293419.864 5623614.091 294.37 293419.864 5623614.091 291.37 293421.595 5623612.293 291.37 293421.595 5623612.293 294.37</gml:posList>
+                    </gml:LinearRing>
+                  </gml:exterior>
+                </gml:Polygon>
+              </gml:surfaceMember>
+              <gml:surfaceMember>
+                <gml:Polygon gml:id="UUID_b201ece1-17f9-4769-8b45-51e08e763dae">
+                  <gml:exterior>
+                    <gml:LinearRing gml:id="UUID_b201ece1-17f9-4769-8b45-51e08e763dae_0_">
+                      <gml:posList srsDimension="3">293421.595 5623612.293 294.37 293424.06 5623613.068 294.37 293424.598 5623615.468 294.37 293422.915 5623617.223 294.37 293420.389 5623616.431 294.37 293419.864 5623614.091 294.37 293421.595 5623612.293 294.37</gml:posList>
+                    </gml:LinearRing>
+                  </gml:exterior>
+                </gml:Polygon>
+              </gml:surfaceMember>
+              <gml:surfaceMember>
+                <gml:Polygon gml:id="UUID_5fdc05ef-025a-4212-903c-8bc3d637829d">
+                  <gml:exterior>
+                    <gml:LinearRing gml:id="UUID_5fdc05ef-025a-4212-903c-8bc3d637829d_0_">
+                      <gml:posList srsDimension="3">293419.864 5623614.091 291.37 293420.389 5623616.431 291.37 293422.915 5623617.223 291.37 293424.598 5623615.468 291.37 293424.06 5623613.068 291.37 293421.595 5623612.293 291.37 293419.864 5623614.091 291.37</gml:posList>
+                    </gml:LinearRing>
+                  </gml:exterior>
+                </gml:Polygon>
+              </gml:surfaceMember>
+            </gml:CompositeSurface>
+          </gml:exterior>
+        </gml:Solid>
+      </bldg:lod1Solid>
+      <bldg:lod1TerrainIntersection>
+        <gml:MultiCurve>
+          <gml:curveMember>
+            <gml:LineString>
+              <gml:posList srsDimension="3">293419.864 5623614.091 291.706 293420.0 5623614.697 291.676 293420.068 5623615.0 291.665 293420.088 5623615.088 291.663 293420.292 5623616.0 291.64 293420.377 5623616.377 291.634 293420.389 5623616.431 291.633</gml:posList>
+            </gml:LineString>
+          </gml:curveMember>
+          <gml:curveMember>
+            <gml:LineString>
+              <gml:posList srsDimension="3">293420.389 5623616.431 291.633 293420.45 5623616.45 291.628 293421.0 5623616.623 291.59 293421.907 5623616.907 291.545 293422.0 5623616.936 291.541 293422.204 5623617.0 291.528 293422.915 5623617.223 291.474</gml:posList>
+            </gml:LineString>
+          </gml:curveMember>
+          <gml:curveMember>
+            <gml:LineString>
+              <gml:posList srsDimension="3">293422.915 5623617.223 291.474 293423.0 5623617.134 291.473 293423.066 5623617.066 291.473 293423.129 5623617.0 291.468 293423.555 5623616.555 291.448 293424.0 5623616.092 291.426 293424.045 5623616.045 291.424 293424.088 5623616.0 291.419 293424.534 5623615.534 291.375 293424.598 5623615.468 291.37</gml:posList>
+            </gml:LineString>
+          </gml:curveMember>
+          <gml:curveMember>
+            <gml:LineString>
+              <gml:posList srsDimension="3">293424.06 5623613.068 291.407 293424.269 5623614.0 291.418 293424.347 5623614.347 291.405 293424.493 5623615.0 291.401 293424.598 5623615.468 291.37</gml:posList>
+            </gml:LineString>
+          </gml:curveMember>
+          <gml:curveMember>
+            <gml:LineString>
+              <gml:posList srsDimension="3">293421.595 5623612.293 291.554 293422.0 5623612.42 291.527 293422.613 5623612.613 291.492 293423.0 5623612.735 291.467 293423.844 5623613.0 291.421 293424.0 5623613.049 291.411 293424.06 5623613.068 291.407</gml:posList>
+            </gml:LineString>
+          </gml:curveMember>
+          <gml:curveMember>
+            <gml:LineString>
+              <gml:posList srsDimension="3">293419.864 5623614.091 291.706 293419.952 5623614.0 291.696 293419.975 5623613.975 291.693 293420.0 5623613.95 291.691 293420.466 5623613.466 291.658 293420.914 5623613.0 291.618 293420.956 5623612.956 291.614 293421.0 5623612.911 291.608 293421.447 5623612.447 291.572 293421.595 5623612.293 291.554</gml:posList>
+            </gml:LineString>
+          </gml:curveMember>
+        </gml:MultiCurve>
+      </bldg:lod1TerrainIntersection>
+    </bldg:Building>
+  </core:cityObjectMember>
+</core:CityModel>
\ No newline at end of file
diff --git a/src/test/resources/testdata/Others.proj/SimpleSolid_MSBS.gml b/src/test/resources/testdata/Others.proj/SimpleSolid_MSBS.gml
new file mode 100644
index 0000000..f5b5365
--- /dev/null
+++ b/src/test/resources/testdata/Others.proj/SimpleSolid_MSBS.gml
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="utf-8"?>
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/1.0" xmlns:gen="http://www.opengis.net/citygml/generics/1.0" xmlns:bldg="http://www.opengis.net/citygml/building/1.0" xmlns:app="http://www.opengis.net/citygml/appearance/1.0" xmlns:dem="http://www.opengis.net/citygml/relief/1.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/1.0 http://schemas.opengis.net/citygml/building/1.0/building.xsd http://www.opengis.net/citygml/appearance/1.0 http://schemas.opengis.net/citygml/appearance/1.0/appearance.xsd http://www.opengis.net/citygml/relief/1.0 http://schemas.opengis.net/citygml/relief/1.0/relief.xsd http://www.opengis.net/citygml/1.0 http://schemas.opengis.net/citygml/1.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/1.0 http://schemas.opengis.net/citygml/generics/1.0/generics.xsd">
+	<core:cityObjectMember>
+		<bldg:Building gml:id="_Simple_BD.1">
+			<bldg:lod2MultiSurface>
+				<gml:MultiSurface>
+					<gml:surfaceMember>
+						<gml:Polygon gml:id="_Simple_BD.1_PG.1ms">
+							<gml:exterior>
+								<gml:LinearRing gml:id="_Simple_BD.1_PG.1_LR.1ms">
+									<gml:posList srsDimension="3">
+										10.0 10.0 0.0
+										10.0 15.0 0.0
+										13.0 15.0 0.0
+										13.0 10.0 0.0
+										10.0 10.0 0.0
+									</gml:posList>
+								</gml:LinearRing>
+							</gml:exterior>
+						</gml:Polygon>
+					</gml:surfaceMember>
+					<gml:surfaceMember>
+						<gml:Polygon gml:id="_Simple_BD.1_PG.2ms">
+							<gml:exterior>
+								<gml:LinearRing gml:id="_Simple_BD.1_PG.2_LR.1ms">
+									<gml:posList srsDimension="3">
+										13.0 15.0 0.0
+										13.0 15.0 3.0
+										13.0 10.0 3.0
+										13.0 10.0 0.0
+										13.0 15.0 0.0
+									</gml:posList>
+								</gml:LinearRing>
+							</gml:exterior>
+						</gml:Polygon>
+					</gml:surfaceMember>
+					<gml:surfaceMember>
+						<gml:Polygon gml:id="_Simple_BD.1_PG.3ms">
+							<gml:exterior>
+								<gml:LinearRing gml:id="_Simple_BD.1_PG.3_LR.1ms">
+									<gml:posList srsDimension="3">
+										10.0 15.0 0.0
+										10.0 15.0 3.0
+										11.5 15.0 4.5
+										13.0 15.0 3.0
+										13.0 15.0 0.0
+										10.0 15.0 0.0
+									</gml:posList>
+								</gml:LinearRing>
+							</gml:exterior>
+						</gml:Polygon>
+					</gml:surfaceMember>
+					<gml:surfaceMember>
+						<gml:Polygon gml:id="_Simple_BD.1_PG.4ms">
+							<gml:exterior>
+								<gml:LinearRing gml:id="_Simple_BD.1_PG.4_LR.1ms">
+									<gml:posList srsDimension="3">
+										10.0 10.0 3.0
+										10.0 15.0 3.0
+										10.0 15.0 0.0
+										10.0 10.0 0.0
+										10.0 10.0 3.0
+									</gml:posList>
+								</gml:LinearRing>
+							</gml:exterior>
+						</gml:Polygon>
+					</gml:surfaceMember>
+					<gml:surfaceMember>
+						<gml:Polygon gml:id="_Simple_BD.1_PG.5ms">
+							<gml:exterior>
+								<gml:LinearRing gml:id="_Simple_BD.1_PG.5_LR.1ms">
+									<gml:posList srsDimension="3">
+										13.0 10.0 0.0
+										13.0 10.0 3.0
+										11.5 10.0 4.5
+										10.0 10.0 3.0
+										10.0 10.0 0.0
+										13.0 10.0 0.0
+									</gml:posList>
+								</gml:LinearRing>
+							</gml:exterior>
+						</gml:Polygon>
+					</gml:surfaceMember>
+					<gml:surfaceMember>
+						<gml:Polygon gml:id="_Simple_BD.1_PG.6ms">
+							<gml:exterior>
+								<gml:LinearRing gml:id="_Simple_BD.1_PG.6_LR.1ms">
+									<gml:posList srsDimension="3">
+										10.0 10.0 3.0
+										11.5 10.0 4.5
+										11.5 15.0 4.5
+										10.0 15.0 3.0
+										10.0 10.0 3.0
+									</gml:posList>
+								</gml:LinearRing>
+							</gml:exterior>
+						</gml:Polygon>
+					</gml:surfaceMember>
+					<gml:surfaceMember>
+						<gml:Polygon gml:id="_Simple_BD.1_PG.7ms">
+							<gml:exterior>
+								<gml:LinearRing gml:id="_Simple_BD.1_PG.7_LR.1ms">
+									<gml:posList srsDimension="3">
+										11.5 10.0 4.5
+										13.0 10.0 3.0
+										13.0 15.0 3.0
+										11.5 15.0 4.5
+										11.5 10.0 4.5
+									</gml:posList>
+								</gml:LinearRing>
+							</gml:exterior>
+						</gml:Polygon>
+					</gml:surfaceMember>
+				</gml:MultiSurface>
+			</bldg:lod2MultiSurface>
+			<bldg:boundedBy>
+				<bldg:WallSurface gml:id="_Simple_BD.1_WallSurface_1">
+					<bldg:lod2MultiSurface>
+						<gml:MultiSurface>
+							<gml:surfaceMember>
+								<gml:Polygon gml:id="_Simple_BD.1_PG.2">
+									<gml:exterior>
+										<gml:LinearRing gml:id="_Simple_BD.1_PG.2_LR.1">
+											<gml:posList srsDimension="3">
+												13.0 15.0 0.0
+												13.0 15.0 3.0
+												13.0 10.0 3.0
+												13.0 10.0 0.0
+												13.0 15.0 0.0
+											</gml:posList>
+										</gml:LinearRing>
+									</gml:exterior>
+								</gml:Polygon>
+							</gml:surfaceMember>
+						</gml:MultiSurface>
+					</bldg:lod2MultiSurface>
+				</bldg:WallSurface>
+			</bldg:boundedBy>
+			<bldg:boundedBy>
+				<bldg:WallSurface gml:id="_Simple_BD.1_WallSurface_2">
+					<bldg:lod2MultiSurface>
+						<gml:MultiSurface>
+							<gml:surfaceMember>
+								<gml:Polygon gml:id="_Simple_BD.1_PG.3">
+									<gml:exterior>
+										<gml:LinearRing gml:id="_Simple_BD.1_PG.3_LR.1">
+											<gml:posList srsDimension="3">
+												10.0 15.0 0.0
+												10.0 15.0 3.0
+												11.5 15.0 4.5
+												13.0 15.0 3.0
+												13.0 15.0 0.0
+												10.0 15.0 0.0
+											</gml:posList>
+										</gml:LinearRing>
+									</gml:exterior>
+								</gml:Polygon>
+							</gml:surfaceMember>
+						</gml:MultiSurface>
+					</bldg:lod2MultiSurface>
+				</bldg:WallSurface>
+			</bldg:boundedBy>
+			<bldg:boundedBy>
+				<bldg:WallSurface gml:id="_Simple_BD.1_WallSurface_3">
+					<bldg:lod2MultiSurface>
+						<gml:MultiSurface>
+							<gml:surfaceMember>
+								<gml:Polygon gml:id="_Simple_BD.1_PG.4">
+									<gml:exterior>
+										<gml:LinearRing gml:id="_Simple_BD.1_PG.4_LR.1">
+											<gml:posList srsDimension="3">
+												10.0 10.0 3.0
+												10.0 15.0 3.0
+												10.0 15.0 0.0
+												10.0 10.0 0.0
+												10.0 10.0 3.0
+											</gml:posList>
+										</gml:LinearRing>
+									</gml:exterior>
+								</gml:Polygon>
+							</gml:surfaceMember>
+						</gml:MultiSurface>
+					</bldg:lod2MultiSurface>
+				</bldg:WallSurface>
+			</bldg:boundedBy>
+			<bldg:boundedBy>
+				<bldg:WallSurface gml:id="_Simple_BD.1_WallSurface_4">
+					<bldg:lod2MultiSurface>
+						<gml:MultiSurface>
+							<gml:surfaceMember>
+								<gml:Polygon gml:id="_Simple_BD.1_PG.5">
+									<gml:exterior>
+										<gml:LinearRing gml:id="_Simple_BD.1_PG.5_LR.1">
+											<gml:posList srsDimension="3">
+												13.0 10.0 0.0
+												13.0 10.0 3.0
+												11.5 10.0 4.5
+												10.0 10.0 3.0
+												10.0 10.0 0.0
+												13.0 10.0 0.0
+											</gml:posList>
+										</gml:LinearRing>
+									</gml:exterior>
+								</gml:Polygon>
+							</gml:surfaceMember>
+						</gml:MultiSurface>
+					</bldg:lod2MultiSurface>
+				</bldg:WallSurface>
+			</bldg:boundedBy>
+			<bldg:boundedBy>
+				<bldg:RoofSurface gml:id="_Simple_BD.1_RoofSurface_1">
+					<bldg:lod2MultiSurface>
+						<gml:MultiSurface>
+							<gml:surfaceMember>
+								<gml:Polygon gml:id="_Simple_BD.1_PG.6">
+									<gml:exterior>
+										<gml:LinearRing gml:id="_Simple_BD.1_PG.6_LR.1">
+											<gml:posList srsDimension="3">
+												10.0 10.0 3.0
+												11.5 10.0 4.5
+												11.5 15.0 4.5
+												10.0 15.0 3.0
+												10.0 10.0 3.0
+											</gml:posList>
+										</gml:LinearRing>
+									</gml:exterior>
+								</gml:Polygon>
+							</gml:surfaceMember>
+							<gml:surfaceMember>
+								<gml:Polygon gml:id="_Simple_BD.1_PG.7">
+									<gml:exterior>
+										<gml:LinearRing gml:id="_Simple_BD.1_PG.7_LR.1">
+											<gml:posList srsDimension="3">
+												11.5 10.0 4.5
+												13.0 10.0 3.0
+												13.0 15.0 3.0
+												11.5 15.0 4.5
+												11.5 10.0 4.5
+											</gml:posList>
+										</gml:LinearRing>
+									</gml:exterior>
+								</gml:Polygon>
+							</gml:surfaceMember>
+						</gml:MultiSurface>
+					</bldg:lod2MultiSurface>
+				</bldg:RoofSurface>
+			</bldg:boundedBy>
+			<bldg:boundedBy>
+				<bldg:GroundSurface gml:id="_Simple_BD.1_GroundSurface_1">
+					<bldg:lod2MultiSurface>
+						<gml:MultiSurface>
+							<gml:surfaceMember>
+								<gml:Polygon gml:id="_Simple_BD.1_PG.1">
+									<gml:exterior>
+										<gml:LinearRing gml:id="_Simple_BD.1_PG.1_LR.1">
+											<gml:posList srsDimension="3">
+												10.0 10.0 0.0
+												10.0 15.0 0.0
+												13.0 15.0 0.0
+												13.0 10.0 0.0
+												10.0 10.0 0.0
+											</gml:posList>
+										</gml:LinearRing>
+									</gml:exterior>
+								</gml:Polygon>
+							</gml:surfaceMember>
+						</gml:MultiSurface>
+					</bldg:lod2MultiSurface>
+				</bldg:GroundSurface>
+			</bldg:boundedBy>
+		</bldg:Building>
+	</core:cityObjectMember>
+</core:CityModel>
\ No newline at end of file
diff --git a/src/test/resources/testdata/Others.proj/Valladolid_Spain_only_header.gml b/src/test/resources/testdata/Others.proj/Valladolid_Spain_only_header.gml
new file mode 100644
index 0000000..62e72e3
--- /dev/null
+++ b/src/test/resources/testdata/Others.proj/Valladolid_Spain_only_header.gml
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='utf-8'?>
+<core:CityModel xmlns:core='http://www.opengis.net/citygml/2.0' xmlns:app='http://www.opengis.net/citygml/appearance/2.0' xmlns:brid='http://www.opengis.net/citygml/bridge/2.0' xmlns:bldg='http://www.opengis.net/citygml/building/2.0' xmlns:frn='http://www.opengis.net/citygml/cityfurniture/2.0' xmlns:grp='http://www.opengis.net/citygml/cityobjectgroup/2.0' xmlns:gen='http://www.opengis.net/citygml/generics/2.0' xmlns:luse='http://www.opengis.net/citygml/landuse/2.0' xmlns:dem='http://www.opengis.net/citygml/relief/2.0' xmlns:tran='http://www.opengis.net/citygml/transportation/2.0' xmlns:tun='http://www.opengis.net/citygml/tunnel/2.0' xmlns:veg='http://www.opengis.net/citygml/vegetation/2.0' xmlns:wtr='http://www.opengis.net/citygml/waterbody/2.0' xmlns:tex='http://www.opengis.net/citygml/texturedsurface/2.0' xmlns:gml='http://www.opengis.net/gml' xmlns:xal='urn:oasis:names:tc:ciq:xsdschema:xAL:2.0' xmlns:smil20lang='http://www.w3.org/2001/SMIL20/Language' xmlns:smil20='http://www.w3.org/2001/SMIL20/' xmlns:wfs='http://www.opengis.net/wfs' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:noise='http://www.citygml.org/ade/noise_de/2.0' xsi:schemaLocation='http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/bridge/2.0 http://schemas.opengis.net/citygml/bridge/2.0/bridge.xsd http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/cityfurniture/2.0 http://schemas.opengis.net/citygml/cityfurniture/2.0/cityFurniture.xsd http://www.opengis.net/citygml/cityobjectgroup/2.0 http://schemas.opengis.net/citygml/cityobjectgroup/2.0/cityObjectGroup.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd http://www.opengis.net/citygml/landuse/2.0 http://schemas.opengis.net/citygml/landuse/2.0/landUse.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/transportation/2.0 http://schemas.opengis.net/citygml/transportation/2.0/transportation.xsd http://www.opengis.net/citygml/tunnel/2.0 http://schemas.opengis.net/citygml/tunnel/2.0/tunnel.xsd http://www.opengis.net/citygml/vegetation/2.0 http://schemas.opengis.net/citygml/vegetation/2.0/vegetation.xsd http://www.opengis.net/citygml/waterbody/2.0 http://schemas.opengis.net/citygml/waterbody/2.0/waterBody.xsd http://www.opengis.net/citygml/texturedsurface/2.0 http://schemas.opengis.net/citygml/texturedsurface/2.0/texturedSurface.xsd http://www.citygml.org/ade/noise_de/2.0 http://schemas.opengis.net/citygml/examples/2.0/ade/noise-ade/CityGML-NoiseADE.xsd '>
+<gml:name>4 DE MARZO, VALLADOLID (SPAIN) LOD2</gml:name>
+<gml:boundedBy>
+     <gml:Envelope srsName='urn:ogc:def:crs:EPSG::25830' srsDimension='3'>
+         <gml:lowerCorner>354759.866 4610778.142 680.66</gml:lowerCorner>
+         <gml:upperCorner>355145.627 4611001.435 728.36</gml:upperCorner>
+    </gml:Envelope>
+</gml:boundedBy>
+</core:CityModel>
\ No newline at end of file
-- 
GitLab