From 267d07c70626751bacc9d3d9223f111c1fa9c50d Mon Sep 17 00:00:00 2001 From: Eric Duminil <eric.duminil@gmail.com> Date: Tue, 28 Nov 2023 13:15:47 +0100 Subject: [PATCH] Testing that trees are found too. --- .../regionchooser/RegionExtractor.java | 10 +++--- .../fast_xml_parser/CitygmlParserTests.java | 34 ++++++++++++------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/main/java/eu/simstadt/regionchooser/RegionExtractor.java b/src/main/java/eu/simstadt/regionchooser/RegionExtractor.java index 335700b..4029119 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 cebd94b..6e6aac2 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 -- GitLab