Commit f45d6803 authored by Eric Duminil's avatar Eric Duminil
Browse files

Trying to define tree and forest classes

parent d7f81b4b
......@@ -10,7 +10,6 @@ from pathlib import Path
from collections import namedtuple
import folium
import kdtree
import matplotlib.pyplot as plt
import matplotlib.ticker as plticker
import numpy as np
......@@ -19,6 +18,7 @@ from pyproj import Transformer
from shapely import LineString, geometry, wkt
from shapely.ops import transform
from tree import Forest
from import_existing_trees import get_existing_trees
# TODO: Use Args
......@@ -30,8 +30,7 @@ from import_existing_trees import get_existing_trees
# From RegionChooser, or https://transfer.hft-stuttgart.de/gitlab/circulargreensimcity/circulargreensimcity/-/wikis/Fallstudien/Gromb%C3%BChl
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 = 'Trees_ideal_2_20240227/Trees_ideal_2_20240227.shp'
# WKT = "POLYGON((9.170419 48.782366, 9.170032 48.780825, 9.169904 48.780401, 9.170440 48.778733, 9.176877 48.780118, 9.177006 48.781193, 9.177049 48.782564, 9.176298 48.782593, 9.175440 48.782409, 9.174646 48.783399, 9.170419 48.782366))"
EXISTING_TREES = 'existing_trees/Trees_ideal_2_20240227.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
......@@ -217,7 +216,7 @@ def main(wkt_polygon, epsg_id, tree_distance, min_distance, import_tree_shp):
if import_tree_shp:
existing_trees = get_existing_trees(import_tree_shp)
else:
existing_trees = []
existing_trees = Forest()
to_local = Transformer.from_crs("EPSG:4326", f"EPSG:{epsg_id}", always_xy=True)
......
import geopandas as gpd
from tree import Tree, Forest
def get_existing_trees(shp_input):
print(f"Importing {shp_input}")
df = gpd.read_file(shp_input)
coords = [(p.x, p.y) for p in df.geometry]
return coords
trees = [Tree(p.x, p.y) for p in df.geometry]
return Forest(trees)
if __name__ == "__main__":
print(repr(get_existing_trees('existing_trees/Trees_ideal_2_20240227.shp')))
from dataclasses import dataclass
import kdtree
@dataclass
class Tree:
x: float
y: float
z: float = 0
height: float = None
radius: float = None
description: str = None
type: str = None
def __len__(self):
return 2 # x & y
def __getitem__(self, i):
return [self.x, self.y][i]
class Forest:
def __init__(self, existing_trees=[]):
if existing_trees:
self.kd_tree = kdtree.create(existing_trees, dimensions=2)
else:
self.kd_tree = kdtree.create([(0, 0)], dimensions=2)
self.trees = existing_trees
def __str__(self):
return f"Forest with {len(self.trees)} trees."
def __repr__(self):
return "\n".join([str(self)] + [str(tree) for tree in self.trees])
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment