diff --git a/hub/city_model_structure/building.py b/hub/city_model_structure/building.py index 8a05ec89..b3d45617 100644 --- a/hub/city_model_structure/building.py +++ b/hub/city_model_structure/building.py @@ -27,7 +27,7 @@ class Building(CityObject): """ Building(CityObject) class """ - def __init__(self, name, surfaces, year_of_construction, function, terrains=None, city=None): + def __init__(self, name, surfaces, year_of_construction, function, usages=None, terrains=None, city=None): super().__init__(name, surfaces) self._city = city self._households = None @@ -36,7 +36,7 @@ class Building(CityObject): self._terrains = terrains self._year_of_construction = year_of_construction self._function = function - self._usages = None + self._usages = usages self._average_storey_height = None self._storeys_above_ground = None self._floor_area = None diff --git a/hub/helpers/parsers/string_usage_to_hub.py b/hub/helpers/parsers/string_usage_to_hub.py index ad58fde1..d3866ff0 100644 --- a/hub/helpers/parsers/string_usage_to_hub.py +++ b/hub/helpers/parsers/string_usage_to_hub.py @@ -6,13 +6,14 @@ class StringUsageToHub: def parse(self, usages) -> list[dict]: """ - Get the dictionary + Parse usage string in form residential-80_commercial-20 + :usages: str :return: {} """ parsed_usages = [] for usage in usages.split('_'): - usage_dict = {"usage": str(usage.split('-')[0]), "ratio": float(usage.split('-')[1])} + usage_dict = {"usage": str(usage.split('-')[0]), "ratio": float(usage.split('-')[1])/100} parsed_usages.append(usage_dict) - return usages + return parsed_usages diff --git a/hub/imports/geometry/geojson.py b/hub/imports/geometry/geojson.py index 26cfead7..419fdec2 100644 --- a/hub/imports/geometry/geojson.py +++ b/hub/imports/geometry/geojson.py @@ -163,6 +163,7 @@ class Geojson: building_name, building_aliases, function, + usages, year_of_construction, extrusion_height)) @@ -171,6 +172,7 @@ class Geojson: building_name, building_aliases, function, + usages, year_of_construction, extrusion_height)) else: @@ -196,7 +198,7 @@ class Geojson: transformed_coordinates = f'{transformed_coordinates} {transformed[self._X]} {transformed[self._Y]} 0.0' return transformed_coordinates.lstrip(' ') - def _parse_polygon(self, coordinates, building_name, building_aliases, function, year_of_construction, extrusion_height): + def _parse_polygon(self, coordinates, building_name, building_aliases, function, usages, year_of_construction, extrusion_height): surfaces = [] for polygon_coordinates in coordinates: points = igh.points_from_string( @@ -229,7 +231,7 @@ class Geojson: polygon = Polygon(coordinates) polygon.area = igh.ground_area(coordinates) surfaces[-1] = Surface(polygon, polygon) - building = Building(f'{building_name}', surfaces, year_of_construction, function) + building = Building(f'{building_name}', surfaces, year_of_construction, function, usages=usages) for alias in building_aliases: building.add_alias(alias) if extrusion_height == 0: @@ -264,13 +266,13 @@ class Geojson: polygon = Polygon(wall_coordinates) wall = Surface(polygon, polygon) surfaces.append(wall) - building = Building(f'{building_name}', surfaces, year_of_construction, function) + building = Building(f'{building_name}', surfaces, year_of_construction, function, usages=usages) for alias in building_aliases: building.add_alias(alias) building.volume = volume return building - def _parse_multi_polygon(self, polygons_coordinates, building_name, building_aliases, function, year_of_construction, extrusion_height): + def _parse_multi_polygon(self, polygons_coordinates, building_name, building_aliases, function, usages, year_of_construction, extrusion_height): surfaces = [] for coordinates in polygons_coordinates: for polygon_coordinates in coordinates: @@ -303,7 +305,7 @@ class Geojson: polygon = Polygon(coordinates) polygon.area = igh.ground_area(coordinates) surfaces[-1] = Surface(polygon, polygon) - building = Building(f'{building_name}', surfaces, year_of_construction, function) + building = Building(f'{building_name}', surfaces, year_of_construction, function, usages=usages) for alias in building_aliases: building.add_alias(alias) if extrusion_height == 0: @@ -338,7 +340,7 @@ class Geojson: polygon = Polygon(wall_coordinates) wall = Surface(polygon, polygon) surfaces.append(wall) - building = Building(f'{building_name}', surfaces, year_of_construction, function) + building = Building(f'{building_name}', surfaces, year_of_construction, function, usages=usages) for alias in building_aliases: building.add_alias(alias) building.volume = volume