diff --git a/hub/city_model_structure/building.py b/hub/city_model_structure/building.py index 65c3e417..e2a30906 100644 --- a/hub/city_model_structure/building.py +++ b/hub/city_model_structure/building.py @@ -447,9 +447,20 @@ class Building(CityObject): Identifies which building' walls adjoin the neighbouring building and saves that information in the corresponding surfaces """ - for wall in self.walls: - percentage = 0 - for building in self._neighbours: - for neighbour_wall in building.walls: - percentage += wall.shared_percentage(neighbour_wall) - wall.set_shared_percentage(percentage) + x = int((self.upper_corner[0] - self.lower_corner[0]) / 2) + y = int((self.upper_corner[1] - self.lower_corner[1]) / 2) + city_map = [['' for _ in range(y+1)] for _ in range(x+1)] + city_image = [[0 for _ in range(y+1)] for _ in range(x+1)] + for building_name in building_names: + building = city.city_object(building_name) + for ground in building.grounds: + length = len(ground.perimeter_polygon.coordinates) - 1 + for i, coordinate in enumerate(ground.perimeter_polygon.coordinates): + j = i+1 + if i == length: + j = 0 + next_coordinate = ground.perimeter_polygon.coordinates[j] + point_1 = GeometryHelper.coordinate_to_map_point(coordinate, city) + point_2 = GeometryHelper.coordinate_to_map_point(next_coordinate, city) + for x in range(point_1.x, point_2.x): + y = GeometryHelper.point_between_point(point_1, point_2, x).y diff --git a/hub/city_model_structure/building_demand/surface.py b/hub/city_model_structure/building_demand/surface.py index 3a64bf2a..285393e3 100644 --- a/hub/city_model_structure/building_demand/surface.py +++ b/hub/city_model_structure/building_demand/surface.py @@ -336,12 +336,3 @@ class Surface: :param value: None or [ThermalBoundary] """ self._associated_thermal_boundaries = value - - def shared_percentage(self, neighbour_surface): - """ - Calculate the percentage of a surface that is shared with a neighbour surface - :return: float - """ - _shared_percentage = 0 - - return _shared_percentage \ No newline at end of file diff --git a/hub/city_model_structure/city_object.py b/hub/city_model_structure/city_object.py index b5b84fcc..ab50250c 100644 --- a/hub/city_model_structure/city_object.py +++ b/hub/city_model_structure/city_object.py @@ -24,11 +24,15 @@ class CityObject: self._surfaces = surfaces self._type = None self._city_object_lower_corner = None + self._city_object_upper_corner = None self._detailed_polyhedron = None self._simplified_polyhedron = None self._min_x = ConfigurationHelper().max_coordinate self._min_y = ConfigurationHelper().max_coordinate self._min_z = ConfigurationHelper().max_coordinate + self._max_x = ConfigurationHelper().min_coordinate + self._max_y = ConfigurationHelper().min_coordinate + self._max_z = ConfigurationHelper().min_coordinate self._centroid = None self._external_temperature = dict() self._global_horizontal = dict() @@ -212,6 +216,16 @@ class CityObject: self._city_object_lower_corner = [self._min_x, self._min_y, self._min_z] return self._city_object_lower_corner + @property + def upper_corner(self): + """ + Get city object upper corner coordinates [x, y, z] + :return: [x,y,z] + """ + if self._city_object_upper_corner is None: + self._city_object_upper_corner = [self._max_x, self._max_y, self._max_z] + return self._city_object_upper_corner + @property def sensors(self) -> List[Sensor]: """ diff --git a/hub/helpers/geometry_helper.py b/hub/helpers/geometry_helper.py index f2008fb4..9d691e11 100644 --- a/hub/helpers/geometry_helper.py +++ b/hub/helpers/geometry_helper.py @@ -14,6 +14,7 @@ from hub.city_model_structure.attributes.polygon import Polygon from hub.city_model_structure.attributes.polyhedron import Polyhedron from hub.helpers.location import Location + class MapPoint: def __init__(self, x, y): self.x = int(x) @@ -22,10 +23,12 @@ class MapPoint: def __str__(self): return f'({self.x}, {self.y})' + class GeometryHelper: """ Geometry helper class """ + # todo: complete dictionary srs_transformations = { 'urn:adv:crs:ETRS89_UTM32*DE_DHHN92_NH': 'epsg:25832' } @@ -43,7 +46,7 @@ class GeometryHelper: m = (point_1.y - point_2.y)/(point_1.x - point_2.x) c = point_2.y - (m*point_2.x) y = (m*x)+c - return MapPoint(x,y) + return MapPoint(x, y) @staticmethod def city_mapping(city, building_names=None):