diff --git a/python_scripts/add_trees_to_open_street_map/add_trees.py b/python_scripts/add_trees_to_open_street_map/add_trees.py index 47ec8c69c42a5a30a2fd9c79807ef31ef9dd2ed9..8442b290f672b558a9a19ee0b91cefcad731ac3d 100644 --- a/python_scripts/add_trees_to_open_street_map/add_trees.py +++ b/python_scripts/add_trees_to_open_street_map/add_trees.py @@ -31,6 +31,7 @@ from import_existing_trees import get_existing_forest WKT = "POLYGON((9.947021 49.803063, 9.947011 49.800917, 9.955025 49.800810, 9.955110 49.803019, 9.947021 49.803063))" # Replace with None if no existing tree should be imported EXISTING_TREES = 'existing_trees/Trees_ideal_2_20240227.shp' +# EXISTING_TREES = 'existing_trees/baumkataster/Baum.shp' # Fellbach # WKT = "POLYGON((9.271353 48.811327, 9.271911 48.809010, 9.272147 48.807187, 9.275838 48.807173, 9.275602 48.806749, 9.276138 48.806325, 9.277683 48.806424, 9.277319 48.812514, 9.275581 48.811991, 9.271353 48.811327))" EPSG_ID = 25832 @@ -139,7 +140,7 @@ def place_trees(forest, ways, region, to_local, tree_distance, min_distance_2) - color='#DFFF00', type='Fake Tree', description='Tilia tomentosa', - radius=3 + diameter=6 ) return forest @@ -147,7 +148,7 @@ def place_trees(forest, ways, region, to_local, tree_distance, min_distance_2) - def plot_trees(bounds, forest, tree_distance) -> None: print("Exporting diagram...") - tree_xs, tree_ys, colors = forest.xs_ys_cs + tree_xs, tree_ys, colors = forest.xs_ys_c6 plt.scatter(tree_xs, tree_ys, s=2, c=colors) plt.grid(True) @@ -155,6 +156,7 @@ def plot_trees(bounds, forest, tree_distance) -> None: plt.gcf().set_size_inches(15, 10) plt.savefig( SCRIPT_DIR / f"{get_basename(bounds)}.png", bbox_inches='tight', dpi=300) + print(" DONE!") def export_map(bounds, forest, epsg_id) -> None: @@ -167,7 +169,7 @@ def export_map(bounds, forest, epsg_id) -> None: lon, lat = to_wgs84.transform(tree.x, tree.y) folium.Circle( location=[lat, lon], - radius=tree.radius or 2, # [m], when defined + radius=tree.radius, # [m] color="black", weight=1, fill_opacity=0.9, @@ -205,6 +207,11 @@ def export_csv(bounds, forest, wkt_polygon, tree_distance, min_distance, epsg_id print(" DONE!") +def export_shapefile(bounds, forest, tree_distance, epsg_id): + print("Exporting shapefile") + print(" DONE!") + + def main(wkt_polygon, epsg_id, tree_distance, min_distance, import_tree_shp) -> None: region, bounds = load_region(wkt_polygon) ways = get_osm_roads(bounds) @@ -224,8 +231,8 @@ def main(wkt_polygon, epsg_id, tree_distance, min_distance, import_tree_shp) -> plot_trees(bounds, forest, tree_distance) export_map(bounds, forest, epsg_id) - export_csv(bounds, forest, wkt_polygon, - tree_distance, min_distance, epsg_id) + export_csv(bounds, forest, wkt_polygon, tree_distance, min_distance, epsg_id) + export_shapefile(bounds, forest, tree_distance, epsg_id) if __name__ == "__main__": diff --git a/python_scripts/add_trees_to_open_street_map/import_existing_trees.py b/python_scripts/add_trees_to_open_street_map/import_existing_trees.py index a6d78831f02740fb4af740d3dcbccaffd065d9ae..883b7a1b20405d1fcb82c6f620a9a791ab11b39b 100644 --- a/python_scripts/add_trees_to_open_street_map/import_existing_trees.py +++ b/python_scripts/add_trees_to_open_street_map/import_existing_trees.py @@ -9,8 +9,9 @@ def get_existing_forest(shp_input): point = tree_row.geometry trees.append(Tree(point.x, point.y, description=tree_row.Bezeichnun, - radius=tree_row.Kroneradi, - type=tree_row.Baumart + diameter=tree_row.Kronenbrei, + type=tree_row.Baumart, + trunk_diameter=tree_row.Stammumfan )) return Forest(trees) diff --git a/python_scripts/add_trees_to_open_street_map/tree.py b/python_scripts/add_trees_to_open_street_map/tree.py index a81895061834f4cd1c39dac8764a51991d3f04a1..2dd775a77dc928b8327a290c9146b61fb141c2e5 100644 --- a/python_scripts/add_trees_to_open_street_map/tree.py +++ b/python_scripts/add_trees_to_open_street_map/tree.py @@ -7,9 +7,10 @@ import kdtree class Tree: x: float y: float + diameter: float z: float = 0 height: float = None - radius: float = None + trunk_diameter: float = None type: str = None description: str = '?' color: str = 'green' @@ -20,6 +21,10 @@ class Tree: def __getitem__(self, i): return [self.x, self.y][i] + @property + def radius(self): + return self.diameter / 2 + def __str__(self): return f"{self.type} ({self.description}), {self.radius or '?'} m (X={self.x:.1f}, Y={self.y:.1f})"