diff --git a/src/main/java/eu/simstadt/regionchooser/RegionExtractor.java b/src/main/java/eu/simstadt/regionchooser/RegionExtractor.java index 335700b4d55e427a8ad470e1fdd7d7e77b8a142f..40291196f9dae6e1658f683fb2e91a782edd4abf 100644 --- a/src/main/java/eu/simstadt/regionchooser/RegionExtractor.java +++ b/src/main/java/eu/simstadt/regionchooser/RegionExtractor.java @@ -62,21 +62,21 @@ static int selectRegionDirectlyFromCityGML(String wktPolygon, String srsName, Wr LOGGER.info("Parsing " + citygmlPath); //TODO: Allow citygmlPath for folders too, and iterate over gmls? citygml = new CityGmlIterator(citygmlPath); - for (CityObjectMember buildingXmlNode : citygml) { + for (CityObjectMember cityObjectNode : citygml) { if (cityObjectsCount == 0) { sb.append(replaceEnvelopeInHeader(citygml.getHeader(), poly.getEnvelopeInternal(), srsName)); } cityObjectsCount += 1; - if (buildingXmlNode.hasCoordinates()) { - Coordinate coord = new Coordinate(buildingXmlNode.x, buildingXmlNode.y); + if (cityObjectNode.hasCoordinates()) { + Coordinate coord = new Coordinate(cityObjectNode.x, cityObjectNode.y); Point point = GEOMETRY_FACTORY.createPoint(coord); if (point.within(poly)) { - if (buildingXmlNode.isBuilding()) { + if (cityObjectNode.isBuilding()) { foundBuildingsCount++; } else { foundVegetationCount++; } - sb.append(buildingXmlNode.toString()); + sb.append(cityObjectNode.toString()); } } if (cityObjectsCount % 1000 == 0) { diff --git a/src/test/java/eu/simstadt/regionchooser/fast_xml_parser/CitygmlParserTests.java b/src/test/java/eu/simstadt/regionchooser/fast_xml_parser/CitygmlParserTests.java index cebd94b6e1c4e6a90d6334c52f24fa218f38eb53..6e6aac2260ac99aa9028f48d70d523f1bddd1946 100644 --- a/src/test/java/eu/simstadt/regionchooser/fast_xml_parser/CitygmlParserTests.java +++ b/src/test/java/eu/simstadt/regionchooser/fast_xml_parser/CitygmlParserTests.java @@ -17,19 +17,19 @@ private void testNoNanInCoordinates(Path citygmlPath) throws XPathParseException { CityGmlIterator buildingXmlNodes = new CityGmlIterator(citygmlPath); - for (CityObjectMember buildingXmlNode : buildingXmlNodes) { - assertTrue(buildingXmlNode.hasCoordinates(), "Buildings should have coordinates"); - assertFalse(Double.isNaN(buildingXmlNode.x), COORDINATE_SHOULD_BE_A_DOUBLE); - assertFalse(Double.isNaN(buildingXmlNode.y), COORDINATE_SHOULD_BE_A_DOUBLE); - assertFalse(Double.isNaN(buildingXmlNode.xMax), COORDINATE_SHOULD_BE_A_DOUBLE); - assertFalse(Double.isNaN(buildingXmlNode.yMax), COORDINATE_SHOULD_BE_A_DOUBLE); - assertFalse(Double.isNaN(buildingXmlNode.xMin), COORDINATE_SHOULD_BE_A_DOUBLE); - assertFalse(Double.isNaN(buildingXmlNode.yMin), COORDINATE_SHOULD_BE_A_DOUBLE); + for (CityObjectMember cityObjectNode : buildingXmlNodes) { + assertTrue(cityObjectNode.hasCoordinates(), "Building and vegetations should have coordinates"); + assertFalse(Double.isNaN(cityObjectNode.x), COORDINATE_SHOULD_BE_A_DOUBLE); + assertFalse(Double.isNaN(cityObjectNode.y), COORDINATE_SHOULD_BE_A_DOUBLE); + assertFalse(Double.isNaN(cityObjectNode.xMax), COORDINATE_SHOULD_BE_A_DOUBLE); + assertFalse(Double.isNaN(cityObjectNode.yMax), COORDINATE_SHOULD_BE_A_DOUBLE); + assertFalse(Double.isNaN(cityObjectNode.xMin), COORDINATE_SHOULD_BE_A_DOUBLE); + assertFalse(Double.isNaN(cityObjectNode.yMin), COORDINATE_SHOULD_BE_A_DOUBLE); // Some SolitaryVegetationObjects are defined with a single point. - assertTrue(buildingXmlNode.xMax >= buildingXmlNode.x, COORDINATES_SHOULD_BE_PLAUSIBLE); - assertTrue(buildingXmlNode.yMax >= buildingXmlNode.y, COORDINATES_SHOULD_BE_PLAUSIBLE); - assertTrue(buildingXmlNode.xMin <= buildingXmlNode.x, COORDINATES_SHOULD_BE_PLAUSIBLE); - assertTrue(buildingXmlNode.yMin <= buildingXmlNode.y, COORDINATES_SHOULD_BE_PLAUSIBLE); + assertTrue(cityObjectNode.xMax >= cityObjectNode.x, COORDINATES_SHOULD_BE_PLAUSIBLE); + assertTrue(cityObjectNode.yMax >= cityObjectNode.y, COORDINATES_SHOULD_BE_PLAUSIBLE); + assertTrue(cityObjectNode.xMin <= cityObjectNode.x, COORDINATES_SHOULD_BE_PLAUSIBLE); + assertTrue(cityObjectNode.yMin <= cityObjectNode.y, COORDINATES_SHOULD_BE_PLAUSIBLE); } } @@ -38,6 +38,16 @@ public void testExtractCoordsFromStuttgart() throws XPathParseException { Path repo = Paths.get(REGION_CHOOSER_TESTDATA, "Stuttgart.proj"); Path citygmlPath = repo.resolve("Stuttgart_LOD0_LOD1_buildings_and_trees.gml"); testNoNanInCoordinates(citygmlPath); + CityGmlIterator buildingXmlNodes = new CityGmlIterator(citygmlPath); + boolean foundBuildings = false; + boolean foundTrees = false; + for (CityObjectMember cityObjectNode : buildingXmlNodes) { + boolean isBuilding = cityObjectNode.isBuilding(); + foundBuildings |= isBuilding; + foundTrees |= !isBuilding; + } + assertTrue(foundBuildings, "At least one building should have been found."); + assertTrue(foundTrees, "At least one tree should have been found."); } @Test