diff --git a/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/osm/GreenEnricher.java b/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/osm/GreenEnricher.java index 9e3f2ac94d6f7de6a2b3dc345427dc8af5cd5bd1..8ee84bc889eebc8f37b15e1e83e0d234218ff981 100644 --- a/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/osm/GreenEnricher.java +++ b/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/osm/GreenEnricher.java @@ -116,16 +116,22 @@ public class GreenEnricher InterruptedException, ParserConfigurationException, CityGMLWriteException, JAXBException { System.out.println("Reading CityGML file"); Path inFile = Paths.get(args[0]); + Path baumKatasterPath = Paths.get(args[1]); + String outputSuffix = args[2]; CityModel cityModel = readCityGml(inFile); createTransformers(cityModel); OsmData osmData = new OsmData(); - String boundingBoxString = extractAndConvertBoundingBox(cityModel, osmData); - // HttpResponse<String> response = getOsmData(boundingBoxString); - // Files.write(Path.of("osm_response.xml"), response.body().getBytes(StandardCharsets.UTF_8)); - // String osmResponse = response.body(); - String osmResponse = Files.readString(Paths.get("data", "osm_response.xml")); + String boundingBoxString = GreenEnricher.extractAndConvertBoundingBox(cityModel, osmData); + String boundingBoxBasename = boundingBoxString.replace(",", "__").replace('.', '_'); + Path osmCache = Paths.get("data", "cache", "osm_response_" + boundingBoxBasename + ".xml"); + if (!Files.exists(osmCache)) { + System.out.println("Downloading OSM data for " + boundingBoxString); + HttpResponse<String> response = GreenEnricher.getOsmData(boundingBoxString); + Files.write(osmCache, response.body().getBytes(StandardCharsets.UTF_8)); + } + String osmResponse = Files.readString(osmCache); System.out.println("Parsing OSM response"); parseOsmResponse(osmResponse, osmData); @@ -141,13 +147,13 @@ public class GreenEnricher convertWaterAreasToCityGML(cityModel, osmData); // trees - TreeUtils.insertTrees(cityModel, osmData); + TreeUtils.insertTrees(cityModel, osmData, baumKatasterPath); clampToGround(cityModel); String inputString = inFile.getFileName().toString(); String inputPathWithoutFileEnding = inputString.substring(0, inputString.lastIndexOf('.')); - Path outputPath = Paths.get("data", inputPathWithoutFileEnding + "_with_osm_greens.gml"); + Path outputPath = Paths.get("data", inputPathWithoutFileEnding + "_" + outputSuffix + ".gml"); System.out.println("Writing output file."); writeCityGML(cityModel, outputPath); System.out.println("Done"); diff --git a/enrich-citygml-with-greenarea/src/test/java/de/hft/stuttgart/citygml/green/alkis/AlkisGreenEnricherTest.java b/enrich-citygml-with-greenarea/src/test/java/de/hft/stuttgart/citygml/green/alkis/AlkisGreenEnricherTest.java index 2b59f93336468ee4f2175ae31782b71475c76f84..b5d5b2f81b6ad372f587ec7786afe39d82ed7b50 100644 --- a/enrich-citygml-with-greenarea/src/test/java/de/hft/stuttgart/citygml/green/alkis/AlkisGreenEnricherTest.java +++ b/enrich-citygml-with-greenarea/src/test/java/de/hft/stuttgart/citygml/green/alkis/AlkisGreenEnricherTest.java @@ -1,5 +1,10 @@ package de.hft.stuttgart.citygml.green.alkis; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import org.junit.jupiter.api.Test; @@ -7,11 +12,15 @@ class AlkisGreenEnricherTest { @Test void testAlkisGreen() throws Exception { + Path outputGML = Paths.get("data/Grombühl_v4_case_study_with_alkis_greens_realistic.gml"); + Files.deleteIfExists(outputGML); + assertFalse(Files.exists(outputGML)); String[] args = new String[] { "data/Grombühl_v4_case_study.gml", // Input GML "data/tn_09663/Nutzung.shp", // ALKIS Data "data/Trees/Trees_realisticScenario_20240201.shp", // Added trees, in Baumkatasterformat, "with_alkis_greens_realistic" // Output GML suffix }; AlkisGreenEnricher.main(args); + assertTrue(Files.exists(outputGML)); } }