Merge branch 'main' into dhw
# Conflicts: # hub/config/configuration.ini # hub/helpers/configuration_helper.py # hub/helpers/data/hft_function_to_hub_function.py
This commit is contained in:
commit
78f3921447
@ -152,6 +152,10 @@ class Polygon:
|
|||||||
self._area += np.linalg.norm(np.cross(ab, ac)) / 2
|
self._area += np.linalg.norm(np.cross(ab, ac)) / 2
|
||||||
return self._area
|
return self._area
|
||||||
|
|
||||||
|
@area.setter
|
||||||
|
def area(self, value):
|
||||||
|
self._area = value
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def normal(self) -> np.ndarray:
|
def normal(self) -> np.ndarray:
|
||||||
"""
|
"""
|
||||||
|
@ -459,6 +459,7 @@ class City:
|
|||||||
for surface in city_object.surfaces:
|
for surface in city_object.surfaces:
|
||||||
radiation = surface.global_irradiance
|
radiation = surface.global_irradiance
|
||||||
if 'year' not in radiation and 'month' not in radiation:
|
if 'year' not in radiation and 'month' not in radiation:
|
||||||
|
|
||||||
continue
|
continue
|
||||||
elif "year" in radiation:
|
elif "year" in radiation:
|
||||||
building_radiation += radiation["year"].iloc[0]
|
building_radiation += radiation["year"].iloc[0]
|
||||||
@ -468,11 +469,11 @@ class City:
|
|||||||
if building_radiation < min_radiation:
|
if building_radiation < min_radiation:
|
||||||
min_radiation = building_radiation
|
min_radiation = building_radiation
|
||||||
selected_city_object = city_object
|
selected_city_object = city_object
|
||||||
# merge the city object with the minimum radiation
|
# merge the city object with the minimum radiation
|
||||||
if selected_city_object is not None:
|
if selected_city_object is not None:
|
||||||
_merge_city.add_city_object(selected_city_object)
|
_merge_city.add_city_object(selected_city_object)
|
||||||
else:
|
else:
|
||||||
_merge_city.add_city_object(building)
|
_merge_city.add_city_object(building)
|
||||||
return _merge_city
|
return _merge_city
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -34,6 +34,7 @@ class CityObject:
|
|||||||
self._max_y = ConfigurationHelper().min_coordinate
|
self._max_y = ConfigurationHelper().min_coordinate
|
||||||
self._max_z = ConfigurationHelper().min_coordinate
|
self._max_z = ConfigurationHelper().min_coordinate
|
||||||
self._centroid = None
|
self._centroid = None
|
||||||
|
self._volume = None
|
||||||
self._external_temperature = dict()
|
self._external_temperature = dict()
|
||||||
self._ground_temperature = dict()
|
self._ground_temperature = dict()
|
||||||
self._global_horizontal = dict()
|
self._global_horizontal = dict()
|
||||||
@ -64,7 +65,13 @@ class CityObject:
|
|||||||
Get city object volume in cubic meters
|
Get city object volume in cubic meters
|
||||||
:return: float
|
:return: float
|
||||||
"""
|
"""
|
||||||
return self.simplified_polyhedron.volume
|
if self._volume is None:
|
||||||
|
self._volume = self.simplified_polyhedron.volume
|
||||||
|
return self._volume
|
||||||
|
|
||||||
|
@volume.setter
|
||||||
|
def volume(self, value):
|
||||||
|
self._volume = value
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def detailed_polyhedron(self) -> Polyhedron:
|
def detailed_polyhedron(self) -> Polyhedron:
|
||||||
|
@ -18,5 +18,7 @@ convective_heat_transfer_coefficient_exterior = 20
|
|||||||
soil_conductivity = 3
|
soil_conductivity = 3
|
||||||
#m
|
#m
|
||||||
soil_thickness = 0.5
|
soil_thickness = 0.5
|
||||||
|
short_wave_reflectance = 0.3
|
||||||
|
|
||||||
#C
|
#C
|
||||||
cold_water_temperature = 10
|
cold_water_temperature = 10
|
@ -7,6 +7,8 @@ Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
|||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
import sys
|
||||||
|
from hub.hub_logger import logger
|
||||||
|
|
||||||
from hub.exports.formats.insel import Insel
|
from hub.exports.formats.insel import Insel
|
||||||
from hub.imports.weather.helpers.weather import Weather
|
from hub.imports.weather.helpers.weather import Weather
|
||||||
@ -38,6 +40,10 @@ class InselMonthlyEnergyBalance(Insel):
|
|||||||
if building.internal_zones is not None:
|
if building.internal_zones is not None:
|
||||||
for internal_zone in building.internal_zones:
|
for internal_zone in building.internal_zones:
|
||||||
if internal_zone.thermal_zones is None:
|
if internal_zone.thermal_zones is None:
|
||||||
|
logger.error(f'Building {building.name} has missing values. '
|
||||||
|
f'Monthly Energy Balance cannot be processed\n')
|
||||||
|
sys.stderr.write(f'Building {building.name} has missing values. '
|
||||||
|
f'Monthly Energy Balance cannot be processed\n')
|
||||||
break
|
break
|
||||||
self._contents.append(
|
self._contents.append(
|
||||||
self.generate_meb_template(building, output_path, self._radiation_calculation_method,self._weather_format)
|
self.generate_meb_template(building, output_path, self._radiation_calculation_method,self._weather_format)
|
||||||
|
@ -71,7 +71,7 @@ class ExportsFactory:
|
|||||||
Export the city geometry to obj with grounded coordinates
|
Export the city geometry to obj with grounded coordinates
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
return Obj(self._city, self._path).to_ground_points()
|
return Obj(self._city, self._path)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _sra(self):
|
def _sra(self):
|
||||||
|
@ -11,24 +11,51 @@ from hub.exports.formats.triangular import Triangular
|
|||||||
from hub.imports.geometry_factory import GeometryFactory
|
from hub.imports.geometry_factory import GeometryFactory
|
||||||
|
|
||||||
|
|
||||||
class Obj(Triangular):
|
class Obj:
|
||||||
"""
|
"""
|
||||||
Export to obj format
|
Export to obj format
|
||||||
"""
|
"""
|
||||||
def __init__(self, city, path):
|
def __init__(self, city, path):
|
||||||
super().__init__(city, path, 'obj')
|
self._city = city
|
||||||
|
self._path = path
|
||||||
|
self._export()
|
||||||
|
|
||||||
|
def _to_vertex(self, coordinate):
|
||||||
|
x = coordinate[0] - self._city.lower_corner[0]
|
||||||
|
y = coordinate[1] - self._city.lower_corner[1]
|
||||||
|
z = coordinate[2] - self._city.lower_corner[2]
|
||||||
|
return f'v {x} {y} {z}\n'
|
||||||
|
|
||||||
|
def _export(self):
|
||||||
|
if self._city.name is None:
|
||||||
|
self._city.name = 'unknown_city'
|
||||||
|
file_name = self._city.name + '.obj'
|
||||||
|
file_path = (Path(self._path).resolve() / file_name).resolve()
|
||||||
|
vertices = {}
|
||||||
|
with open(file_path, 'w') as obj:
|
||||||
|
obj.write("# cerc-hub export\n")
|
||||||
|
vertex_index = 0
|
||||||
|
faces = []
|
||||||
|
for building in self._city.buildings:
|
||||||
|
obj.write(f'# building {building.name}\n')
|
||||||
|
for surface in building.surfaces:
|
||||||
|
obj.write(f'# surface {surface.name}\n')
|
||||||
|
face = 'f '
|
||||||
|
for coordinate in surface.perimeter_polygon.coordinates:
|
||||||
|
vertex = self._to_vertex(coordinate)
|
||||||
|
if vertex not in vertices.keys():
|
||||||
|
vertex_index += 1
|
||||||
|
vertices[vertex] = vertex_index
|
||||||
|
current = vertex_index
|
||||||
|
obj.write(vertex)
|
||||||
|
else:
|
||||||
|
current = vertices[vertex]
|
||||||
|
|
||||||
|
face = f'{face} {current}'
|
||||||
|
|
||||||
|
faces.append(f'{face} {face.split(" ")[1]}\n')
|
||||||
|
obj.writelines(faces)
|
||||||
|
faces = []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def to_ground_points(self):
|
|
||||||
"""
|
|
||||||
Move closer to the origin
|
|
||||||
"""
|
|
||||||
file_name_in = self._city.name + '.' + self._triangular_format
|
|
||||||
file_name_out = self._city.name + '_ground.' + self._triangular_format
|
|
||||||
file_path_in = (Path(self._path).resolve() / file_name_in).resolve()
|
|
||||||
file_path_out = (Path(self._path).resolve() / file_name_out).resolve()
|
|
||||||
obj = GeometryFactory('obj', path=file_path_in)
|
|
||||||
scene = obj.scene
|
|
||||||
scene.rezero()
|
|
||||||
obj_file = trimesh.exchange.obj.export_obj(scene)
|
|
||||||
with open(file_path_out, 'w') as file:
|
|
||||||
file.write(obj_file)
|
|
||||||
|
@ -8,6 +8,7 @@ import xmltodict
|
|||||||
|
|
||||||
from hub.imports.weather_factory import WeatherFactory
|
from hub.imports.weather_factory import WeatherFactory
|
||||||
import hub.helpers.constants as cte
|
import hub.helpers.constants as cte
|
||||||
|
from hub.helpers.configuration_helper import ConfigurationHelper
|
||||||
|
|
||||||
|
|
||||||
class SimplifiedRadiosityAlgorithm:
|
class SimplifiedRadiosityAlgorithm:
|
||||||
@ -88,10 +89,15 @@ class SimplifiedRadiosityAlgorithm:
|
|||||||
'@Simulate': f'{simulate}'
|
'@Simulate': f'{simulate}'
|
||||||
}
|
}
|
||||||
walls, roofs, floors = [], [], []
|
walls, roofs, floors = [], [], []
|
||||||
|
default_short_wave_reflectance = ConfigurationHelper().short_wave_reflectance
|
||||||
for surface in building.surfaces:
|
for surface in building.surfaces:
|
||||||
|
if surface.short_wave_reflectance is None:
|
||||||
|
short_wave_reflectance = default_short_wave_reflectance
|
||||||
|
else:
|
||||||
|
short_wave_reflectance = surface.short_wave_reflectance
|
||||||
surface_dict = {
|
surface_dict = {
|
||||||
'@id': f'{surface.id}',
|
'@id': f'{surface.id}',
|
||||||
'@ShortWaveReflectance': f'{surface.short_wave_reflectance}'
|
'@ShortWaveReflectance': f'{short_wave_reflectance}'
|
||||||
}
|
}
|
||||||
for point_index, point in enumerate(surface.perimeter_polygon.coordinates):
|
for point_index, point in enumerate(surface.perimeter_polygon.coordinates):
|
||||||
point = self._correct_point(point)
|
point = self._correct_point(point)
|
||||||
|
@ -139,6 +139,14 @@ class ConfigurationHelper:
|
|||||||
"""
|
"""
|
||||||
return self._config.getfloat('buildings', 'soil_thickness').real
|
return self._config.getfloat('buildings', 'soil_thickness').real
|
||||||
|
|
||||||
|
@property
|
||||||
|
def short_wave_reflectance(self) -> float:
|
||||||
|
"""
|
||||||
|
Get configured short wave reflectance for surfaces that don't have construction assigned
|
||||||
|
:return: 0.3
|
||||||
|
"""
|
||||||
|
return self._config.getfloat('buildings', 'short_wave_reflectance').real
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def cold_water_temperature(self) -> float:
|
def cold_water_temperature(self) -> float:
|
||||||
"""
|
"""
|
||||||
|
@ -8,6 +8,7 @@ Project Coder Guille Gutierrez Guillermo.GutierrezMorote@concordia.ca
|
|||||||
|
|
||||||
import hub.helpers.constants as cte
|
import hub.helpers.constants as cte
|
||||||
|
|
||||||
|
|
||||||
class AlkisFunctionToHubFunction:
|
class AlkisFunctionToHubFunction:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -12,19 +12,19 @@ class HftFunctionToHubFunction:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._dictionary = {
|
self._dictionary = {
|
||||||
'residential': cte.RESIDENTIAL,
|
'residential': cte.RESIDENTIAL,
|
||||||
'single family house': cte.SINGLE_FAMILY_HOUSE,
|
'single family house': cte.SINGLE_FAMILY_HOUSE,
|
||||||
'multifamily house': cte.MULTI_FAMILY_HOUSE,
|
'multifamily house': cte.MULTI_FAMILY_HOUSE,
|
||||||
'hotel': cte.HOTEL,
|
'hotel': cte.HOTEL,
|
||||||
'hospital': cte.HOSPITAL,
|
'hospital': cte.HOSPITAL,
|
||||||
'outpatient': cte.OUT_PATIENT_HEALTH_CARE,
|
'outpatient': cte.OUT_PATIENT_HEALTH_CARE,
|
||||||
'commercial': cte.SUPERMARKET,
|
'commercial': cte.SUPERMARKET,
|
||||||
'strip mall': cte.STRIP_MALL,
|
'strip mall': cte.STRIP_MALL,
|
||||||
'warehouse': cte.WAREHOUSE,
|
'warehouse': cte.WAREHOUSE,
|
||||||
'primary school': cte.PRIMARY_SCHOOL,
|
'primary school': cte.PRIMARY_SCHOOL,
|
||||||
'secondary school': cte.EDUCATION,
|
'secondary school': cte.EDUCATION,
|
||||||
'office': cte.MEDIUM_OFFICE,
|
'office': cte.MEDIUM_OFFICE,
|
||||||
'large office': cte.LARGE_OFFICE
|
'large office': cte.LARGE_OFFICE
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -12,66 +12,66 @@ class HubFunctionToNrcanConstructionFunction:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._dictionary = {
|
self._dictionary = {
|
||||||
cte.RESIDENTIAL: 'MidriseApartment',
|
cte.RESIDENTIAL: 'MidriseApartment',
|
||||||
cte.SINGLE_FAMILY_HOUSE: 'MidriseApartment',
|
cte.SINGLE_FAMILY_HOUSE: 'MidriseApartment',
|
||||||
cte.MULTI_FAMILY_HOUSE: 'HighriseApartment',
|
cte.MULTI_FAMILY_HOUSE: 'HighriseApartment',
|
||||||
cte.ROW_HOUSE: 'MidriseApartment',
|
cte.ROW_HOUSE: 'MidriseApartment',
|
||||||
cte.MID_RISE_APARTMENT: 'MidriseApartment',
|
cte.MID_RISE_APARTMENT: 'MidriseApartment',
|
||||||
cte.HIGH_RISE_APARTMENT: 'HighriseApartment',
|
cte.HIGH_RISE_APARTMENT: 'HighriseApartment',
|
||||||
cte.OFFICE_AND_ADMINISTRATION: 'MediumOffice',
|
cte.OFFICE_AND_ADMINISTRATION: 'MediumOffice',
|
||||||
cte.SMALL_OFFICE: 'SmallOffice',
|
cte.SMALL_OFFICE: 'SmallOffice',
|
||||||
cte.MEDIUM_OFFICE: 'MediumOffice',
|
cte.MEDIUM_OFFICE: 'MediumOffice',
|
||||||
cte.LARGE_OFFICE: 'LargeOffice',
|
cte.LARGE_OFFICE: 'LargeOffice',
|
||||||
cte.COURTHOUSE: 'MediumOffice',
|
cte.COURTHOUSE: 'MediumOffice',
|
||||||
cte.FIRE_STATION: 'n/a',
|
cte.FIRE_STATION: 'n/a',
|
||||||
cte.PENITENTIARY: 'LargeHotel',
|
cte.PENITENTIARY: 'LargeHotel',
|
||||||
cte.POLICE_STATION: 'n/a',
|
cte.POLICE_STATION: 'n/a',
|
||||||
cte.POST_OFFICE: 'MediumOffice',
|
cte.POST_OFFICE: 'MediumOffice',
|
||||||
cte.LIBRARY: 'MediumOffice',
|
cte.LIBRARY: 'MediumOffice',
|
||||||
cte.EDUCATION: 'SecondarySchool',
|
cte.EDUCATION: 'SecondarySchool',
|
||||||
cte.PRIMARY_SCHOOL: 'PrimarySchool',
|
cte.PRIMARY_SCHOOL: 'PrimarySchool',
|
||||||
cte.PRIMARY_SCHOOL_WITH_SHOWER: 'PrimarySchool',
|
cte.PRIMARY_SCHOOL_WITH_SHOWER: 'PrimarySchool',
|
||||||
cte.SECONDARY_SCHOOL: 'SecondarySchool',
|
cte.SECONDARY_SCHOOL: 'SecondarySchool',
|
||||||
cte.UNIVERSITY: 'SecondarySchool',
|
cte.UNIVERSITY: 'SecondarySchool',
|
||||||
cte.LABORATORY_AND_RESEARCH_CENTER: 'SecondarySchool',
|
cte.LABORATORY_AND_RESEARCH_CENTER: 'SecondarySchool',
|
||||||
cte.STAND_ALONE_RETAIL: 'RetailStandalone',
|
cte.STAND_ALONE_RETAIL: 'RetailStandalone',
|
||||||
cte.HOSPITAL: 'Hospital',
|
cte.HOSPITAL: 'Hospital',
|
||||||
cte.OUT_PATIENT_HEALTH_CARE: 'Outpatient',
|
cte.OUT_PATIENT_HEALTH_CARE: 'Outpatient',
|
||||||
cte.HEALTH_CARE: 'Outpatient',
|
cte.HEALTH_CARE: 'Outpatient',
|
||||||
cte.RETIREMENT_HOME_OR_ORPHANAGE: 'SmallHotel',
|
cte.RETIREMENT_HOME_OR_ORPHANAGE: 'SmallHotel',
|
||||||
cte.COMMERCIAL: 'RetailStripmall',
|
cte.COMMERCIAL: 'RetailStripmall',
|
||||||
cte.STRIP_MALL: 'RetailStripmall',
|
cte.STRIP_MALL: 'RetailStripmall',
|
||||||
cte.SUPERMARKET: 'RetailStripmall',
|
cte.SUPERMARKET: 'RetailStripmall',
|
||||||
cte.RETAIL_SHOP_WITHOUT_REFRIGERATED_FOOD: 'RetailStandalone',
|
cte.RETAIL_SHOP_WITHOUT_REFRIGERATED_FOOD: 'RetailStandalone',
|
||||||
cte.RETAIL_SHOP_WITH_REFRIGERATED_FOOD: 'RetailStandalone',
|
cte.RETAIL_SHOP_WITH_REFRIGERATED_FOOD: 'RetailStandalone',
|
||||||
cte.RESTAURANT: 'FullServiceRestaurant',
|
cte.RESTAURANT: 'FullServiceRestaurant',
|
||||||
cte.QUICK_SERVICE_RESTAURANT: 'QuickServiceRestaurant',
|
cte.QUICK_SERVICE_RESTAURANT: 'QuickServiceRestaurant',
|
||||||
cte.FULL_SERVICE_RESTAURANT: 'FullServiceRestaurant',
|
cte.FULL_SERVICE_RESTAURANT: 'FullServiceRestaurant',
|
||||||
cte.HOTEL: 'SmallHotel',
|
cte.HOTEL: 'SmallHotel',
|
||||||
cte.HOTEL_MEDIUM_CLASS: 'SmallHotel',
|
cte.HOTEL_MEDIUM_CLASS: 'SmallHotel',
|
||||||
cte.SMALL_HOTEL: 'SmallHotel',
|
cte.SMALL_HOTEL: 'SmallHotel',
|
||||||
cte.LARGE_HOTEL: 'LargeHotel',
|
cte.LARGE_HOTEL: 'LargeHotel',
|
||||||
cte.DORMITORY: 'SmallHotel',
|
cte.DORMITORY: 'SmallHotel',
|
||||||
cte.EVENT_LOCATION: 'n/a',
|
cte.EVENT_LOCATION: 'n/a',
|
||||||
cte.CONVENTION_CENTER: 'n/a',
|
cte.CONVENTION_CENTER: 'n/a',
|
||||||
cte.HALL: 'n/a',
|
cte.HALL: 'n/a',
|
||||||
cte.GREEN_HOUSE: 'n/a',
|
cte.GREEN_HOUSE: 'n/a',
|
||||||
cte.INDUSTRY: 'n/a',
|
cte.INDUSTRY: 'n/a',
|
||||||
cte.WORKSHOP: 'n/a',
|
cte.WORKSHOP: 'n/a',
|
||||||
cte.WAREHOUSE: 'Warehouse',
|
cte.WAREHOUSE: 'Warehouse',
|
||||||
cte.WAREHOUSE_REFRIGERATED: 'Warehouse',
|
cte.WAREHOUSE_REFRIGERATED: 'Warehouse',
|
||||||
cte.SPORTS_LOCATION: 'n/a',
|
cte.SPORTS_LOCATION: 'n/a',
|
||||||
cte.SPORTS_ARENA: 'n/a',
|
cte.SPORTS_ARENA: 'n/a',
|
||||||
cte.GYMNASIUM: 'n/a',
|
cte.GYMNASIUM: 'n/a',
|
||||||
cte.MOTION_PICTURE_THEATRE: 'n/a',
|
cte.MOTION_PICTURE_THEATRE: 'n/a',
|
||||||
cte.MUSEUM: 'n/a',
|
cte.MUSEUM: 'n/a',
|
||||||
cte.PERFORMING_ARTS_THEATRE: 'n/a',
|
cte.PERFORMING_ARTS_THEATRE: 'n/a',
|
||||||
cte.TRANSPORTATION: 'n/a',
|
cte.TRANSPORTATION: 'n/a',
|
||||||
cte.AUTOMOTIVE_FACILITY: 'n/a',
|
cte.AUTOMOTIVE_FACILITY: 'n/a',
|
||||||
cte.PARKING_GARAGE: 'n/a',
|
cte.PARKING_GARAGE: 'n/a',
|
||||||
cte.RELIGIOUS: 'n/a',
|
cte.RELIGIOUS: 'n/a',
|
||||||
cte.NON_HEATED: 'n/a'
|
cte.NON_HEATED: 'n/a'
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dictionary(self) -> dict:
|
def dictionary(self) -> dict:
|
||||||
|
@ -12,66 +12,66 @@ class HubFunctionToNrelConstructionFunction:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._dictionary = {
|
self._dictionary = {
|
||||||
cte.RESIDENTIAL: 'residential',
|
cte.RESIDENTIAL: 'residential',
|
||||||
cte.SINGLE_FAMILY_HOUSE: 'residential',
|
cte.SINGLE_FAMILY_HOUSE: 'residential',
|
||||||
cte.MULTI_FAMILY_HOUSE: 'midrise apartment',
|
cte.MULTI_FAMILY_HOUSE: 'midrise apartment',
|
||||||
cte.ROW_HOUSE: 'midrise apartment',
|
cte.ROW_HOUSE: 'midrise apartment',
|
||||||
cte.MID_RISE_APARTMENT: 'midrise apartment',
|
cte.MID_RISE_APARTMENT: 'midrise apartment',
|
||||||
cte.HIGH_RISE_APARTMENT: 'high-rise apartment',
|
cte.HIGH_RISE_APARTMENT: 'high-rise apartment',
|
||||||
cte.OFFICE_AND_ADMINISTRATION: 'medium office',
|
cte.OFFICE_AND_ADMINISTRATION: 'medium office',
|
||||||
cte.SMALL_OFFICE: 'small office',
|
cte.SMALL_OFFICE: 'small office',
|
||||||
cte.MEDIUM_OFFICE: 'medium office',
|
cte.MEDIUM_OFFICE: 'medium office',
|
||||||
cte.LARGE_OFFICE: 'large office',
|
cte.LARGE_OFFICE: 'large office',
|
||||||
cte.COURTHOUSE: 'medium office',
|
cte.COURTHOUSE: 'medium office',
|
||||||
cte.FIRE_STATION: 'n/a',
|
cte.FIRE_STATION: 'n/a',
|
||||||
cte.PENITENTIARY: 'large hotel',
|
cte.PENITENTIARY: 'large hotel',
|
||||||
cte.POLICE_STATION: 'n/a',
|
cte.POLICE_STATION: 'n/a',
|
||||||
cte.POST_OFFICE: 'medium office',
|
cte.POST_OFFICE: 'medium office',
|
||||||
cte.LIBRARY: 'medium office',
|
cte.LIBRARY: 'medium office',
|
||||||
cte.EDUCATION: 'secondary school',
|
cte.EDUCATION: 'secondary school',
|
||||||
cte.PRIMARY_SCHOOL: 'primary school',
|
cte.PRIMARY_SCHOOL: 'primary school',
|
||||||
cte.PRIMARY_SCHOOL_WITH_SHOWER: 'primary school',
|
cte.PRIMARY_SCHOOL_WITH_SHOWER: 'primary school',
|
||||||
cte.SECONDARY_SCHOOL: 'secondary school',
|
cte.SECONDARY_SCHOOL: 'secondary school',
|
||||||
cte.UNIVERSITY: 'secondary school',
|
cte.UNIVERSITY: 'secondary school',
|
||||||
cte.LABORATORY_AND_RESEARCH_CENTER: 'secondary school',
|
cte.LABORATORY_AND_RESEARCH_CENTER: 'secondary school',
|
||||||
cte.STAND_ALONE_RETAIL: 'stand-alone retail',
|
cte.STAND_ALONE_RETAIL: 'stand-alone retail',
|
||||||
cte.HOSPITAL: 'hospital',
|
cte.HOSPITAL: 'hospital',
|
||||||
cte.OUT_PATIENT_HEALTH_CARE: 'outpatient healthcare',
|
cte.OUT_PATIENT_HEALTH_CARE: 'outpatient healthcare',
|
||||||
cte.HEALTH_CARE: 'outpatient healthcare',
|
cte.HEALTH_CARE: 'outpatient healthcare',
|
||||||
cte.RETIREMENT_HOME_OR_ORPHANAGE: 'small hotel',
|
cte.RETIREMENT_HOME_OR_ORPHANAGE: 'small hotel',
|
||||||
cte.COMMERCIAL: 'strip mall',
|
cte.COMMERCIAL: 'strip mall',
|
||||||
cte.STRIP_MALL: 'strip mall',
|
cte.STRIP_MALL: 'strip mall',
|
||||||
cte.SUPERMARKET: 'supermarket',
|
cte.SUPERMARKET: 'supermarket',
|
||||||
cte.RETAIL_SHOP_WITHOUT_REFRIGERATED_FOOD: 'stand-alone retail',
|
cte.RETAIL_SHOP_WITHOUT_REFRIGERATED_FOOD: 'stand-alone retail',
|
||||||
cte.RETAIL_SHOP_WITH_REFRIGERATED_FOOD: 'stand-alone retail',
|
cte.RETAIL_SHOP_WITH_REFRIGERATED_FOOD: 'stand-alone retail',
|
||||||
cte.RESTAURANT: 'full service restaurant',
|
cte.RESTAURANT: 'full service restaurant',
|
||||||
cte.QUICK_SERVICE_RESTAURANT: 'quick service restaurant',
|
cte.QUICK_SERVICE_RESTAURANT: 'quick service restaurant',
|
||||||
cte.FULL_SERVICE_RESTAURANT: 'full service restaurant',
|
cte.FULL_SERVICE_RESTAURANT: 'full service restaurant',
|
||||||
cte.HOTEL: 'small hotel',
|
cte.HOTEL: 'small hotel',
|
||||||
cte.HOTEL_MEDIUM_CLASS: 'small hotel',
|
cte.HOTEL_MEDIUM_CLASS: 'small hotel',
|
||||||
cte.SMALL_HOTEL: 'small hotel',
|
cte.SMALL_HOTEL: 'small hotel',
|
||||||
cte.LARGE_HOTEL: 'large hotel',
|
cte.LARGE_HOTEL: 'large hotel',
|
||||||
cte.DORMITORY: 'small hotel',
|
cte.DORMITORY: 'small hotel',
|
||||||
cte.EVENT_LOCATION: 'n/a',
|
cte.EVENT_LOCATION: 'n/a',
|
||||||
cte.CONVENTION_CENTER: 'n/a',
|
cte.CONVENTION_CENTER: 'n/a',
|
||||||
cte.HALL: 'n/a',
|
cte.HALL: 'n/a',
|
||||||
cte.GREEN_HOUSE: 'n/a',
|
cte.GREEN_HOUSE: 'n/a',
|
||||||
cte.INDUSTRY: 'n/a',
|
cte.INDUSTRY: 'n/a',
|
||||||
cte.WORKSHOP: 'n/a',
|
cte.WORKSHOP: 'n/a',
|
||||||
cte.WAREHOUSE: 'warehouse',
|
cte.WAREHOUSE: 'warehouse',
|
||||||
cte.WAREHOUSE_REFRIGERATED: 'warehouse',
|
cte.WAREHOUSE_REFRIGERATED: 'warehouse',
|
||||||
cte.SPORTS_LOCATION: 'n/a',
|
cte.SPORTS_LOCATION: 'n/a',
|
||||||
cte.SPORTS_ARENA: 'n/a',
|
cte.SPORTS_ARENA: 'n/a',
|
||||||
cte.GYMNASIUM: 'n/a',
|
cte.GYMNASIUM: 'n/a',
|
||||||
cte.MOTION_PICTURE_THEATRE: 'n/a',
|
cte.MOTION_PICTURE_THEATRE: 'n/a',
|
||||||
cte.MUSEUM: 'n/a',
|
cte.MUSEUM: 'n/a',
|
||||||
cte.PERFORMING_ARTS_THEATRE: 'n/a',
|
cte.PERFORMING_ARTS_THEATRE: 'n/a',
|
||||||
cte.TRANSPORTATION: 'n/a',
|
cte.TRANSPORTATION: 'n/a',
|
||||||
cte.AUTOMOTIVE_FACILITY: 'n/aquebec_to_hub',
|
cte.AUTOMOTIVE_FACILITY: 'n/aquebec_to_hub',
|
||||||
cte.PARKING_GARAGE: 'n/a',
|
cte.PARKING_GARAGE: 'n/a',
|
||||||
cte.RELIGIOUS: 'n/a',
|
cte.RELIGIOUS: 'n/a',
|
||||||
cte.NON_HEATED: 'n/a'
|
cte.NON_HEATED: 'n/a'
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dictionary(self) -> dict:
|
def dictionary(self) -> dict:
|
||||||
|
@ -12,66 +12,66 @@ class HubUsageToComnetUsage:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._dictionary = {
|
self._dictionary = {
|
||||||
cte.RESIDENTIAL: 'BA Multifamily',
|
cte.RESIDENTIAL: 'BA Multifamily',
|
||||||
cte.SINGLE_FAMILY_HOUSE: 'BA Multifamily',
|
cte.SINGLE_FAMILY_HOUSE: 'BA Multifamily',
|
||||||
cte.MULTI_FAMILY_HOUSE: 'BA Multifamily',
|
cte.MULTI_FAMILY_HOUSE: 'BA Multifamily',
|
||||||
cte.ROW_HOUSE: 'BA Multifamily',
|
cte.ROW_HOUSE: 'BA Multifamily',
|
||||||
cte.MID_RISE_APARTMENT: 'BA Multifamily',
|
cte.MID_RISE_APARTMENT: 'BA Multifamily',
|
||||||
cte.HIGH_RISE_APARTMENT: 'BA Multifamily',
|
cte.HIGH_RISE_APARTMENT: 'BA Multifamily',
|
||||||
cte.OFFICE_AND_ADMINISTRATION: 'BA Office',
|
cte.OFFICE_AND_ADMINISTRATION: 'BA Office',
|
||||||
cte.SMALL_OFFICE: 'BA Office',
|
cte.SMALL_OFFICE: 'BA Office',
|
||||||
cte.MEDIUM_OFFICE: 'BA Office',
|
cte.MEDIUM_OFFICE: 'BA Office',
|
||||||
cte.LARGE_OFFICE: 'BA Office',
|
cte.LARGE_OFFICE: 'BA Office',
|
||||||
cte.COURTHOUSE: 'BA Courthouse',
|
cte.COURTHOUSE: 'BA Courthouse',
|
||||||
cte.FIRE_STATION: 'BA Fire Station',
|
cte.FIRE_STATION: 'BA Fire Station',
|
||||||
cte.PENITENTIARY: 'BA Penitentiary',
|
cte.PENITENTIARY: 'BA Penitentiary',
|
||||||
cte.POLICE_STATION: 'BA Police Station',
|
cte.POLICE_STATION: 'BA Police Station',
|
||||||
cte.POST_OFFICE: 'BA Post Office',
|
cte.POST_OFFICE: 'BA Post Office',
|
||||||
cte.LIBRARY: 'BA Library',
|
cte.LIBRARY: 'BA Library',
|
||||||
cte.EDUCATION: 'BA School/University',
|
cte.EDUCATION: 'BA School/University',
|
||||||
cte.PRIMARY_SCHOOL: 'BA School/University',
|
cte.PRIMARY_SCHOOL: 'BA School/University',
|
||||||
cte.PRIMARY_SCHOOL_WITH_SHOWER: 'BA School/University',
|
cte.PRIMARY_SCHOOL_WITH_SHOWER: 'BA School/University',
|
||||||
cte.SECONDARY_SCHOOL: 'BA School/University',
|
cte.SECONDARY_SCHOOL: 'BA School/University',
|
||||||
cte.UNIVERSITY: 'BA School/University',
|
cte.UNIVERSITY: 'BA School/University',
|
||||||
cte.LABORATORY_AND_RESEARCH_CENTER: 'BA School/University',
|
cte.LABORATORY_AND_RESEARCH_CENTER: 'BA School/University',
|
||||||
cte.STAND_ALONE_RETAIL: 'BA Retail',
|
cte.STAND_ALONE_RETAIL: 'BA Retail',
|
||||||
cte.HOSPITAL: 'BA Hospital',
|
cte.HOSPITAL: 'BA Hospital',
|
||||||
cte.OUT_PATIENT_HEALTH_CARE: 'BA Healthcare Clinic',
|
cte.OUT_PATIENT_HEALTH_CARE: 'BA Healthcare Clinic',
|
||||||
cte.HEALTH_CARE: 'BA Healthcare Clinic',
|
cte.HEALTH_CARE: 'BA Healthcare Clinic',
|
||||||
cte.RETIREMENT_HOME_OR_ORPHANAGE: 'BA Healthcare Clinic',
|
cte.RETIREMENT_HOME_OR_ORPHANAGE: 'BA Healthcare Clinic',
|
||||||
cte.COMMERCIAL: 'BA Retail',
|
cte.COMMERCIAL: 'BA Retail',
|
||||||
cte.STRIP_MALL: 'BA Retail',
|
cte.STRIP_MALL: 'BA Retail',
|
||||||
cte.SUPERMARKET: 'BA Retail',
|
cte.SUPERMARKET: 'BA Retail',
|
||||||
cte.RETAIL_SHOP_WITHOUT_REFRIGERATED_FOOD: 'BA Retail',
|
cte.RETAIL_SHOP_WITHOUT_REFRIGERATED_FOOD: 'BA Retail',
|
||||||
cte.RETAIL_SHOP_WITH_REFRIGERATED_FOOD: 'BA Retail',
|
cte.RETAIL_SHOP_WITH_REFRIGERATED_FOOD: 'BA Retail',
|
||||||
cte.RESTAURANT: 'BA Dining: Bar Lounge/Leisure',
|
cte.RESTAURANT: 'BA Dining: Bar Lounge/Leisure',
|
||||||
cte.QUICK_SERVICE_RESTAURANT: 'BA Dining: Cafeteria/Fast Food',
|
cte.QUICK_SERVICE_RESTAURANT: 'BA Dining: Cafeteria/Fast Food',
|
||||||
cte.FULL_SERVICE_RESTAURANT: 'BA Dining: Bar Lounge/Leisure',
|
cte.FULL_SERVICE_RESTAURANT: 'BA Dining: Bar Lounge/Leisure',
|
||||||
cte.HOTEL: 'BA Hotel',
|
cte.HOTEL: 'BA Hotel',
|
||||||
cte.HOTEL_MEDIUM_CLASS: 'BA Motel',
|
cte.HOTEL_MEDIUM_CLASS: 'BA Motel',
|
||||||
cte.SMALL_HOTEL: 'BA Motel',
|
cte.SMALL_HOTEL: 'BA Motel',
|
||||||
cte.LARGE_HOTEL: 'BA Hotel',
|
cte.LARGE_HOTEL: 'BA Hotel',
|
||||||
cte.DORMITORY: 'BA Dormitory',
|
cte.DORMITORY: 'BA Dormitory',
|
||||||
cte.EVENT_LOCATION: 'BA Convention Center',
|
cte.EVENT_LOCATION: 'BA Convention Center',
|
||||||
cte.CONVENTION_CENTER: 'BA Convention Center',
|
cte.CONVENTION_CENTER: 'BA Convention Center',
|
||||||
cte.HALL: 'BA Town Hall',
|
cte.HALL: 'BA Town Hall',
|
||||||
cte.GREEN_HOUSE: 'n/a',
|
cte.GREEN_HOUSE: 'n/a',
|
||||||
cte.INDUSTRY: 'BA Manufacturing Facility',
|
cte.INDUSTRY: 'BA Manufacturing Facility',
|
||||||
cte.WORKSHOP: 'BA Workshop',
|
cte.WORKSHOP: 'BA Workshop',
|
||||||
cte.WAREHOUSE: 'BA Warehouse',
|
cte.WAREHOUSE: 'BA Warehouse',
|
||||||
cte.WAREHOUSE_REFRIGERATED: 'BA Warehouse',
|
cte.WAREHOUSE_REFRIGERATED: 'BA Warehouse',
|
||||||
cte.SPORTS_LOCATION: 'BA Exercise Center',
|
cte.SPORTS_LOCATION: 'BA Exercise Center',
|
||||||
cte.SPORTS_ARENA: 'BA Sports Arena',
|
cte.SPORTS_ARENA: 'BA Sports Arena',
|
||||||
cte.GYMNASIUM: 'BA Gymnasium',
|
cte.GYMNASIUM: 'BA Gymnasium',
|
||||||
cte.MOTION_PICTURE_THEATRE: 'BA Motion Picture Theater',
|
cte.MOTION_PICTURE_THEATRE: 'BA Motion Picture Theater',
|
||||||
cte.MUSEUM: 'BA Museum',
|
cte.MUSEUM: 'BA Museum',
|
||||||
cte.PERFORMING_ARTS_THEATRE: 'BA Performing Arts Theater',
|
cte.PERFORMING_ARTS_THEATRE: 'BA Performing Arts Theater',
|
||||||
cte.TRANSPORTATION: 'BA Transportation',
|
cte.TRANSPORTATION: 'BA Transportation',
|
||||||
cte.AUTOMOTIVE_FACILITY: 'BA Automotive Facility',
|
cte.AUTOMOTIVE_FACILITY: 'BA Automotive Facility',
|
||||||
cte.PARKING_GARAGE: 'BA Parking Garage',
|
cte.PARKING_GARAGE: 'BA Parking Garage',
|
||||||
cte.RELIGIOUS: 'BA Religious Building',
|
cte.RELIGIOUS: 'BA Religious Building',
|
||||||
cte.NON_HEATED: 'n/a'
|
cte.NON_HEATED: 'n/a'
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dictionary(self) -> dict:
|
def dictionary(self) -> dict:
|
||||||
|
@ -12,66 +12,66 @@ class HubUsageToHftUsage:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._dictionary = {
|
self._dictionary = {
|
||||||
cte.RESIDENTIAL: 'residential',
|
cte.RESIDENTIAL: 'residential',
|
||||||
cte.SINGLE_FAMILY_HOUSE: 'single family house',
|
cte.SINGLE_FAMILY_HOUSE: 'single family house',
|
||||||
cte.MULTI_FAMILY_HOUSE: 'multifamily house',
|
cte.MULTI_FAMILY_HOUSE: 'multifamily house',
|
||||||
cte.ROW_HOUSE: 'single family house',
|
cte.ROW_HOUSE: 'single family house',
|
||||||
cte.MID_RISE_APARTMENT: 'multifamily house',
|
cte.MID_RISE_APARTMENT: 'multifamily house',
|
||||||
cte.HIGH_RISE_APARTMENT: 'multifamily house',
|
cte.HIGH_RISE_APARTMENT: 'multifamily house',
|
||||||
cte.OFFICE_AND_ADMINISTRATION: 'office and administration',
|
cte.OFFICE_AND_ADMINISTRATION: 'office and administration',
|
||||||
cte.SMALL_OFFICE: 'office and administration',
|
cte.SMALL_OFFICE: 'office and administration',
|
||||||
cte.MEDIUM_OFFICE: 'office and administration',
|
cte.MEDIUM_OFFICE: 'office and administration',
|
||||||
cte.LARGE_OFFICE: 'office and administration',
|
cte.LARGE_OFFICE: 'office and administration',
|
||||||
cte.COURTHOUSE: 'office and administration',
|
cte.COURTHOUSE: 'office and administration',
|
||||||
cte.FIRE_STATION: 'office and administration',
|
cte.FIRE_STATION: 'office and administration',
|
||||||
cte.PENITENTIARY: 'school with shower',
|
cte.PENITENTIARY: 'school with shower',
|
||||||
cte.POLICE_STATION: 'office and administration',
|
cte.POLICE_STATION: 'office and administration',
|
||||||
cte.POST_OFFICE: 'office and administration',
|
cte.POST_OFFICE: 'office and administration',
|
||||||
cte.LIBRARY: 'office and administration',
|
cte.LIBRARY: 'office and administration',
|
||||||
cte.EDUCATION: 'education',
|
cte.EDUCATION: 'education',
|
||||||
cte.PRIMARY_SCHOOL: 'school without shower',
|
cte.PRIMARY_SCHOOL: 'school without shower',
|
||||||
cte.PRIMARY_SCHOOL_WITH_SHOWER: 'school with shower',
|
cte.PRIMARY_SCHOOL_WITH_SHOWER: 'school with shower',
|
||||||
cte.SECONDARY_SCHOOL: 'education',
|
cte.SECONDARY_SCHOOL: 'education',
|
||||||
cte.UNIVERSITY: 'education',
|
cte.UNIVERSITY: 'education',
|
||||||
cte.LABORATORY_AND_RESEARCH_CENTER: 'laboratory and research centers',
|
cte.LABORATORY_AND_RESEARCH_CENTER: 'laboratory and research centers',
|
||||||
cte.STAND_ALONE_RETAIL: 'retail',
|
cte.STAND_ALONE_RETAIL: 'retail',
|
||||||
cte.HOSPITAL: 'health care',
|
cte.HOSPITAL: 'health care',
|
||||||
cte.OUT_PATIENT_HEALTH_CARE: 'health care',
|
cte.OUT_PATIENT_HEALTH_CARE: 'health care',
|
||||||
cte.HEALTH_CARE: 'health care',
|
cte.HEALTH_CARE: 'health care',
|
||||||
cte.RETIREMENT_HOME_OR_ORPHANAGE: 'Home for the aged or orphanage',
|
cte.RETIREMENT_HOME_OR_ORPHANAGE: 'Home for the aged or orphanage',
|
||||||
cte.COMMERCIAL: 'retail',
|
cte.COMMERCIAL: 'retail',
|
||||||
cte.STRIP_MALL: 'retail',
|
cte.STRIP_MALL: 'retail',
|
||||||
cte.SUPERMARKET: 'retail shop / refrigerated food',
|
cte.SUPERMARKET: 'retail shop / refrigerated food',
|
||||||
cte.RETAIL_SHOP_WITHOUT_REFRIGERATED_FOOD: 'retail',
|
cte.RETAIL_SHOP_WITHOUT_REFRIGERATED_FOOD: 'retail',
|
||||||
cte.RETAIL_SHOP_WITH_REFRIGERATED_FOOD: 'retail shop / refrigerated food',
|
cte.RETAIL_SHOP_WITH_REFRIGERATED_FOOD: 'retail shop / refrigerated food',
|
||||||
cte.RESTAURANT: 'restaurant',
|
cte.RESTAURANT: 'restaurant',
|
||||||
cte.QUICK_SERVICE_RESTAURANT: 'restaurant',
|
cte.QUICK_SERVICE_RESTAURANT: 'restaurant',
|
||||||
cte.FULL_SERVICE_RESTAURANT: 'restaurant',
|
cte.FULL_SERVICE_RESTAURANT: 'restaurant',
|
||||||
cte.HOTEL: 'hotel',
|
cte.HOTEL: 'hotel',
|
||||||
cte.HOTEL_MEDIUM_CLASS: 'hotel (Medium-class)',
|
cte.HOTEL_MEDIUM_CLASS: 'hotel (Medium-class)',
|
||||||
cte.SMALL_HOTEL: 'hotel',
|
cte.SMALL_HOTEL: 'hotel',
|
||||||
cte.LARGE_HOTEL: 'hotel',
|
cte.LARGE_HOTEL: 'hotel',
|
||||||
cte.DORMITORY: 'dormitory',
|
cte.DORMITORY: 'dormitory',
|
||||||
cte.EVENT_LOCATION: 'event location',
|
cte.EVENT_LOCATION: 'event location',
|
||||||
cte.CONVENTION_CENTER: 'event location',
|
cte.CONVENTION_CENTER: 'event location',
|
||||||
cte.HALL: 'hall',
|
cte.HALL: 'hall',
|
||||||
cte.GREEN_HOUSE: 'green house',
|
cte.GREEN_HOUSE: 'green house',
|
||||||
cte.INDUSTRY: 'industry',
|
cte.INDUSTRY: 'industry',
|
||||||
cte.WORKSHOP: 'industry',
|
cte.WORKSHOP: 'industry',
|
||||||
cte.WAREHOUSE: 'industry',
|
cte.WAREHOUSE: 'industry',
|
||||||
cte.WAREHOUSE_REFRIGERATED: 'industry',
|
cte.WAREHOUSE_REFRIGERATED: 'industry',
|
||||||
cte.SPORTS_LOCATION: 'sport location',
|
cte.SPORTS_LOCATION: 'sport location',
|
||||||
cte.SPORTS_ARENA: 'sport location',
|
cte.SPORTS_ARENA: 'sport location',
|
||||||
cte.GYMNASIUM: 'sport location',
|
cte.GYMNASIUM: 'sport location',
|
||||||
cte.MOTION_PICTURE_THEATRE: 'event location',
|
cte.MOTION_PICTURE_THEATRE: 'event location',
|
||||||
cte.MUSEUM: 'event location',
|
cte.MUSEUM: 'event location',
|
||||||
cte.PERFORMING_ARTS_THEATRE: 'event location',
|
cte.PERFORMING_ARTS_THEATRE: 'event location',
|
||||||
cte.TRANSPORTATION: 'n/a',
|
cte.TRANSPORTATION: 'n/a',
|
||||||
cte.AUTOMOTIVE_FACILITY: 'n/a',
|
cte.AUTOMOTIVE_FACILITY: 'n/a',
|
||||||
cte.PARKING_GARAGE: 'n/a',
|
cte.PARKING_GARAGE: 'n/a',
|
||||||
cte.RELIGIOUS: 'event location',
|
cte.RELIGIOUS: 'event location',
|
||||||
cte.NON_HEATED: 'non-heated'
|
cte.NON_HEATED: 'non-heated'
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dictionary(self) -> dict:
|
def dictionary(self) -> dict:
|
||||||
|
@ -12,66 +12,66 @@ class HubUsageToNrcanUsage:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._dictionary = {
|
self._dictionary = {
|
||||||
cte.RESIDENTIAL: 'Multi-unit residential building',
|
cte.RESIDENTIAL: 'Multi-unit residential building',
|
||||||
cte.SINGLE_FAMILY_HOUSE: 'Multi-unit residential building',
|
cte.SINGLE_FAMILY_HOUSE: 'Multi-unit residential building',
|
||||||
cte.MULTI_FAMILY_HOUSE: 'Multi-unit residential building',
|
cte.MULTI_FAMILY_HOUSE: 'Multi-unit residential building',
|
||||||
cte.ROW_HOUSE: 'Multi-unit residential building',
|
cte.ROW_HOUSE: 'Multi-unit residential building',
|
||||||
cte.MID_RISE_APARTMENT: 'Multi-unit residential building',
|
cte.MID_RISE_APARTMENT: 'Multi-unit residential building',
|
||||||
cte.HIGH_RISE_APARTMENT: 'Multi-unit residential building',
|
cte.HIGH_RISE_APARTMENT: 'Multi-unit residential building',
|
||||||
cte.OFFICE_AND_ADMINISTRATION: 'Office',
|
cte.OFFICE_AND_ADMINISTRATION: 'Office',
|
||||||
cte.SMALL_OFFICE: 'Office',
|
cte.SMALL_OFFICE: 'Office',
|
||||||
cte.MEDIUM_OFFICE: 'Office',
|
cte.MEDIUM_OFFICE: 'Office',
|
||||||
cte.LARGE_OFFICE: 'Office',
|
cte.LARGE_OFFICE: 'Office',
|
||||||
cte.COURTHOUSE: 'Courthouse',
|
cte.COURTHOUSE: 'Courthouse',
|
||||||
cte.FIRE_STATION: 'Fire station',
|
cte.FIRE_STATION: 'Fire station',
|
||||||
cte.PENITENTIARY: 'Penitentiary',
|
cte.PENITENTIARY: 'Penitentiary',
|
||||||
cte.POLICE_STATION: 'Police station',
|
cte.POLICE_STATION: 'Police station',
|
||||||
cte.POST_OFFICE: 'Post office',
|
cte.POST_OFFICE: 'Post office',
|
||||||
cte.LIBRARY: 'Library',
|
cte.LIBRARY: 'Library',
|
||||||
cte.EDUCATION: 'School/university',
|
cte.EDUCATION: 'School/university',
|
||||||
cte.PRIMARY_SCHOOL: 'School/university',
|
cte.PRIMARY_SCHOOL: 'School/university',
|
||||||
cte.PRIMARY_SCHOOL_WITH_SHOWER: 'School/university',
|
cte.PRIMARY_SCHOOL_WITH_SHOWER: 'School/university',
|
||||||
cte.SECONDARY_SCHOOL: 'School/university',
|
cte.SECONDARY_SCHOOL: 'School/university',
|
||||||
cte.UNIVERSITY: 'School/university',
|
cte.UNIVERSITY: 'School/university',
|
||||||
cte.LABORATORY_AND_RESEARCH_CENTER: 'School/university',
|
cte.LABORATORY_AND_RESEARCH_CENTER: 'School/university',
|
||||||
cte.STAND_ALONE_RETAIL: 'Retail',
|
cte.STAND_ALONE_RETAIL: 'Retail area',
|
||||||
cte.HOSPITAL: 'Hospital',
|
cte.HOSPITAL: 'Hospital',
|
||||||
cte.OUT_PATIENT_HEALTH_CARE: 'Health-care clinic',
|
cte.OUT_PATIENT_HEALTH_CARE: 'Health-care clinic',
|
||||||
cte.HEALTH_CARE: 'Health-care clinic',
|
cte.HEALTH_CARE: 'Health-care clinic',
|
||||||
cte.RETIREMENT_HOME_OR_ORPHANAGE: 'Health-care clinic',
|
cte.RETIREMENT_HOME_OR_ORPHANAGE: 'Health-care clinic',
|
||||||
cte.COMMERCIAL: 'Retail',
|
cte.COMMERCIAL: 'Retail area',
|
||||||
cte.STRIP_MALL: 'Retail',
|
cte.STRIP_MALL: 'Retail area',
|
||||||
cte.SUPERMARKET: 'Retail',
|
cte.SUPERMARKET: 'Retail area',
|
||||||
cte.RETAIL_SHOP_WITHOUT_REFRIGERATED_FOOD: 'Retail',
|
cte.RETAIL_SHOP_WITHOUT_REFRIGERATED_FOOD: 'Retail area',
|
||||||
cte.RETAIL_SHOP_WITH_REFRIGERATED_FOOD: 'Retail',
|
cte.RETAIL_SHOP_WITH_REFRIGERATED_FOOD: 'Retail area',
|
||||||
cte.RESTAURANT: 'Dining - bar/lounge',
|
cte.RESTAURANT: 'Dining - bar/lounge',
|
||||||
cte.QUICK_SERVICE_RESTAURANT: 'Dining - cafeteria',
|
cte.QUICK_SERVICE_RESTAURANT: 'Dining - cafeteria',
|
||||||
cte.FULL_SERVICE_RESTAURANT: 'Dining - bar/lounge',
|
cte.FULL_SERVICE_RESTAURANT: 'Dining - bar/lounge',
|
||||||
cte.HOTEL: 'Hotel',
|
cte.HOTEL: 'Hotel',
|
||||||
cte.HOTEL_MEDIUM_CLASS: 'Motel',
|
cte.HOTEL_MEDIUM_CLASS: 'Motel',
|
||||||
cte.SMALL_HOTEL: 'Motel',
|
cte.SMALL_HOTEL: 'Motel',
|
||||||
cte.LARGE_HOTEL: 'Hotel',
|
cte.LARGE_HOTEL: 'Hotel',
|
||||||
cte.DORMITORY: 'Dormitory',
|
cte.DORMITORY: 'Dormitory',
|
||||||
cte.EVENT_LOCATION: 'Convention centre',
|
cte.EVENT_LOCATION: 'Convention centre',
|
||||||
cte.CONVENTION_CENTER: 'Convention centre',
|
cte.CONVENTION_CENTER: 'Convention centre',
|
||||||
cte.HALL: 'Town hall',
|
cte.HALL: 'Town hall',
|
||||||
cte.GREEN_HOUSE: 'n/a',
|
cte.GREEN_HOUSE: 'n/a',
|
||||||
cte.INDUSTRY: 'Manufacturing facility',
|
cte.INDUSTRY: 'Manufacturing facility',
|
||||||
cte.WORKSHOP: 'Workshop',
|
cte.WORKSHOP: 'Workshop',
|
||||||
cte.WAREHOUSE: 'Warehouse',
|
cte.WAREHOUSE: 'Warehouse',
|
||||||
cte.WAREHOUSE_REFRIGERATED: 'Warehouse - refrigerated',
|
cte.WAREHOUSE_REFRIGERATED: 'Warehouse - refrigerated',
|
||||||
cte.SPORTS_LOCATION: 'Exercise centre',
|
cte.SPORTS_LOCATION: 'Exercise centre',
|
||||||
cte.SPORTS_ARENA: 'Sports arena',
|
cte.SPORTS_ARENA: 'Sports arena',
|
||||||
cte.GYMNASIUM: 'Gymnasium',
|
cte.GYMNASIUM: 'Gymnasium',
|
||||||
cte.MOTION_PICTURE_THEATRE: 'Motion picture theatre',
|
cte.MOTION_PICTURE_THEATRE: 'Motion picture theatre',
|
||||||
cte.MUSEUM: 'Museum',
|
cte.MUSEUM: 'Museum',
|
||||||
cte.PERFORMING_ARTS_THEATRE: 'Performing arts theatre',
|
cte.PERFORMING_ARTS_THEATRE: 'Performing arts theatre',
|
||||||
cte.TRANSPORTATION: 'Transportation',
|
cte.TRANSPORTATION: 'Transportation',
|
||||||
cte.AUTOMOTIVE_FACILITY: 'Automotive facility',
|
cte.AUTOMOTIVE_FACILITY: 'Automotive facility',
|
||||||
cte.PARKING_GARAGE: 'Parking garage',
|
cte.PARKING_GARAGE: 'Parking garage',
|
||||||
cte.RELIGIOUS: 'Religious',
|
cte.RELIGIOUS: 'Religious',
|
||||||
cte.NON_HEATED: 'n/a'
|
cte.NON_HEATED: 'n/a'
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dictionary(self) -> dict:
|
def dictionary(self) -> dict:
|
||||||
|
@ -12,205 +12,205 @@ class PlutoFunctionToHubFunction:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._dictionary = {
|
self._dictionary = {
|
||||||
'A0': cte.SINGLE_FAMILY_HOUSE,
|
'A0': cte.SINGLE_FAMILY_HOUSE,
|
||||||
'A1': cte.SINGLE_FAMILY_HOUSE,
|
'A1': cte.SINGLE_FAMILY_HOUSE,
|
||||||
'A2': cte.SINGLE_FAMILY_HOUSE,
|
'A2': cte.SINGLE_FAMILY_HOUSE,
|
||||||
'A3': cte.SINGLE_FAMILY_HOUSE,
|
'A3': cte.SINGLE_FAMILY_HOUSE,
|
||||||
'A4': cte.SINGLE_FAMILY_HOUSE,
|
'A4': cte.SINGLE_FAMILY_HOUSE,
|
||||||
'A5': cte.SINGLE_FAMILY_HOUSE,
|
'A5': cte.SINGLE_FAMILY_HOUSE,
|
||||||
'A6': cte.SINGLE_FAMILY_HOUSE,
|
'A6': cte.SINGLE_FAMILY_HOUSE,
|
||||||
'A7': cte.SINGLE_FAMILY_HOUSE,
|
'A7': cte.SINGLE_FAMILY_HOUSE,
|
||||||
'A8': cte.SINGLE_FAMILY_HOUSE,
|
'A8': cte.SINGLE_FAMILY_HOUSE,
|
||||||
'A9': cte.SINGLE_FAMILY_HOUSE,
|
'A9': cte.SINGLE_FAMILY_HOUSE,
|
||||||
'B1': cte.MULTI_FAMILY_HOUSE,
|
'B1': cte.MULTI_FAMILY_HOUSE,
|
||||||
'B2': cte.MULTI_FAMILY_HOUSE,
|
'B2': cte.MULTI_FAMILY_HOUSE,
|
||||||
'B3': cte.MULTI_FAMILY_HOUSE,
|
'B3': cte.MULTI_FAMILY_HOUSE,
|
||||||
'B9': cte.MULTI_FAMILY_HOUSE,
|
'B9': cte.MULTI_FAMILY_HOUSE,
|
||||||
'C0': cte.RESIDENTIAL,
|
'C0': cte.RESIDENTIAL,
|
||||||
'C1': cte.RESIDENTIAL,
|
'C1': cte.RESIDENTIAL,
|
||||||
'C2': cte.RESIDENTIAL,
|
'C2': cte.RESIDENTIAL,
|
||||||
'C3': cte.RESIDENTIAL,
|
'C3': cte.RESIDENTIAL,
|
||||||
'C4': cte.RESIDENTIAL,
|
'C4': cte.RESIDENTIAL,
|
||||||
'C5': cte.RESIDENTIAL,
|
'C5': cte.RESIDENTIAL,
|
||||||
'C6': cte.RESIDENTIAL,
|
'C6': cte.RESIDENTIAL,
|
||||||
'C7': cte.RESIDENTIAL,
|
'C7': cte.RESIDENTIAL,
|
||||||
'C8': cte.RESIDENTIAL,
|
'C8': cte.RESIDENTIAL,
|
||||||
'C9': cte.RESIDENTIAL,
|
'C9': cte.RESIDENTIAL,
|
||||||
'D0': cte.RESIDENTIAL,
|
'D0': cte.RESIDENTIAL,
|
||||||
'D1': cte.RESIDENTIAL,
|
'D1': cte.RESIDENTIAL,
|
||||||
'D2': cte.RESIDENTIAL,
|
'D2': cte.RESIDENTIAL,
|
||||||
'D3': cte.RESIDENTIAL,
|
'D3': cte.RESIDENTIAL,
|
||||||
'D4': cte.RESIDENTIAL,
|
'D4': cte.RESIDENTIAL,
|
||||||
'D5': cte.RESIDENTIAL,
|
'D5': cte.RESIDENTIAL,
|
||||||
'D6': cte.RESIDENTIAL,
|
'D6': cte.RESIDENTIAL,
|
||||||
'D7': cte.RESIDENTIAL,
|
'D7': cte.RESIDENTIAL,
|
||||||
'D8': cte.RESIDENTIAL,
|
'D8': cte.RESIDENTIAL,
|
||||||
'D9': cte.RESIDENTIAL,
|
'D9': cte.RESIDENTIAL,
|
||||||
'E1': cte.WAREHOUSE,
|
'E1': cte.WAREHOUSE,
|
||||||
'E3': cte.WAREHOUSE,
|
'E3': cte.WAREHOUSE,
|
||||||
'E4': cte.WAREHOUSE,
|
'E4': cte.WAREHOUSE,
|
||||||
'E5': cte.WAREHOUSE,
|
'E5': cte.WAREHOUSE,
|
||||||
'E7': cte.WAREHOUSE,
|
'E7': cte.WAREHOUSE,
|
||||||
'E9': cte.WAREHOUSE,
|
'E9': cte.WAREHOUSE,
|
||||||
'F1': cte.WAREHOUSE,
|
'F1': cte.WAREHOUSE,
|
||||||
'F2': cte.WAREHOUSE,
|
'F2': cte.WAREHOUSE,
|
||||||
'F4': cte.WAREHOUSE,
|
'F4': cte.WAREHOUSE,
|
||||||
'F5': cte.WAREHOUSE,
|
'F5': cte.WAREHOUSE,
|
||||||
'F8': cte.WAREHOUSE,
|
'F8': cte.WAREHOUSE,
|
||||||
'F9': cte.WAREHOUSE,
|
'F9': cte.WAREHOUSE,
|
||||||
'G0': cte.SMALL_OFFICE,
|
'G0': cte.SMALL_OFFICE,
|
||||||
'G1': cte.SMALL_OFFICE,
|
'G1': cte.SMALL_OFFICE,
|
||||||
'G2': cte.SMALL_OFFICE,
|
'G2': cte.SMALL_OFFICE,
|
||||||
'G3': cte.SMALL_OFFICE,
|
'G3': cte.SMALL_OFFICE,
|
||||||
'G4': cte.SMALL_OFFICE,
|
'G4': cte.SMALL_OFFICE,
|
||||||
'G5': cte.SMALL_OFFICE,
|
'G5': cte.SMALL_OFFICE,
|
||||||
'G6': cte.SMALL_OFFICE,
|
'G6': cte.SMALL_OFFICE,
|
||||||
'G7': cte.SMALL_OFFICE,
|
'G7': cte.SMALL_OFFICE,
|
||||||
'G8': cte.SMALL_OFFICE,
|
'G8': cte.SMALL_OFFICE,
|
||||||
'G9': cte.SMALL_OFFICE,
|
'G9': cte.SMALL_OFFICE,
|
||||||
'H1': cte.HOTEL,
|
'H1': cte.HOTEL,
|
||||||
'H2': cte.HOTEL,
|
'H2': cte.HOTEL,
|
||||||
'H3': cte.HOTEL,
|
'H3': cte.HOTEL,
|
||||||
'H4': cte.HOTEL,
|
'H4': cte.HOTEL,
|
||||||
'H5': cte.HOTEL,
|
'H5': cte.HOTEL,
|
||||||
'H6': cte.HOTEL,
|
'H6': cte.HOTEL,
|
||||||
'H7': cte.HOTEL,
|
'H7': cte.HOTEL,
|
||||||
'H8': cte.HOTEL,
|
'H8': cte.HOTEL,
|
||||||
'H9': cte.HOTEL,
|
'H9': cte.HOTEL,
|
||||||
'HB': cte.HOTEL,
|
'HB': cte.HOTEL,
|
||||||
'HH': cte.HOTEL,
|
'HH': cte.HOTEL,
|
||||||
'HR': cte.HOTEL,
|
'HR': cte.HOTEL,
|
||||||
'HS': cte.HOTEL,
|
'HS': cte.HOTEL,
|
||||||
'I1': cte.HOSPITAL,
|
'I1': cte.HOSPITAL,
|
||||||
'I2': cte.OUT_PATIENT_HEALTH_CARE,
|
'I2': cte.OUT_PATIENT_HEALTH_CARE,
|
||||||
'I3': cte.OUT_PATIENT_HEALTH_CARE,
|
'I3': cte.OUT_PATIENT_HEALTH_CARE,
|
||||||
'I4': cte.RESIDENTIAL,
|
'I4': cte.RESIDENTIAL,
|
||||||
'I5': cte.OUT_PATIENT_HEALTH_CARE,
|
'I5': cte.OUT_PATIENT_HEALTH_CARE,
|
||||||
'I6': cte.OUT_PATIENT_HEALTH_CARE,
|
'I6': cte.OUT_PATIENT_HEALTH_CARE,
|
||||||
'I7': cte.OUT_PATIENT_HEALTH_CARE,
|
'I7': cte.OUT_PATIENT_HEALTH_CARE,
|
||||||
'I9': cte.OUT_PATIENT_HEALTH_CARE,
|
'I9': cte.OUT_PATIENT_HEALTH_CARE,
|
||||||
'J1': cte.LARGE_OFFICE,
|
'J1': cte.LARGE_OFFICE,
|
||||||
'J2': cte.LARGE_OFFICE,
|
'J2': cte.LARGE_OFFICE,
|
||||||
'J3': cte.LARGE_OFFICE,
|
'J3': cte.LARGE_OFFICE,
|
||||||
'J4': cte.LARGE_OFFICE,
|
'J4': cte.LARGE_OFFICE,
|
||||||
'J5': cte.LARGE_OFFICE,
|
'J5': cte.LARGE_OFFICE,
|
||||||
'J6': cte.LARGE_OFFICE,
|
'J6': cte.LARGE_OFFICE,
|
||||||
'J7': cte.LARGE_OFFICE,
|
'J7': cte.LARGE_OFFICE,
|
||||||
'J8': cte.LARGE_OFFICE,
|
'J8': cte.LARGE_OFFICE,
|
||||||
'J9': cte.LARGE_OFFICE,
|
'J9': cte.LARGE_OFFICE,
|
||||||
'K1': cte.STRIP_MALL,
|
'K1': cte.STRIP_MALL,
|
||||||
'K2': cte.STRIP_MALL,
|
'K2': cte.STRIP_MALL,
|
||||||
'K3': cte.STRIP_MALL,
|
'K3': cte.STRIP_MALL,
|
||||||
'K4': cte.RESIDENTIAL,
|
'K4': cte.RESIDENTIAL,
|
||||||
'K5': cte.RESTAURANT,
|
'K5': cte.RESTAURANT,
|
||||||
'K6': cte.SUPERMARKET,
|
'K6': cte.SUPERMARKET,
|
||||||
'K7': cte.SUPERMARKET,
|
'K7': cte.SUPERMARKET,
|
||||||
'K8': cte.SUPERMARKET,
|
'K8': cte.SUPERMARKET,
|
||||||
'K9': cte.SUPERMARKET,
|
'K9': cte.SUPERMARKET,
|
||||||
'L1': cte.RESIDENTIAL,
|
'L1': cte.RESIDENTIAL,
|
||||||
'L2': cte.RESIDENTIAL,
|
'L2': cte.RESIDENTIAL,
|
||||||
'L3': cte.RESIDENTIAL,
|
'L3': cte.RESIDENTIAL,
|
||||||
'L8': cte.RESIDENTIAL,
|
'L8': cte.RESIDENTIAL,
|
||||||
'L9': cte.RESIDENTIAL,
|
'L9': cte.RESIDENTIAL,
|
||||||
'M1': cte.LARGE_OFFICE,
|
'M1': cte.LARGE_OFFICE,
|
||||||
'M2': cte.LARGE_OFFICE,
|
'M2': cte.LARGE_OFFICE,
|
||||||
'M3': cte.LARGE_OFFICE,
|
'M3': cte.LARGE_OFFICE,
|
||||||
'M4': cte.LARGE_OFFICE,
|
'M4': cte.LARGE_OFFICE,
|
||||||
'M9': cte.LARGE_OFFICE,
|
'M9': cte.LARGE_OFFICE,
|
||||||
'N1': cte.RESIDENTIAL,
|
'N1': cte.RESIDENTIAL,
|
||||||
'N2': cte.RESIDENTIAL,
|
'N2': cte.RESIDENTIAL,
|
||||||
'N3': cte.RESIDENTIAL,
|
'N3': cte.RESIDENTIAL,
|
||||||
'N4': cte.RESIDENTIAL,
|
'N4': cte.RESIDENTIAL,
|
||||||
'N9': cte.RESIDENTIAL,
|
'N9': cte.RESIDENTIAL,
|
||||||
'O1': cte.SMALL_OFFICE,
|
'O1': cte.SMALL_OFFICE,
|
||||||
'O2': cte.SMALL_OFFICE,
|
'O2': cte.SMALL_OFFICE,
|
||||||
'O3': cte.SMALL_OFFICE,
|
'O3': cte.SMALL_OFFICE,
|
||||||
'O4': cte.SMALL_OFFICE,
|
'O4': cte.SMALL_OFFICE,
|
||||||
'O5': cte.SMALL_OFFICE,
|
'O5': cte.SMALL_OFFICE,
|
||||||
'O6': cte.SMALL_OFFICE,
|
'O6': cte.SMALL_OFFICE,
|
||||||
'O7': cte.SMALL_OFFICE,
|
'O7': cte.SMALL_OFFICE,
|
||||||
'O8': cte.SMALL_OFFICE,
|
'O8': cte.SMALL_OFFICE,
|
||||||
'O9': cte.SMALL_OFFICE,
|
'O9': cte.SMALL_OFFICE,
|
||||||
'P1': cte.LARGE_OFFICE,
|
'P1': cte.LARGE_OFFICE,
|
||||||
'P2': cte.HOTEL,
|
'P2': cte.HOTEL,
|
||||||
'P3': cte.SMALL_OFFICE,
|
'P3': cte.SMALL_OFFICE,
|
||||||
'P4': cte.SMALL_OFFICE,
|
'P4': cte.SMALL_OFFICE,
|
||||||
'P5': cte.SMALL_OFFICE,
|
'P5': cte.SMALL_OFFICE,
|
||||||
'P6': cte.SMALL_OFFICE,
|
'P6': cte.SMALL_OFFICE,
|
||||||
'P7': cte.LARGE_OFFICE,
|
'P7': cte.LARGE_OFFICE,
|
||||||
'P8': cte.LARGE_OFFICE,
|
'P8': cte.LARGE_OFFICE,
|
||||||
'P9': cte.SMALL_OFFICE,
|
'P9': cte.SMALL_OFFICE,
|
||||||
'Q0': cte.SMALL_OFFICE,
|
'Q0': cte.SMALL_OFFICE,
|
||||||
'Q1': cte.SMALL_OFFICE,
|
'Q1': cte.SMALL_OFFICE,
|
||||||
'Q2': cte.SMALL_OFFICE,
|
'Q2': cte.SMALL_OFFICE,
|
||||||
'Q3': cte.SMALL_OFFICE,
|
'Q3': cte.SMALL_OFFICE,
|
||||||
'Q4': cte.SMALL_OFFICE,
|
'Q4': cte.SMALL_OFFICE,
|
||||||
'Q5': cte.SMALL_OFFICE,
|
'Q5': cte.SMALL_OFFICE,
|
||||||
'Q6': cte.SMALL_OFFICE,
|
'Q6': cte.SMALL_OFFICE,
|
||||||
'Q7': cte.SMALL_OFFICE,
|
'Q7': cte.SMALL_OFFICE,
|
||||||
'Q8': cte.SMALL_OFFICE,
|
'Q8': cte.SMALL_OFFICE,
|
||||||
'Q9': cte.SMALL_OFFICE,
|
'Q9': cte.SMALL_OFFICE,
|
||||||
'R0': cte.RESIDENTIAL,
|
'R0': cte.RESIDENTIAL,
|
||||||
'R1': cte.RESIDENTIAL,
|
'R1': cte.RESIDENTIAL,
|
||||||
'R2': cte.RESIDENTIAL,
|
'R2': cte.RESIDENTIAL,
|
||||||
'R3': cte.RESIDENTIAL,
|
'R3': cte.RESIDENTIAL,
|
||||||
'R4': cte.RESIDENTIAL,
|
'R4': cte.RESIDENTIAL,
|
||||||
'R5': cte.RESIDENTIAL,
|
'R5': cte.RESIDENTIAL,
|
||||||
'R6': cte.RESIDENTIAL,
|
'R6': cte.RESIDENTIAL,
|
||||||
'R7': cte.RESIDENTIAL,
|
'R7': cte.RESIDENTIAL,
|
||||||
'R8': cte.RESIDENTIAL,
|
'R8': cte.RESIDENTIAL,
|
||||||
'R9': cte.RESIDENTIAL,
|
'R9': cte.RESIDENTIAL,
|
||||||
'RA': cte.RESIDENTIAL,
|
'RA': cte.RESIDENTIAL,
|
||||||
'RB': cte.RESIDENTIAL,
|
'RB': cte.RESIDENTIAL,
|
||||||
'RC': cte.RESIDENTIAL,
|
'RC': cte.RESIDENTIAL,
|
||||||
'RD': cte.RESIDENTIAL,
|
'RD': cte.RESIDENTIAL,
|
||||||
'RG': cte.RESIDENTIAL,
|
'RG': cte.RESIDENTIAL,
|
||||||
'RH': cte.RESIDENTIAL,
|
'RH': cte.RESIDENTIAL,
|
||||||
'RI': cte.RESIDENTIAL,
|
'RI': cte.RESIDENTIAL,
|
||||||
'RK': cte.RESIDENTIAL,
|
'RK': cte.RESIDENTIAL,
|
||||||
'RM': cte.RESIDENTIAL,
|
'RM': cte.RESIDENTIAL,
|
||||||
'RR': cte.RESIDENTIAL,
|
'RR': cte.RESIDENTIAL,
|
||||||
'RS': cte.RESIDENTIAL,
|
'RS': cte.RESIDENTIAL,
|
||||||
'RW': cte.RESIDENTIAL,
|
'RW': cte.RESIDENTIAL,
|
||||||
'RX': cte.RESIDENTIAL,
|
'RX': cte.RESIDENTIAL,
|
||||||
'RZ': cte.RESIDENTIAL,
|
'RZ': cte.RESIDENTIAL,
|
||||||
'S0': cte.RESIDENTIAL,
|
'S0': cte.RESIDENTIAL,
|
||||||
'S1': cte.RESIDENTIAL,
|
'S1': cte.RESIDENTIAL,
|
||||||
'S2': cte.RESIDENTIAL,
|
'S2': cte.RESIDENTIAL,
|
||||||
'S3': cte.RESIDENTIAL,
|
'S3': cte.RESIDENTIAL,
|
||||||
'S4': cte.RESIDENTIAL,
|
'S4': cte.RESIDENTIAL,
|
||||||
'S5': cte.RESIDENTIAL,
|
'S5': cte.RESIDENTIAL,
|
||||||
'S9': cte.RESIDENTIAL,
|
'S9': cte.RESIDENTIAL,
|
||||||
'U0': cte.WAREHOUSE,
|
'U0': cte.WAREHOUSE,
|
||||||
'U1': cte.WAREHOUSE,
|
'U1': cte.WAREHOUSE,
|
||||||
'U2': cte.WAREHOUSE,
|
'U2': cte.WAREHOUSE,
|
||||||
'U3': cte.WAREHOUSE,
|
'U3': cte.WAREHOUSE,
|
||||||
'U4': cte.WAREHOUSE,
|
'U4': cte.WAREHOUSE,
|
||||||
'U5': cte.WAREHOUSE,
|
'U5': cte.WAREHOUSE,
|
||||||
'U6': cte.WAREHOUSE,
|
'U6': cte.WAREHOUSE,
|
||||||
'U7': cte.WAREHOUSE,
|
'U7': cte.WAREHOUSE,
|
||||||
'U8': cte.WAREHOUSE,
|
'U8': cte.WAREHOUSE,
|
||||||
'U9': cte.WAREHOUSE,
|
'U9': cte.WAREHOUSE,
|
||||||
'W1': cte.PRIMARY_SCHOOL,
|
'W1': cte.PRIMARY_SCHOOL,
|
||||||
'W2': cte.PRIMARY_SCHOOL,
|
'W2': cte.PRIMARY_SCHOOL,
|
||||||
'W3': cte.SECONDARY_SCHOOL,
|
'W3': cte.SECONDARY_SCHOOL,
|
||||||
'W4': cte.EDUCATION,
|
'W4': cte.EDUCATION,
|
||||||
'W5': cte.SECONDARY_SCHOOL,
|
'W5': cte.SECONDARY_SCHOOL,
|
||||||
'W6': cte.SECONDARY_SCHOOL,
|
'W6': cte.SECONDARY_SCHOOL,
|
||||||
'W7': cte.SECONDARY_SCHOOL,
|
'W7': cte.SECONDARY_SCHOOL,
|
||||||
'W8': cte.PRIMARY_SCHOOL,
|
'W8': cte.PRIMARY_SCHOOL,
|
||||||
'W9': cte.SECONDARY_SCHOOL,
|
'W9': cte.SECONDARY_SCHOOL,
|
||||||
'Y1': cte.LARGE_OFFICE,
|
'Y1': cte.LARGE_OFFICE,
|
||||||
'Y2': cte.LARGE_OFFICE,
|
'Y2': cte.LARGE_OFFICE,
|
||||||
'Y3': cte.LARGE_OFFICE,
|
'Y3': cte.LARGE_OFFICE,
|
||||||
'Y4': cte.LARGE_OFFICE,
|
'Y4': cte.LARGE_OFFICE,
|
||||||
'Y5': cte.LARGE_OFFICE,
|
'Y5': cte.LARGE_OFFICE,
|
||||||
'Y6': cte.LARGE_OFFICE,
|
'Y6': cte.LARGE_OFFICE,
|
||||||
'Y7': cte.LARGE_OFFICE,
|
'Y7': cte.LARGE_OFFICE,
|
||||||
'Y8': cte.LARGE_OFFICE,
|
'Y8': cte.LARGE_OFFICE,
|
||||||
'Y9': cte.LARGE_OFFICE,
|
'Y9': cte.LARGE_OFFICE,
|
||||||
'Z1': cte.LARGE_OFFICE
|
'Z1': cte.LARGE_OFFICE
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dictionary(self) -> dict:
|
def dictionary(self) -> dict:
|
||||||
|
@ -16,6 +16,8 @@ from hub.city_model_structure.attributes.polygon import Polygon
|
|||||||
from hub.city_model_structure.attributes.polyhedron import Polyhedron
|
from hub.city_model_structure.attributes.polyhedron import Polyhedron
|
||||||
from hub.helpers.location import Location
|
from hub.helpers.location import Location
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
|
||||||
class MapPoint:
|
class MapPoint:
|
||||||
def __init__(self, x, y):
|
def __init__(self, x, y):
|
||||||
@ -63,7 +65,7 @@ class GeometryHelper:
|
|||||||
return MapPoint(((city.upper_corner[0] - coordinate[0]) * 0.5), ((city.upper_corner[1] - coordinate[1]) * 0.5))
|
return MapPoint(((city.upper_corner[0] - coordinate[0]) * 0.5), ((city.upper_corner[1] - coordinate[1]) * 0.5))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def city_mapping(city, building_names=None):
|
def city_mapping(city, building_names=None, plot=False):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
Returns a shared_information dictionary like
|
Returns a shared_information dictionary like
|
||||||
@ -78,6 +80,8 @@ class GeometryHelper:
|
|||||||
y = int((city.upper_corner[1] - city.lower_corner[1]) * 0.5) + 1
|
y = int((city.upper_corner[1] - city.lower_corner[1]) * 0.5) + 1
|
||||||
city_map = [['' for _ in range(y + 1)] for _ in range(x + 1)]
|
city_map = [['' for _ in range(y + 1)] for _ in range(x + 1)]
|
||||||
map_info = [[{} for _ in range(y + 1)] for _ in range(x + 1)]
|
map_info = [[{} for _ in range(y + 1)] for _ in range(x + 1)]
|
||||||
|
img = Image.new('RGB', (x + 1, y + 1), "black") # create a new black image
|
||||||
|
city_image = img.load() # create the pixel map
|
||||||
for building_name in building_names:
|
for building_name in building_names:
|
||||||
building = city.city_object(building_name)
|
building = city.city_object(building_name)
|
||||||
line = 0
|
line = 0
|
||||||
@ -103,13 +107,14 @@ class GeometryHelper:
|
|||||||
'line_start': (coordinate[0], coordinate[1]),
|
'line_start': (coordinate[0], coordinate[1]),
|
||||||
'line_end': (next_coordinate[0], next_coordinate[1]),
|
'line_end': (next_coordinate[0], next_coordinate[1]),
|
||||||
}
|
}
|
||||||
|
city_image[x, y] = (100, 0, 0)
|
||||||
elif city_map[x][y] != building.name:
|
elif city_map[x][y] != building.name:
|
||||||
neighbour = city.city_object(city_map[x][y])
|
neighbour = city.city_object(city_map[x][y])
|
||||||
neighbour_info = map_info[x][y]
|
neighbour_info = map_info[x][y]
|
||||||
|
|
||||||
# prepare the keys
|
# prepare the keys
|
||||||
neighbour_start_coordinate = f'{neighbour_info["line_start"][0]}_{neighbour_info["line_start"][1]}'
|
neighbour_start_coordinate = f'{GeometryHelper.coordinate_to_map_point(neighbour_info["line_start"], city)}'
|
||||||
building_start_coordinate = f'{coordinate[0]}_{coordinate[1]}'
|
building_start_coordinate = f'{GeometryHelper.coordinate_to_map_point(coordinate, city)}'
|
||||||
neighbour_key = f'{neighbour.name}_{neighbour_start_coordinate}_{building_start_coordinate}'
|
neighbour_key = f'{neighbour.name}_{neighbour_start_coordinate}_{building_start_coordinate}'
|
||||||
building_key = f'{building.name}_{building_start_coordinate}_{neighbour_start_coordinate}'
|
building_key = f'{building.name}_{building_start_coordinate}_{neighbour_start_coordinate}'
|
||||||
|
|
||||||
@ -126,6 +131,10 @@ class GeometryHelper:
|
|||||||
'line_end': (next_coordinate[0], next_coordinate[1]),
|
'line_end': (next_coordinate[0], next_coordinate[1]),
|
||||||
'neighbour_line_start': neighbour_info['line_start'],
|
'neighbour_line_start': neighbour_info['line_start'],
|
||||||
'neighbour_line_end': neighbour_info['line_end'],
|
'neighbour_line_end': neighbour_info['line_end'],
|
||||||
|
'coordinate_start': f"{GeometryHelper.coordinate_to_map_point(coordinate, city)}",
|
||||||
|
'coordinate_end': f"{GeometryHelper.coordinate_to_map_point(next_coordinate, city)}",
|
||||||
|
'neighbour_start': f"{GeometryHelper.coordinate_to_map_point(neighbour_info['line_start'], city)}",
|
||||||
|
'neighbour_end': f"{GeometryHelper.coordinate_to_map_point(neighbour_info['line_end'], city)}",
|
||||||
'shared_points': 1
|
'shared_points': 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,6 +151,10 @@ class GeometryHelper:
|
|||||||
'line_end': neighbour_info['line_end'],
|
'line_end': neighbour_info['line_end'],
|
||||||
'neighbour_line_start': (coordinate[0], coordinate[1]),
|
'neighbour_line_start': (coordinate[0], coordinate[1]),
|
||||||
'neighbour_line_end': (next_coordinate[0], next_coordinate[1]),
|
'neighbour_line_end': (next_coordinate[0], next_coordinate[1]),
|
||||||
|
'neighbour_start': f"{GeometryHelper.coordinate_to_map_point(coordinate, city)}",
|
||||||
|
'neighbour_end': f"{GeometryHelper.coordinate_to_map_point(next_coordinate, city)}",
|
||||||
|
'coordinate_start': f"{GeometryHelper.coordinate_to_map_point(neighbour_info['line_start'], city)}",
|
||||||
|
'coordinate_end': f"{GeometryHelper.coordinate_to_map_point(neighbour_info['line_end'], city)}",
|
||||||
'shared_points': 1
|
'shared_points': 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,6 +167,8 @@ class GeometryHelper:
|
|||||||
elif building not in neighbour.neighbours:
|
elif building not in neighbour.neighbours:
|
||||||
neighbour.neighbours.append(building)
|
neighbour.neighbours.append(building)
|
||||||
line += 1
|
line += 1
|
||||||
|
if plot:
|
||||||
|
img.show()
|
||||||
return lines_information
|
return lines_information
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -6,7 +6,7 @@ log_dir = (Path(__file__).parent.parent / 'logs').resolve()
|
|||||||
log_file = (log_dir / 'hub.log').resolve()
|
log_file = (log_dir / 'hub.log').resolve()
|
||||||
try:
|
try:
|
||||||
if not os.path.isfile(log_file):
|
if not os.path.isfile(log_file):
|
||||||
if not os.path.exists:
|
if not os.path.exists(log_dir):
|
||||||
os.mkdir(log_dir)
|
os.mkdir(log_dir)
|
||||||
with open(log_file, 'x'):
|
with open(log_file, 'x'):
|
||||||
pass
|
pass
|
||||||
|
@ -4,8 +4,10 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later
|
|||||||
Copyright © 2022 Concordia CERC group
|
Copyright © 2022 Concordia CERC group
|
||||||
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import math
|
import math
|
||||||
import sys
|
import sys
|
||||||
|
from hub.hub_logger import logger
|
||||||
|
|
||||||
import hub.helpers.constants as cte
|
import hub.helpers.constants as cte
|
||||||
from hub.catalog_factories.construction_catalog_factory import ConstructionCatalogFactory
|
from hub.catalog_factories.construction_catalog_factory import ConstructionCatalogFactory
|
||||||
@ -37,10 +39,13 @@ class NrcanPhysicsParameters:
|
|||||||
function = Dictionaries().hub_function_to_nrcan_construction_function[building.function]
|
function = Dictionaries().hub_function_to_nrcan_construction_function[building.function]
|
||||||
archetype = self._search_archetype(nrcan_catalog, function, building.year_of_construction, self._climate_zone)
|
archetype = self._search_archetype(nrcan_catalog, function, building.year_of_construction, self._climate_zone)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
logger.error(f'Building {building.name} has unknown construction archetype for building function: '
|
||||||
|
f'{building.function}, building year of construction: {building.year_of_construction} '
|
||||||
|
f'and climate zone {self._climate_zone}\n')
|
||||||
sys.stderr.write(f'Building {building.name} has unknown construction archetype for building function: '
|
sys.stderr.write(f'Building {building.name} has unknown construction archetype for building function: '
|
||||||
f'{building.function}, building year of construction: {building.year_of_construction} '
|
f'{building.function}, building year of construction: {building.year_of_construction} '
|
||||||
f'and climate zone {self._climate_zone}\n')
|
f'and climate zone {self._climate_zone}\n')
|
||||||
return
|
continue
|
||||||
# if building has no thermal zones defined from geometry, and the building will be divided in storeys,
|
# if building has no thermal zones defined from geometry, and the building will be divided in storeys,
|
||||||
# one thermal zone per storey is assigned
|
# one thermal zone per storey is assigned
|
||||||
if len(building.internal_zones) == 1:
|
if len(building.internal_zones) == 1:
|
||||||
|
@ -39,14 +39,14 @@ class NrelPhysicsParameters:
|
|||||||
archetype = self._search_archetype(nrel_catalog, function, building.year_of_construction,
|
archetype = self._search_archetype(nrel_catalog, function, building.year_of_construction,
|
||||||
self._climate_zone)
|
self._climate_zone)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
logger.error(f'Building {building.name} has unknown archetype for building function: {building.function} '
|
logger.error(f'Building {building.name} has unknown construction archetype for building function: '
|
||||||
f'and building year of construction: {building.year_of_construction} '
|
f'{building.function} and building year of construction: {building.year_of_construction} '
|
||||||
f'and climate zone reference norm {self._climate_zone}\n')
|
f'and climate zone reference norm {self._climate_zone}\n')
|
||||||
sys.stderr.write(f'Building {building.name} has unknown archetype for building function: {building.function} '
|
sys.stderr.write(f'Building {building.name} has unknown construction archetype for building function: '
|
||||||
f'and building year of construction: {building.year_of_construction} '
|
f'{building.function} and building year of construction: {building.year_of_construction} '
|
||||||
f'and climate zone reference norm {self._climate_zone}\n')
|
f'and climate zone reference norm {self._climate_zone}\n')
|
||||||
|
|
||||||
return
|
continue
|
||||||
|
|
||||||
# if building has no thermal zones defined from geometry, and the building will be divided in storeys,
|
# if building has no thermal zones defined from geometry, and the building will be divided in storeys,
|
||||||
# one thermal zone per storey is assigned
|
# one thermal zone per storey is assigned
|
||||||
|
@ -6,6 +6,7 @@ Project Coder Guillermo Gutierrez Guillermo.GutierrezMorote@concordia.ca
|
|||||||
"""
|
"""
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
import trimesh.creation
|
import trimesh.creation
|
||||||
|
|
||||||
from pyproj import Transformer
|
from pyproj import Transformer
|
||||||
@ -64,8 +65,11 @@ class Geojson:
|
|||||||
buildings = []
|
buildings = []
|
||||||
for zone, surface_coordinates in enumerate(surfaces_coordinates):
|
for zone, surface_coordinates in enumerate(surfaces_coordinates):
|
||||||
points = igh.points_from_string(igh.remove_last_point_from_string(surface_coordinates))
|
points = igh.points_from_string(igh.remove_last_point_from_string(surface_coordinates))
|
||||||
|
# geojson provides the roofs, need to be transform into grounds
|
||||||
|
points = igh.invert_points(points)
|
||||||
polygon = Polygon(points)
|
polygon = Polygon(points)
|
||||||
surfaces.append(Surface(polygon, polygon, surface_type=cte.GROUND))
|
polygon.area = igh.ground_area(points)
|
||||||
|
surfaces.append(Surface(polygon, polygon))
|
||||||
buildings.append(Building(f'{name}_zone_{zone}', surfaces, year_of_construction, function))
|
buildings.append(Building(f'{name}_zone_{zone}', surfaces, year_of_construction, function))
|
||||||
return buildings
|
return buildings
|
||||||
|
|
||||||
@ -74,22 +78,41 @@ class Geojson:
|
|||||||
lod0_buildings = Geojson._create_buildings_lod0(name, year_of_construction, function, surface_coordinates)
|
lod0_buildings = Geojson._create_buildings_lod0(name, year_of_construction, function, surface_coordinates)
|
||||||
surfaces = []
|
surfaces = []
|
||||||
buildings = []
|
buildings = []
|
||||||
|
|
||||||
for zone, lod0_building in enumerate(lod0_buildings):
|
for zone, lod0_building in enumerate(lod0_buildings):
|
||||||
for surface in lod0_building.surfaces:
|
for surface in lod0_building.grounds:
|
||||||
shapely_polygon = ShapelyPolygon(surface.solid_polygon.coordinates)
|
volume = surface.solid_polygon.area * height
|
||||||
if not shapely_polygon.is_valid:
|
surfaces.append(surface)
|
||||||
print(surface.solid_polygon.area)
|
roof_coordinates = []
|
||||||
print('error?', name, surface_coordinates)
|
# adding a roof means invert the polygon coordinates and change the Z value
|
||||||
continue
|
for coordinate in surface.solid_polygon.coordinates:
|
||||||
mesh = trimesh.creation.extrude_polygon(shapely_polygon, height)
|
roof_coordinate = np.array([coordinate[0], coordinate[1], height])
|
||||||
for face in mesh.faces:
|
# insert the roof rotated already
|
||||||
points = []
|
roof_coordinates.insert(0, roof_coordinate)
|
||||||
for vertex_index in face:
|
polygon = Polygon(roof_coordinates)
|
||||||
points.append(mesh.vertices[vertex_index])
|
roof = Surface(polygon, polygon)
|
||||||
polygon = Polygon(points)
|
surfaces.append(roof)
|
||||||
surface = Surface(polygon, polygon)
|
# adding a wall means add the point coordinates and the next point coordinates with Z's height and 0
|
||||||
surfaces.append(surface)
|
coordinates_length = len(roof.solid_polygon.coordinates)
|
||||||
buildings.append(Building(f'{name}_zone_{zone}', surfaces, year_of_construction, function))
|
for i, coordinate in enumerate(roof.solid_polygon.coordinates):
|
||||||
|
j = i + 1
|
||||||
|
if j == coordinates_length:
|
||||||
|
j = 0
|
||||||
|
next_coordinate = roof.solid_polygon.coordinates[j]
|
||||||
|
wall_coordinates = [
|
||||||
|
np.array([coordinate[0], coordinate[1], 0.0]),
|
||||||
|
np.array([next_coordinate[0], next_coordinate[1], 0.0]),
|
||||||
|
np.array([next_coordinate[0], next_coordinate[1], next_coordinate[2]]),
|
||||||
|
np.array([coordinate[0], coordinate[1], coordinate[2]])
|
||||||
|
]
|
||||||
|
polygon = Polygon(wall_coordinates)
|
||||||
|
wall = Surface(polygon, polygon)
|
||||||
|
surfaces.append(wall)
|
||||||
|
|
||||||
|
building = Building(f'{name}_zone_{zone}', surfaces, year_of_construction, function)
|
||||||
|
building.volume = volume
|
||||||
|
buildings.append(building)
|
||||||
|
|
||||||
return buildings
|
return buildings
|
||||||
|
|
||||||
def _get_polygons(self, polygons, coordinates):
|
def _get_polygons(self, polygons, coordinates):
|
||||||
@ -119,6 +142,8 @@ class Geojson:
|
|||||||
|
|
||||||
def _store_shared_percentage_to_walls(self, city, city_mapped):
|
def _store_shared_percentage_to_walls(self, city, city_mapped):
|
||||||
for building in city.buildings:
|
for building in city.buildings:
|
||||||
|
if building.name not in city_mapped.keys():
|
||||||
|
continue
|
||||||
building_mapped = city_mapped[building.name]
|
building_mapped = city_mapped[building.name]
|
||||||
for wall in building.walls:
|
for wall in building.walls:
|
||||||
percentage = 0
|
percentage = 0
|
||||||
|
@ -4,6 +4,8 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later
|
|||||||
Copyright © 2022 Concordia CERC group
|
Copyright © 2022 Concordia CERC group
|
||||||
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||||
"""
|
"""
|
||||||
|
import math
|
||||||
|
import sys
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
@ -45,3 +47,69 @@ class GeometryHelper:
|
|||||||
array = points.split(' ')
|
array = points.split(' ')
|
||||||
res = " "
|
res = " "
|
||||||
return res.join(array[0:len(array) - 3])
|
return res.join(array[0:len(array) - 3])
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def invert_points(points):
|
||||||
|
res = []
|
||||||
|
for point in points:
|
||||||
|
res.insert(0,point)
|
||||||
|
return res
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def ground_area(points):
|
||||||
|
"""
|
||||||
|
Get ground surface area in square meters
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
# New method to calculate area
|
||||||
|
|
||||||
|
if len(points) < 3:
|
||||||
|
sys.stderr.write('Warning: the area of a line or point cannot be calculated 1. Area = 0\n')
|
||||||
|
return 0
|
||||||
|
alpha = 0
|
||||||
|
vec_1 = points[1] - points[0]
|
||||||
|
for i in range(2, len(points)):
|
||||||
|
vec_2 = points[i] - points[0]
|
||||||
|
alpha += GeometryHelper.angle_between_vectors(vec_1, vec_2)
|
||||||
|
if alpha == 0:
|
||||||
|
sys.stderr.write('Warning: the area of a line or point cannot be calculated 2. Area = 0\n')
|
||||||
|
return 0
|
||||||
|
#
|
||||||
|
horizontal_points = points
|
||||||
|
area = 0
|
||||||
|
for i in range(0, len(horizontal_points) - 1):
|
||||||
|
point = horizontal_points[i]
|
||||||
|
next_point = horizontal_points[i + 1]
|
||||||
|
area += (next_point[1] + point[1]) / 2 * (next_point[0] - point[0])
|
||||||
|
next_point = horizontal_points[0]
|
||||||
|
point = horizontal_points[len(horizontal_points) - 1]
|
||||||
|
area += (next_point[1] + point[1]) / 2 * (next_point[0] - point[0])
|
||||||
|
_area = abs(area)
|
||||||
|
return _area
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def angle_between_vectors(vec_1, vec_2):
|
||||||
|
"""
|
||||||
|
angle between vectors in radians
|
||||||
|
:param vec_1: vector
|
||||||
|
:param vec_2: vector
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
if np.linalg.norm(vec_1) == 0 or np.linalg.norm(vec_2) == 0:
|
||||||
|
sys.stderr.write("Warning: impossible to calculate angle between planes' normal. Return 0\n")
|
||||||
|
return 0
|
||||||
|
cosine = np.dot(vec_1, vec_2) / np.linalg.norm(vec_1) / np.linalg.norm(vec_2)
|
||||||
|
if cosine > 1 and cosine - 1 < 1e-5:
|
||||||
|
cosine = 1
|
||||||
|
elif cosine < -1 and cosine + 1 > -1e-5:
|
||||||
|
cosine = -1
|
||||||
|
alpha = math.acos(cosine)
|
||||||
|
return alpha
|
||||||
|
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def invert_points(points):
|
||||||
|
res = []
|
||||||
|
for point in points:
|
||||||
|
res.insert(0,point)
|
||||||
|
return res
|
||||||
|
@ -44,7 +44,7 @@ class ComnetUsageParameters:
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
sys.stderr.write(f'Building {building.name} has unknown usage archetype for building function:'
|
sys.stderr.write(f'Building {building.name} has unknown usage archetype for building function:'
|
||||||
f' {building.function}')
|
f' {building.function}')
|
||||||
return
|
continue
|
||||||
|
|
||||||
for internal_zone in building.internal_zones:
|
for internal_zone in building.internal_zones:
|
||||||
if internal_zone.area is None:
|
if internal_zone.area is None:
|
||||||
|
@ -43,7 +43,7 @@ class NrcanUsageParameters:
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
sys.stderr.write(f'Building {building.name} has unknown usage archetype for building function:'
|
sys.stderr.write(f'Building {building.name} has unknown usage archetype for building function:'
|
||||||
f' {building.function}')
|
f' {building.function}')
|
||||||
return
|
continue
|
||||||
|
|
||||||
usage_name = Dictionaries().hub_usage_to_comnet_usage[building.function]
|
usage_name = Dictionaries().hub_usage_to_comnet_usage[building.function]
|
||||||
try:
|
try:
|
||||||
@ -51,7 +51,7 @@ class NrcanUsageParameters:
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
sys.stderr.write(f'Building {building.name} has unknown usage archetype for building function:'
|
sys.stderr.write(f'Building {building.name} has unknown usage archetype for building function:'
|
||||||
f' {building.function}')
|
f' {building.function}')
|
||||||
return
|
continue
|
||||||
|
|
||||||
for internal_zone in building.internal_zones:
|
for internal_zone in building.internal_zones:
|
||||||
if internal_zone.area is None:
|
if internal_zone.area is None:
|
||||||
|
@ -22,4 +22,5 @@ bcrypt==4.0.1
|
|||||||
shapely
|
shapely
|
||||||
geopandas
|
geopandas
|
||||||
triangle
|
triangle
|
||||||
psycopg2-binary
|
psycopg2-binary
|
||||||
|
PIL
|
@ -4,11 +4,13 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later
|
|||||||
Copyright © 2022 Concordia CERC group
|
Copyright © 2022 Concordia CERC group
|
||||||
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||||
"""
|
"""
|
||||||
|
import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from hub.helpers.geometry_helper import GeometryHelper
|
from hub.helpers.geometry_helper import GeometryHelper
|
||||||
|
|
||||||
|
from numpy import inf
|
||||||
|
|
||||||
import hub.exports.exports_factory
|
import hub.exports.exports_factory
|
||||||
from hub.imports.construction_factory import ConstructionFactory
|
from hub.imports.construction_factory import ConstructionFactory
|
||||||
from hub.imports.geometry_factory import GeometryFactory
|
from hub.imports.geometry_factory import GeometryFactory
|
||||||
@ -116,7 +118,6 @@ class TestGeometryFactory(TestCase):
|
|||||||
city = self._get_city(file, 'rhino')
|
city = self._get_city(file, 'rhino')
|
||||||
self.assertIsNotNone(city, 'city is none')
|
self.assertIsNotNone(city, 'city is none')
|
||||||
self.assertTrue(len(city.buildings) == 36)
|
self.assertTrue(len(city.buildings) == 36)
|
||||||
i = 0
|
|
||||||
|
|
||||||
def test_import_obj(self):
|
def test_import_obj(self):
|
||||||
"""
|
"""
|
||||||
@ -133,18 +134,20 @@ class TestGeometryFactory(TestCase):
|
|||||||
"""
|
"""
|
||||||
Test geojson import
|
Test geojson import
|
||||||
"""
|
"""
|
||||||
file = 'neighbours.geojson'
|
file = '2000_buildings.geojson'
|
||||||
|
start = datetime.datetime.now()
|
||||||
city = self._get_city(file, 'geojson',
|
city = self._get_city(file, 'geojson',
|
||||||
height_field='citygml_me',
|
height_field='building_height',
|
||||||
year_of_construction_field='ANNEE_CONS',
|
year_of_construction_field='ANNEE_CONS',
|
||||||
function_field='CODE_UTILI')
|
function_field='CODE_UTILI')
|
||||||
|
end = datetime.datetime.now()
|
||||||
|
print(f'geometry load in {end-start} s')
|
||||||
|
start = datetime.datetime.now()
|
||||||
hub.exports.exports_factory.ExportsFactory('obj', city, self._output_path).export()
|
hub.exports.exports_factory.ExportsFactory('obj', city, self._output_path).export()
|
||||||
self.assertEqual(207, len(city.buildings), 'wrong number of buildings')
|
end = datetime.datetime.now()
|
||||||
|
print(f'geometry export in {end - start} s')
|
||||||
|
self.assertEqual(2356, len(city.buildings), 'wrong number of buildings')
|
||||||
self._check_buildings(city)
|
self._check_buildings(city)
|
||||||
for building in city.buildings:
|
|
||||||
for wall in building.walls:
|
|
||||||
self.assertIsNotNone(wall.percentage_shared, 'wall percentage shared is not assigned')
|
|
||||||
|
|
||||||
def test_map_neighbours(self):
|
def test_map_neighbours(self):
|
||||||
"""
|
"""
|
||||||
@ -155,7 +158,13 @@ class TestGeometryFactory(TestCase):
|
|||||||
height_field='citygml_me',
|
height_field='citygml_me',
|
||||||
year_of_construction_field='ANNEE_CONS',
|
year_of_construction_field='ANNEE_CONS',
|
||||||
function_field='LIBELLE_UT')
|
function_field='LIBELLE_UT')
|
||||||
print(GeometryHelper.city_mapping(city))
|
info_lod1 = GeometryHelper.city_mapping(city, plot=False)
|
||||||
|
city = self._get_city(file, 'geojson',
|
||||||
|
year_of_construction_field='ANNEE_CONS',
|
||||||
|
function_field='LIBELLE_UT')
|
||||||
|
info_lod0 = GeometryHelper.city_mapping(city, plot=False)
|
||||||
|
hub.exports.exports_factory.ExportsFactory('obj', city, self._output_path).export()
|
||||||
|
self.assertEqual(info_lod0, info_lod1)
|
||||||
for building in city.buildings:
|
for building in city.buildings:
|
||||||
self.assertEqual(2, len(building.neighbours))
|
self.assertEqual(2, len(building.neighbours))
|
||||||
|
|
||||||
@ -165,4 +174,3 @@ class TestGeometryFactory(TestCase):
|
|||||||
self.assertEqual('3_part_0_zone_0',city.city_object('2_part_0_zone_0').neighbours[1].name)
|
self.assertEqual('3_part_0_zone_0',city.city_object('2_part_0_zone_0').neighbours[1].name)
|
||||||
self.assertEqual('1_part_0_zone_0', city.city_object('3_part_0_zone_0').neighbours[0].name)
|
self.assertEqual('1_part_0_zone_0', city.city_object('3_part_0_zone_0').neighbours[0].name)
|
||||||
self.assertEqual('2_part_0_zone_0', city.city_object('3_part_0_zone_0').neighbours[1].name)
|
self.assertEqual('2_part_0_zone_0', city.city_object('3_part_0_zone_0').neighbours[1].name)
|
||||||
|
|
||||||
|
1
hub/unittests/tests_data/2000_buildings.geojson
Normal file
1
hub/unittests/tests_data/2000_buildings.geojson
Normal file
File diff suppressed because one or more lines are too long
@ -12,18 +12,18 @@
|
|||||||
-73.580414175680588,
|
-73.580414175680588,
|
||||||
45.497641136608358
|
45.497641136608358
|
||||||
],
|
],
|
||||||
[
|
|
||||||
-73.581414175680588,
|
|
||||||
45.497641136608358
|
|
||||||
],
|
|
||||||
[
|
|
||||||
-73.581414175680588,
|
|
||||||
45.498641136608358
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
-73.580414175680588,
|
-73.580414175680588,
|
||||||
45.498641136608358
|
45.498641136608358
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
-73.581414175680588,
|
||||||
|
45.498641136608358
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-73.581414175680588,
|
||||||
|
45.497641136608358
|
||||||
|
],
|
||||||
[
|
[
|
||||||
-73.580414175680588,
|
-73.580414175680588,
|
||||||
45.497641136608358
|
45.497641136608358
|
||||||
@ -204,19 +204,20 @@
|
|||||||
[
|
[
|
||||||
-73.581414175680588,
|
-73.581414175680588,
|
||||||
45.497641136608358
|
45.497641136608358
|
||||||
|
]
|
||||||
|
,
|
||||||
|
[
|
||||||
|
-73.581414175680588,
|
||||||
|
45.498441136608358
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-73.582214175680588,
|
||||||
|
45.498441136608358
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
-73.582214175680588,
|
-73.582214175680588,
|
||||||
45.497641136608358
|
45.497641136608358
|
||||||
],
|
],
|
||||||
[
|
|
||||||
-73.582214175680588,
|
|
||||||
45.498441136608358
|
|
||||||
],
|
|
||||||
[
|
|
||||||
-73.581414175680588,
|
|
||||||
45.498441136608358
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
-73.581414175680588,
|
-73.581414175680588,
|
||||||
45.497641136608358
|
45.497641136608358
|
||||||
@ -399,31 +400,30 @@
|
|||||||
-73.581914175680588,
|
-73.581914175680588,
|
||||||
45.498441136608358
|
45.498441136608358
|
||||||
],
|
],
|
||||||
[
|
|
||||||
-73.581914175680588,
|
|
||||||
45.499641136608358
|
|
||||||
],
|
|
||||||
[
|
|
||||||
-73.580914175680588,
|
|
||||||
45.499641136608358
|
|
||||||
],
|
|
||||||
[
|
|
||||||
-73.580914175680588,
|
|
||||||
45.498641136608358
|
|
||||||
],
|
|
||||||
[
|
|
||||||
-73.581414175680588,
|
|
||||||
45.498641136608358
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
-73.581414175680588,
|
-73.581414175680588,
|
||||||
45.498441136608358
|
45.498441136608358
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
-73.581414175680588,
|
||||||
|
45.498641136608358
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-73.580914175680588,
|
||||||
|
45.498641136608358
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-73.580914175680588,
|
||||||
|
45.499641136608358
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-73.581914175680588,
|
||||||
|
45.499641136608358
|
||||||
|
],
|
||||||
[
|
[
|
||||||
-73.581914175680588,
|
-73.581914175680588,
|
||||||
45.498441136608358
|
45.498441136608358
|
||||||
]
|
]
|
||||||
|
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -1 +1 @@
|
|||||||
__version__ = '0.1.7.9'
|
__version__ = '0.1.7.10'
|
||||||
|
Loading…
Reference in New Issue
Block a user