forked from s_ranjbar/city_retrofit
Guille
a33bf0b366
Results are still missing and need to be added to the final commit. including the db table creation that seems to be missing
70 lines
2.8 KiB
Python
70 lines
2.8 KiB
Python
"""
|
|
Model representation of a city object
|
|
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
|
Copyright © 2022 Concordia CERC group
|
|
Project Coder Guille Gutierrez Guillermo.GutierrezMorote@concordia.ca
|
|
"""
|
|
|
|
import datetime
|
|
|
|
from sqlalchemy import Column, Integer, String, Sequence, ForeignKey, Float
|
|
from sqlalchemy import DateTime
|
|
|
|
from hub.city_model_structure.building import Building
|
|
from hub.persistence.configuration import Models
|
|
|
|
|
|
class CityObject(Models):
|
|
"""
|
|
A model representation of an application
|
|
"""
|
|
__tablename__ = 'city_object'
|
|
id = Column(Integer, Sequence('city_object_id_seq'), primary_key=True)
|
|
city_id = Column(Integer, ForeignKey('city.id'), nullable=False)
|
|
name = Column(String, nullable=False)
|
|
alias = Column(String, nullable=True)
|
|
type = Column(String, nullable=False)
|
|
year_of_construction = Column(Integer, nullable=True)
|
|
function = Column(String, nullable=True)
|
|
usage = Column(String, nullable=True)
|
|
volume = Column(Float, nullable=False)
|
|
area = Column(Float, nullable=False)
|
|
total_heating_area = Column(Float, nullable=False)
|
|
wall_area = Column(Float, nullable=False)
|
|
windows_area = Column(Float, nullable=False)
|
|
system_name = Column(String, nullable=False)
|
|
created = Column(DateTime, default=datetime.datetime.utcnow)
|
|
updated = Column(DateTime, default=datetime.datetime.utcnow)
|
|
|
|
# def __init__(self, city_id, name, alias, object_type, year_of_construction, function, usage, volume, area):
|
|
def __init__(self, city_id, building: Building):
|
|
self.city_id = city_id
|
|
self.name = building.name
|
|
self.alias = building.alias
|
|
self.type = building.type
|
|
self.year_of_construction = building.year_of_construction
|
|
self.function = building.function
|
|
self.usage = building.usages_percentage
|
|
self.volume = building.volume
|
|
self.area = building.floor_area
|
|
storeys = building.storeys_above_ground
|
|
if storeys is None:
|
|
print(building.average_storey_height)
|
|
storeys = building.max_height / building.average_storey_height
|
|
self.total_heating_area = building.floor_area * storeys
|
|
wall_area = 0
|
|
for wall in building.walls:
|
|
wall_area += wall.solid_polygon.area
|
|
self.wall_area = wall_area
|
|
window_ratio = 0
|
|
for internal_zone in building.internal_zones:
|
|
for thermal_zone in internal_zone.thermal_zones:
|
|
for thermal_boundary in thermal_zone.thermal_boundaries:
|
|
window_ratio = thermal_boundary.window_ratio
|
|
break
|
|
self.windows_area = wall_area * window_ratio
|
|
system_name = building.energy_systems_archetype_name
|
|
if system_name is None:
|
|
system_name = ''
|
|
self.system_name = system_name
|