diff --git a/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/alkis/AlkisGreenEnricher.java b/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/alkis/AlkisGreenEnricher.java index 4344028d0cb645bec3972ac7bbada468434d68bd..b891e04764af9388caf091a2d19ec0a6de4a2d05 100644 --- a/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/alkis/AlkisGreenEnricher.java +++ b/enrich-citygml-with-greenarea/src/main/java/de/hft/stuttgart/citygml/green/alkis/AlkisGreenEnricher.java @@ -102,7 +102,7 @@ public class AlkisGreenEnricher GreenEnricher.createTransformers(cityModel); OsmData osmData = new OsmData(); -// String boundingBoxString = GreenEnricher.extractAndConvertBoundingBox(cityModel, 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)) { @@ -144,8 +144,6 @@ public class AlkisGreenEnricher System.out.println("Writing output file."); GreenEnricher.writeCityGML(cityModel, outputPath); System.out.println("Done"); - - } private static void parseAlkisData(OsmData osmData, Path alkisDataPath) throws MalformedURLException, IOException { 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..c6007704c6f8c8b0783e5418c3d4f7a1ac25245a 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 @@ -50,7 +50,7 @@ public class TreeKatasterData { if (treeHeightObject == null) { continue; } - int treeHeight = Integer.parseInt(treeHeightObject.toString()); + double treeHeight = Double.parseDouble(treeHeightObject.toString()); double crownHeight = CROWN_PERCENTAGE * treeHeight; double trunkHeight = TRUNK_PERCENTAGE * treeHeight; tree.setCrownHeight(crownHeight); @@ -65,8 +65,8 @@ public class TreeKatasterData { if (trunkCirc == null) { continue; } - int circInCm = Integer.parseInt(trunkCirc.toString()); - if (circInCm == 0) { + double circInCm = Double.parseDouble(trunkCirc.toString()); + if (circInCm <= 0.1) { circInCm = 89; } tree.setTrunkRadius(circInCm / (2 * Math.PI) / 100); 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 f66b6400778b9cb2dad6cf474297d7641db31e76..ee549f92cce0e1e56797dddad54a62e20a2e2769 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 @@ -2,6 +2,7 @@ package de.hft.stuttgart.citygml.green.osm; import java.io.IOException; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Iterator; import java.util.UUID; import org.citygml4j.core.model.core.AbstractCityObjectProperty; @@ -9,6 +10,7 @@ import org.citygml4j.core.model.core.CityModel; import org.citygml4j.core.model.vegetation.SolitaryVegetationObject; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.GeometryFactory; +import org.locationtech.jts.geom.Point; import org.locationtech.jts.geom.Polygon; import org.xmlobjects.gml.model.basictypes.Code; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; @@ -23,6 +25,10 @@ public class TreeUtils { throws IOException { TreeKatasterData katasterData = TreeKatasterData.parseTreeKatasterData(baumKatasterPath); generateTreesFromKataster(cityModel, katasterData, osmData, wktPolygon); + +// TreeKatasterData added = TreeKatasterData.parseTreeKatasterData(baumKatasterPath); +// filterDuplicateTrees(katasterData, added); +// generateTreesFromKataster(cityModel, added, osmData, wktPolygon); // TreeKatasterData katasterData2 = // TreeKatasterData.parseTreeKatasterData(Paths.get("data", @@ -36,6 +42,19 @@ public class TreeUtils { // generateTreesFromOSM(cityModel, osmData, wktPolygon); } + + private static void filterDuplicateTrees(TreeKatasterData truth, TreeKatasterData added) { + for (Iterator<Tree> iterator = added.getTrees().iterator(); iterator.hasNext();) { + Tree tp = iterator.next(); + // if another tree from kataster is within 1m ignore it + for (Tree tree : truth.getTrees()) { + if (tp.getPoint().distance(tree.getPoint()) < 1) { + iterator.remove(); + break; + } + } + } + } private static void filterDuplicateTreesFromOSM(OsmData osmData, TreeKatasterData katasterData) { for (Iterator<TreePoint> iterator = osmData.getTreePoints().iterator(); iterator.hasNext();) { @@ -80,8 +99,9 @@ public class TreeUtils { for (Tree tree : katasterData.getTrees()) { // check if tree is in area Coordinate coordinate = tree.getPoint().getCoordinate(); - if ((wktPolygon != null && !wktPolygon.contains(FACTORY.createPoint(coordinate))) - || !osmData.getBoundingBox().contains(FACTORY.createPoint(coordinate))) { + Point point = FACTORY.createPoint(coordinate); + if ((wktPolygon != null && !wktPolygon.contains(point)) + || (wktPolygon == null && !osmData.getBoundingBox().contains(point))) { continue; } 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 adeb2c3e28ac0fcafc3ff5369840b99f40e6862b..a896e0d15bf86baf246a6b0a76969c139dded5a8 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 @@ -27,7 +27,7 @@ class AlkisGreenEnricherTest 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");