diff --git a/src/eu/simstadt/regionchooser/citygml_parser/BuildingXmlNode.java b/src/eu/simstadt/regionchooser/citygml_parser/BuildingXmlNode.java index d19ad0c2f5ac7126fc21c42de9f3a79f6b69f553..d37a761265f546dcd4bd28aa6a0f918eff2f71d7 100644 --- a/src/eu/simstadt/regionchooser/citygml_parser/BuildingXmlNode.java +++ b/src/eu/simstadt/regionchooser/citygml_parser/BuildingXmlNode.java @@ -37,7 +37,7 @@ public Point getCenterOfMass() throws XPathParseException, NumberFormatException int coordinatesOffset = (int) offsetAndLength; int coordinatesLength = (int) (offsetAndLength >> 32); String posList = navigator.toRawString(coordinatesOffset, coordinatesLength); - String[] coordinates = posList.split(" "); + String[] coordinates = posList.trim().split("\\s+"); for (int k = 0; k < coordinates.length; k = k + 3) { coordinatesCount++; xTotal += Double.valueOf(coordinates[k]); diff --git a/test/eu/simstadt/regionchooser/test/RegionExtractorTests.java b/test/eu/simstadt/regionchooser/test/RegionExtractorTests.java index b75b2db6bc1c42c167e5f9a6da8dc60fdadc253b..d8037f2890de4cdc689f2770a64c0d45cf41b836 100644 --- a/test/eu/simstadt/regionchooser/test/RegionExtractorTests.java +++ b/test/eu/simstadt/regionchooser/test/RegionExtractorTests.java @@ -67,4 +67,17 @@ public void testExtract0BuildingsWithWrongCoordinates() throws Throwable { assertTrue(emptyGMLString.contains("<CityModel")); // Header assertTrue(emptyGMLString.contains("</CityModel")); // Footer } + + @Test + public void testExtract0BuildingsFromWeirdGML() throws Throwable { + //NOTE: Small region, with too many spaces between coordinates + String wktPolygon = "POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))"; + Path repo = Paths.get("../TestRepository"); + Path citygmlPath = repo.resolve("NewYork.proj/broken_nyc_lod2.gml"); + String emptyGMLString = RegionExtractor.selectRegionDirectlyFromCityGML(citygmlPath, wktPolygon, "EPSG:32118") + .toString(); + assertEquals(countRegexMatches(emptyGMLString, "<(core:)?cityObjectMember"), 0); + assertTrue(emptyGMLString.contains("<core:CityModel")); // Header + assertTrue(emptyGMLString.contains("</core:CityModel")); // Footer + } }