Review changes for CityGml import factory change to use the new format for surfaces based in polygons

This commit is contained in:
Guille Gutierrez 2021-04-07 11:46:44 -04:00
parent 88e43a0770
commit 09ee39c314
6 changed files with 25 additions and 17 deletions

View File

@ -85,7 +85,7 @@ class EnergyAde:
buildings.append(building_dic) buildings.append(building_dic)
energy_ade['core:CityModel']['core:cityObjectMember'] = buildings energy_ade['core:CityModel']['core:cityObjectMember'] = buildings
print(energy_ade)
file_name = self._city.name + '_ade.gml' file_name = self._city.name + '_ade.gml'
file_path = Path(self._path / file_name).resolve() file_path = Path(self._path / file_name).resolve()
with open(file_path, 'w' ) as file: with open(file_path, 'w' ) as file:
@ -93,6 +93,7 @@ class EnergyAde:
@staticmethod @staticmethod
def _measures(building, building_dic): def _measures(building, building_dic):
#todo: this method is only for year and insel need to be generalized
measures = [] measures = []
measure = EnergyAde._measure(building.heating, 'year', 'Energy demand heating', 'INSEL') measure = EnergyAde._measure(building.heating, 'year', 'Energy demand heating', 'INSEL')
if measure is not None: if measure is not None:
@ -172,6 +173,7 @@ class EnergyAde:
'#text': f'{building.max_height}' '#text': f'{building.max_height}'
} }
building_dic['bldg:Building']['bldg:storeysAboveGround'] = building.storeys_above_ground building_dic['bldg:Building']['bldg:storeysAboveGround'] = building.storeys_above_ground
if building.lod == 1: if building.lod == 1:
building_dic = self._lod1(building, building_dic, city) building_dic = self._lod1(building, building_dic, city)
elif building.lod == 2: elif building.lod == 2:
@ -202,7 +204,6 @@ class EnergyAde:
surface_type = 'bldg:GroundSurface' surface_type = 'bldg:GroundSurface'
else: else:
surface_type = 'bldg:RoofSurface' surface_type = 'bldg:RoofSurface'
surface_dic = { surface_dic = {
surface_type: { surface_type: {
'@gml:id': f'GML_{uuid.uuid4()}', '@gml:id': f'GML_{uuid.uuid4()}',
@ -229,9 +230,9 @@ class EnergyAde:
'@gml:id': f'PolyId{surface.name}_0', '@gml:id': f'PolyId{surface.name}_0',
'gml:posList': { 'gml:posList': {
'@srsDimension': '3', '@srsDimension': '3',
'@count': len(surface.points) + 1, '@count': len(surface.solid_polygon.points) + 1,
'#text': f'{" ".join(map(str, surface.solid_polygon.points_list))} ' '#text': f'{" ".join(map(str, surface.solid_polygon.points_list))} '
f'{" ".join(map(str, surface.points[0]))}' f'{" ".join(map(str, surface.solid_polygon.points[0]))}'
} }
} }
} }
@ -261,6 +262,7 @@ class EnergyAde:
def _thermal_zones(self, building, city): def _thermal_zones(self, building, city):
thermal_zones = [] thermal_zones = []
for index, thermal_zone in enumerate(building.thermal_zones): for index, thermal_zone in enumerate(building.thermal_zones):
print('debug me2')
usage_zones = [] usage_zones = []
for usage_zone in thermal_zone.usage_zones: for usage_zone in thermal_zone.usage_zones:
usage_zones.append({'@xlink:href': f'#GML_{usage_zone.id}'}) usage_zones.append({'@xlink:href': f'#GML_{usage_zone.id}'})

View File

@ -17,7 +17,6 @@ class PhysicsFactory:
self._handler = '_' + handler.lower().replace(' ', '_') self._handler = '_' + handler.lower().replace(' ', '_')
self._city = city self._city = city
self._base_path = base_path self._base_path = base_path
self.factory()
def _us_new_york(self): def _us_new_york(self):
UsNewYorkCityPhysicsParameters(self._city, self._base_path).enrich_buildings() UsNewYorkCityPhysicsParameters(self._city, self._base_path).enrich_buildings()
@ -34,7 +33,7 @@ class PhysicsFactory:
def _es(self): def _es(self):
raise NotImplementedError raise NotImplementedError
def factory(self): def enrich(self):
""" """
Enrich the city with the physics information Enrich the city with the physics information
:return: None :return: None

View File

@ -16,12 +16,11 @@ class SchedulesFactory:
self._handler = '_' + handler.lower().replace(' ', '_') self._handler = '_' + handler.lower().replace(' ', '_')
self._city = city self._city = city
self._base_path = base_path self._base_path = base_path
self.factory()
def _comnet(self): def _comnet(self):
ComnetSchedules(self._city, self._base_path) ComnetSchedules(self._city, self._base_path)
def factory(self): def enrich(self):
""" """
Enrich the city with the schedules information Enrich the city with the schedules information
:return: None :return: None

View File

@ -17,7 +17,6 @@ class UsageFactory:
self._handler = '_' + handler.lower().replace(' ', '_') self._handler = '_' + handler.lower().replace(' ', '_')
self._city = city self._city = city
self._base_path = base_path self._base_path = base_path
self.factory()
def _us_new_york(self): def _us_new_york(self):
UsNewYorkCityUsageParameters(self._city, self._base_path).enrich_buildings() UsNewYorkCityUsageParameters(self._city, self._base_path).enrich_buildings()
@ -31,7 +30,7 @@ class UsageFactory:
def _es(self): def _es(self):
raise Exception('Not implemented') raise Exception('Not implemented')
def factory(self): def enrich(self):
""" """
Enrich the city with the usage information Enrich the city with the usage information
:return: None :return: None

View File

@ -18,7 +18,6 @@ class WeatherFactory:
self._city = city self._city = city
self._base_path = base_path self._base_path = base_path
self._city_name = city_name self._city_name = city_name
self.factory()
def _dat(self): def _dat(self):
DatWeatherParameters(self._city, self._base_path, self._city_name) DatWeatherParameters(self._city, self._base_path, self._city_name)
@ -30,7 +29,7 @@ class WeatherFactory:
name = 'ISO_52016_1_BESTEST_ClimData_2016.08.24' name = 'ISO_52016_1_BESTEST_ClimData_2016.08.24'
XlsWeatherParameters(self._city, self._base_path, name) XlsWeatherParameters(self._city, self._base_path, name)
def factory(self): def enrich(self):
""" """
Enrich the city with the usage information Enrich the city with the usage information
:return: None :return: None

View File

@ -3,17 +3,19 @@ TestExports test and validate the city export formats
SPDX - License - Identifier: LGPL - 3.0 - or -later SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
""" """
from pathlib import Path from pathlib import Path
from unittest import TestCase from unittest import TestCase
import pandas as pd
from imports.geometry_factory import GeometryFactory from imports.geometry_factory import GeometryFactory
from imports.physics_factory import PhysicsFactory
from imports.schedules_factory import SchedulesFactory
from imports.usage_factory import UsageFactory
from exports.exports_factory import ExportsFactory from exports.exports_factory import ExportsFactory
from city_model_structure.city import City
class TestExports(TestCase): class TestExports(TestCase):
""" """
TestGeometryFactory TestCase 1 TestExports class contains the unittest for export functionality
""" """
def setUp(self) -> None: def setUp(self) -> None:
""" """
@ -26,8 +28,16 @@ class TestExports(TestCase):
def _get_city(self): def _get_city(self):
if self._city_gml is None: if self._city_gml is None:
file_path = (self._example_path / 'one_building_in_kelowna.pickle').resolve() file_path = (self._example_path / 'one_building_in_kelowna.gml').resolve()
self._city_gml = City.load(file_path) self._city_gml = GeometryFactory('citygml', file_path).city
PhysicsFactory('ca', self._city_gml).enrich()
UsageFactory('ca', self._city_gml).enrich()
SchedulesFactory('comnet', self._city_gml).enrich()
for building in self._city_gml.buildings:
building.heating['month'] = pd.DataFrame({'INSEL': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]})
building.cooling['month'] = pd.DataFrame({'INSEL': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]})
building.heating['year'] = pd.DataFrame({'INSEL': [0.0]})
building.cooling['year'] = pd.DataFrame({'INSEL': [0.0]})
return self._city_gml return self._city_gml
def _export(self, export_type): def _export(self, export_type):