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 8ee84bc889eebc8f37b15e1e83e0d234218ff981..f51b46eb745ee927a68b8728e10e633545b437bd 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 @@ -8,7 +8,6 @@ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; @@ -122,32 +121,32 @@ public class GreenEnricher createTransformers(cityModel); - OsmData osmData = new OsmData(); - 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 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); - - System.out.println("Fit data in bounding box"); - fitToBoundingBox(osmData); - - System.out.println("Filter intersecting areas"); - List greenAreas = osmData.getGreenAreas(); - removeDuplicateAreas(greenAreas); - - convertGreenAreasToCityGML(cityModel, greenAreas); - convertWaterAreasToCityGML(cityModel, osmData); + // OsmData osmData = new OsmData(); + // 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 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); + // + // System.out.println("Fit data in bounding box"); + // fitToBoundingBox(osmData); + // + // System.out.println("Filter intersecting areas"); + // List greenAreas = osmData.getGreenAreas(); + // removeDuplicateAreas(greenAreas); + // + // convertGreenAreasToCityGML(cityModel, greenAreas); + // convertWaterAreasToCityGML(cityModel, osmData); // trees - TreeUtils.insertTrees(cityModel, osmData, baumKatasterPath); + TreeUtils.insertTrees(cityModel, null, baumKatasterPath); clampToGround(cityModel); diff --git a/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/osm/TreeKatasterData.java b/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/osm/TreeKatasterData.java index 7d4706c8d27900ddd188a7b131a39093f7bfc58e..6053c35d4594cc2155829d0cbf1c3e0928637686 100644 --- a/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/osm/TreeKatasterData.java +++ b/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/osm/TreeKatasterData.java @@ -7,7 +7,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; - import org.geotools.data.DataStore; import org.geotools.data.DataStoreFinder; import org.geotools.data.FeatureSource; @@ -17,13 +16,15 @@ import org.locationtech.jts.geom.Point; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; -public class TreeKatasterData { - + +public class TreeKatasterData +{ + public static final double TRUNK_PERCENTAGE = 0.2; public static final double CROWN_PERCENTAGE = 1 - TRUNK_PERCENTAGE; - + private List trees; - + public static TreeKatasterData parseTreeKatasterData(Path path) throws IOException { TreeKatasterData result = new TreeKatasterData(); Map readParameters = new HashMap<>(); @@ -50,7 +51,7 @@ public class TreeKatasterData { if (treeHeightObject == null) { continue; } - int treeHeight = Integer.parseInt(treeHeightObject.toString()); + float treeHeight = Float.parseFloat(treeHeightObject.toString()); double crownHeight = CROWN_PERCENTAGE * treeHeight; double trunkHeight = TRUNK_PERCENTAGE * treeHeight; tree.setCrownHeight(crownHeight); @@ -61,21 +62,14 @@ public class TreeKatasterData { continue; } tree.setCrownRadius(Float.parseFloat(crownWidth.toString()) / 2); - Object trunkCirc = feature.getAttribute("Stammumfan"); - if (trunkCirc == null) { - continue; - } - int circInCm = Integer.parseInt(trunkCirc.toString()); - if (circInCm == 0) { - circInCm = 89; - } + int circInCm = 50; tree.setTrunkRadius(circInCm / (2 * Math.PI) / 100); result.getTrees().add(tree); } } return result; } - + public List getTrees() { if (trees == null) { trees = new ArrayList<>(); diff --git a/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/osm/TreeUtils.java b/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/osm/TreeUtils.java index cf7c90f29af944412d116e2f8c62cf7bba57557c..7f62cc0e17d4fc341b0cef640cb2ecd14ac043ff 100644 --- a/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/osm/TreeUtils.java +++ b/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/osm/TreeUtils.java @@ -25,10 +25,10 @@ public class TreeUtils // generateTreesFromKataster(cityModel, katasterData2); // All kataster trees are taken, osm trees are removed - filterDuplicateTreesFromOSM(osmData, katasterData); + // filterDuplicateTreesFromOSM(osmData, katasterData); // filterDuplicateTreesFromOSM(osmData, katasterData2); - generateTreesFromOSM(cityModel, osmData); + // generateTreesFromOSM(cityModel, osmData); } 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 5f32d6e39142765dc3508a64ddb038e57ae968aa..d0572fb3ce5377fd8fb8cc946fa8ff7fc114b469 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,42 +1,44 @@ 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; import de.hft.stuttgart.citygml.green.osm.GreenEnricher; class AlkisGreenEnricherTest { - @Test - void testAlkisGreen() throws Exception { - //NOTE: From https://transfer.hft-stuttgart.de/gitlab/circulargreensimcity/circulargreensimcity/-/wikis/Fallstudien/Gromb%C3%BChl - Path outputGML = Paths.get("data/Grombühl_v4_case_study_alkis_test.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 - //NOTE: From https://transfer.hft-stuttgart.de/gitlab/circulargreensimcity/circulargreensimcity/-/issues/26#note_6544 - "data/Trees/Trees_realisticScenario_20240201.shp", // Added trees, in Baumkatasterformat, - "alkis_test" // Output GML suffix - }; - AlkisGreenEnricher.main(args); - assertTrue(Files.exists(outputGML)); - } + // @Test + // void testAlkisGreen() throws Exception { + // //NOTE: From https://transfer.hft-stuttgart.de/gitlab/circulargreensimcity/circulargreensimcity/-/wikis/Fallstudien/Gromb%C3%BChl + // Path outputGML = Paths.get("data/Grombühl_v4_case_study_alkis_test.gml"); + // Files.deleteIfExists(outputGML); + // assertFalse(Files.exists(outputGML)); + // String[] args = new String[] { "data/Grombühl_BA_IST.gml", // Input GML + // "data/tn_09663/Nutzung.shp", // ALKIS Data + // //NOTE: From https://transfer.hft-stuttgart.de/gitlab/circulargreensimcity/circulargreensimcity/-/issues/26#note_6544 + // "data/Trees/Trees_realisticScenario_20240201.shp", // Added trees, in Baumkatasterformat, + // "alkis_test" // Output GML suffix + // }; + // AlkisGreenEnricher.main(args); + // assertTrue(Files.exists(outputGML)); + // } @Test void testGreen() throws Exception { - Path outputGML = Paths.get("data/Grombühl_v4_case_study_enrich_test.gml"); - Files.deleteIfExists(outputGML); - assertFalse(Files.exists(outputGML)); - String[] args = new String[] { "data/Grombühl_v4_case_study.gml", // Input GML - "data/Trees/Trees_realisticScenario_20240201.shp", // Added trees, in Baumkatasterformat, - "enrich_test" // Output GML suffix + // Path outputGML = Paths.get("data/Grombühl_BA_IST_.gml"); + // Files.deleteIfExists(outputGML); + // assertFalse(Files.exists(outputGML)); + String[] args = new String[] { "data/Grafenbühl_IST.gml", // Input GML + "data/Baum_Grafenbühl_Ist.shp", // Added trees, in Baumkatasterformat, + // "data/Trees/Trees_realisticScenario_20240201.shp", // Added trees, in Baumkatasterformat, + "plus_trees" // Output GML suffix }; GreenEnricher.main(args); - assertTrue(Files.exists(outputGML)); + // args = new String[] { "data/Grombühl_BA_IST_plus_private.gml", // Input GML + // "data/Baum_oeffentlich_Neu_Ist.shp", // Added trees, in Baumkatasterformat, + // // "data/Trees/Trees_realisticScenario_20240201.shp", // Added trees, in Baumkatasterformat, + // "plus_public" // Output GML suffix + // }; + // GreenEnricher.main(args); + // assertTrue(Files.exists(outputGML)); } }