Changes in libs to new concept of keywords in libraries. Added new tests.
This commit is contained in:
parent
9dcc12fd68
commit
f8a65b6057
|
@ -41,7 +41,7 @@ class ThermalOpening:
|
|||
Get thermal opening openable ratio, NOT IMPLEMENTED
|
||||
:return: Exception
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError
|
||||
|
||||
@openable_ratio.setter
|
||||
def openable_ratio(self, value):
|
||||
|
@ -50,7 +50,7 @@ class ThermalOpening:
|
|||
:param value: Any
|
||||
:return: Exception
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
def conductivity(self):
|
||||
|
|
|
@ -220,6 +220,15 @@ class Building(CityObject):
|
|||
"""
|
||||
return self._function
|
||||
|
||||
@function.setter
|
||||
def function(self, value):
|
||||
"""
|
||||
Set building function
|
||||
:param value: string
|
||||
:return: None
|
||||
"""
|
||||
self._function = value
|
||||
|
||||
@property
|
||||
def average_storey_height(self):
|
||||
"""
|
||||
|
|
|
@ -25,7 +25,7 @@ class ExportsFactory:
|
|||
Export to citygml with application domain extensions
|
||||
:return: None
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
def _energy_ade(self):
|
||||
|
@ -65,7 +65,7 @@ class ExportsFactory:
|
|||
Export the city to Energy+ idf format
|
||||
:return:
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
def _sra(self):
|
||||
|
|
|
@ -3,7 +3,6 @@ ConstructionFactory (before PhysicsFactory) retrieve the specific construction m
|
|||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
|
||||
"""
|
||||
from imports.construction_feeders.us_new_york_city_physics_parameters import UsNewYorkCityPhysicsParameters
|
||||
from imports.construction_feeders.us_physics_parameters import UsPhysicsParameters
|
||||
from imports.construction_feeders.ca_physics_parameters import CaPhysicsParameters
|
||||
from pathlib import Path
|
||||
|
@ -18,19 +17,13 @@ class ConstructionFactory:
|
|||
self._city = city
|
||||
self._base_path = base_path
|
||||
|
||||
def _us_new_york(self):
|
||||
UsNewYorkCityPhysicsParameters(self._city, self._base_path).enrich_buildings()
|
||||
|
||||
def _us(self):
|
||||
def _nrel(self):
|
||||
UsPhysicsParameters(self._city, self._base_path).enrich_buildings()
|
||||
|
||||
def _ca(self):
|
||||
def _nrcan(self):
|
||||
CaPhysicsParameters(self._city, self._base_path).enrich_buildings()
|
||||
|
||||
def _de(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def _es(self):
|
||||
def _other_construction_library_format(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def enrich(self):
|
||||
|
|
|
@ -25,9 +25,11 @@ class CaPhysicsParameters(NrelPhysicsInterface):
|
|||
city = self._city
|
||||
# it is assumed that all buildings have the same archetypes' keys
|
||||
for building in city.buildings:
|
||||
archetype = self._search_archetype(building.function, building.year_of_construction)
|
||||
archetype = self._search_archetype(ConstructionHelper.nrcan_from_function(building.function),
|
||||
building.year_of_construction)
|
||||
if archetype is None:
|
||||
sys.stderr.write(f'Building {building.name} has unknown archetype for building function: {building.function} '
|
||||
sys.stderr.write(f'Building {building.name} has unknown archetype for building function: '
|
||||
f'{ConstructionHelper.nrcan_from_function(building.function)} '
|
||||
f'and building year of construction: {building.year_of_construction}\n')
|
||||
continue
|
||||
self._assign_values(building, archetype)
|
||||
|
|
|
@ -78,12 +78,12 @@ class ConstructionHelper:
|
|||
nrcan_window_types = ['window']
|
||||
# todo: review with the same idea, to define a internal set and do the conversion to NREL
|
||||
nrcan_construction_types = {
|
||||
'Wall': 'wall',
|
||||
'WallSurface': 'wall',
|
||||
'ground wall': 'basement_wall',
|
||||
'Ground': 'floor',
|
||||
'GroundSurface': 'floor',
|
||||
'attic floor': 'attic floor',
|
||||
'interior slab': 'interior slab',
|
||||
'Roof': 'roof'
|
||||
'RoofSurface': 'roof'
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
|
|
|
@ -1,95 +0,0 @@
|
|||
"""
|
||||
UsNewYorkCityPhysicsParameters import the construction and material information for new york city
|
||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
|
||||
Contributors Pilar Monsalvete pilar_monsalvete@yahoo.es
|
||||
"""
|
||||
import sys
|
||||
|
||||
from imports.construction_feeders.nrel_physics_interface import NrelPhysicsInterface
|
||||
from imports.construction_feeders.helpers.construction_helper import ConstructionHelper
|
||||
from city_model_structure.attributes.layer import Layer
|
||||
from city_model_structure.attributes.material import Material
|
||||
|
||||
|
||||
class UsNewYorkCityPhysicsParameters(NrelPhysicsInterface):
|
||||
"""
|
||||
UsNewYorkCityPhysicsParameters class
|
||||
"""
|
||||
def __init__(self, city, base_path):
|
||||
self._city = city
|
||||
self._climate_zone = 'ASHRAE_2004:4A'
|
||||
super().__init__(base_path, 'us_constructions.xml', 'us_archetypes.xml')
|
||||
|
||||
def enrich_buildings(self):
|
||||
"""
|
||||
Returns the city with the construction parameters assigned to the buildings
|
||||
:return:
|
||||
"""
|
||||
city = self._city
|
||||
# it is assumed that all buildings have the same archetypes' keys
|
||||
for building in city.buildings:
|
||||
building_type = ConstructionHelper.nrel_from_function(building.function)
|
||||
if building_type is None:
|
||||
return
|
||||
archetype = self._search_archetype(building_type,
|
||||
ConstructionHelper.yoc_to_nrel_standard(building.year_of_construction),
|
||||
self._climate_zone)
|
||||
if archetype is None:
|
||||
sys.stderr.write(f'Building {building.name} has unknown archetype for building function: {building.function} '
|
||||
f'and building year of construction: {building.year_of_construction}\n')
|
||||
continue
|
||||
self._assign_values(building, archetype)
|
||||
|
||||
def _search_archetype(self, building_type, standard, climate_zone):
|
||||
for building_archetype in self._building_archetypes:
|
||||
a_yc = str(building_archetype.archetype_keys['@reference_standard'])
|
||||
a_bt = str(building_archetype.archetype_keys['@building_type'])
|
||||
a_cz = str(building_archetype.archetype_keys['@climate_zone'])
|
||||
if (a_yc == str(standard)) and (a_bt == str(building_type)) and (a_cz == str(climate_zone)):
|
||||
return building_archetype
|
||||
return None
|
||||
|
||||
def _assign_values(self, building, archetype):
|
||||
building.average_storey_height = archetype.average_storey_height
|
||||
building.storeys_above_ground = archetype.storeys_above_ground
|
||||
for thermal_zone in building.thermal_zones:
|
||||
thermal_zone.additional_thermal_bridge_u_value = archetype.additional_thermal_bridge_u_value
|
||||
thermal_zone.effective_thermal_capacity = archetype.effective_thermal_capacity
|
||||
thermal_zone.indirectly_heated_area_ratio = archetype.indirectly_heated_area_ratio
|
||||
thermal_zone.infiltration_rate_system_on = archetype.infiltration_rate_system_on
|
||||
thermal_zone.infiltration_rate_system_off = archetype.infiltration_rate_system_off
|
||||
for thermal_boundary in thermal_zone.bounded:
|
||||
construction_type = ConstructionHelper.nrel_construction_types[thermal_boundary.type]
|
||||
thermal_boundary_archetype = self._search_construction_in_archetype(archetype, construction_type)
|
||||
if thermal_boundary_archetype.outside_solar_absorptance is not None:
|
||||
thermal_boundary.outside_solar_absorptance = thermal_boundary_archetype.outside_solar_absorptance
|
||||
thermal_boundary.outside_thermal_absorptance = thermal_boundary_archetype.outside_thermal_absorptance
|
||||
thermal_boundary.outside_visible_absorptance = thermal_boundary_archetype.outside_visible_absorptance
|
||||
thermal_boundary.construction_name = thermal_boundary_archetype.construction_name
|
||||
thermal_boundary.window_ratio = thermal_boundary_archetype.window_ratio
|
||||
for layer_archetype in thermal_boundary_archetype.layers:
|
||||
layer = Layer()
|
||||
layer.thickness = layer_archetype.thickness
|
||||
material = Material()
|
||||
material.name = layer_archetype.name
|
||||
material.no_mass = layer_archetype.no_mass
|
||||
material.density = layer_archetype.density
|
||||
material.conductivity = layer_archetype.conductivity
|
||||
material.specific_heat = layer_archetype.specific_heat
|
||||
material.solar_absorptance = layer_archetype.solar_absorptance
|
||||
material.thermal_absorptance = layer_archetype.thermal_absorptance
|
||||
material.visible_absorptance = layer_archetype.visible_absorptance
|
||||
material.thermal_resistance = layer_archetype.thermal_resistance
|
||||
layer.material = material
|
||||
for thermal_opening in thermal_boundary.thermal_openings:
|
||||
if thermal_boundary_archetype.thermal_opening is not None:
|
||||
thermal_opening_archetype = thermal_boundary_archetype.thermal_opening
|
||||
thermal_opening.frame_ratio = thermal_opening_archetype.frame_ratio
|
||||
thermal_opening.g_value = thermal_opening_archetype.g_value
|
||||
thermal_opening.conductivity = thermal_opening_archetype.conductivity
|
||||
thermal_opening.thickness = thermal_opening_archetype.thickness
|
||||
thermal_opening.back_side_solar_transmittance_at_normal_incidence = \
|
||||
thermal_opening_archetype.back_side_solar_transmittance_at_normal_incidence
|
||||
thermal_opening.front_side_solar_transmittance_at_normal_incidence = \
|
||||
thermal_opening_archetype.front_side_solar_transmittance_at_normal_incidence
|
|
@ -7,7 +7,7 @@ Contributors Pilar Monsalvete pilar_monsalvete@yahoo.es
|
|||
import sys
|
||||
|
||||
from imports.construction_feeders.nrel_physics_interface import NrelPhysicsInterface
|
||||
from imports.construction_feeders.helpers.us_to_library_types import UsToLibraryTypes
|
||||
from imports.construction_feeders.helpers.construction_helper import ConstructionHelper
|
||||
from city_model_structure.attributes.layer import Layer
|
||||
from city_model_structure.attributes.material import Material
|
||||
|
||||
|
@ -18,7 +18,7 @@ class UsPhysicsParameters(NrelPhysicsInterface):
|
|||
"""
|
||||
def __init__(self, city, base_path):
|
||||
self._city = city
|
||||
self._climate_zone = UsToLibraryTypes.city_to_climate_zone(city.name)
|
||||
self._climate_zone = ConstructionHelper.city_to_nrel_climate_zone(city.name)
|
||||
super().__init__(base_path, 'us_constructions.xml', 'us_archetypes.xml')
|
||||
|
||||
def enrich_buildings(self):
|
||||
|
@ -29,11 +29,11 @@ class UsPhysicsParameters(NrelPhysicsInterface):
|
|||
city = self._city
|
||||
# it is assumed that all buildings have the same archetypes' keys
|
||||
for building in city.buildings:
|
||||
building_type = building.function
|
||||
building_type = ConstructionHelper.nrel_from_function(building.function)
|
||||
if building_type is None:
|
||||
return
|
||||
archetype = self._search_archetype(building_type,
|
||||
UsToLibraryTypes.yoc_to_standard(building.year_of_construction),
|
||||
ConstructionHelper.yoc_to_nrel_standard(building.year_of_construction),
|
||||
self._climate_zone)
|
||||
if archetype is None:
|
||||
sys.stderr.write(f'Building {building.name} has unknown archetype for building function: {building.function} '
|
||||
|
@ -60,7 +60,7 @@ class UsPhysicsParameters(NrelPhysicsInterface):
|
|||
thermal_zone.infiltration_rate_system_on = archetype.infiltration_rate_system_on
|
||||
thermal_zone.infiltration_rate_system_off = archetype.infiltration_rate_system_off
|
||||
for thermal_boundary in thermal_zone.bounded:
|
||||
construction_type = UsToLibraryTypes.construction_types[thermal_boundary.type]
|
||||
construction_type = ConstructionHelper.nrel_construction_types[thermal_boundary.type]
|
||||
thermal_boundary_archetype = self._search_construction_in_archetype(archetype, construction_type)
|
||||
if thermal_boundary_archetype.outside_solar_absorptance is not None:
|
||||
thermal_boundary.outside_solar_absorptance = thermal_boundary_archetype.outside_solar_absorptance
|
||||
|
|
|
@ -122,8 +122,8 @@ class CityGml:
|
|||
year_of_construction = o['Building']['yearOfConstruction']
|
||||
if 'function' in o['Building']:
|
||||
function = o['Building']['function']
|
||||
self._city.add_city_object(Building(name, lod, surfaces, terrains, year_of_construction, function,
|
||||
self._lower_corner))
|
||||
self._city.add_city_object(Building(name, lod, surfaces, year_of_construction, function, self._lower_corner,
|
||||
terrains))
|
||||
return self._city
|
||||
|
||||
def _terrains(self, city_object, lod_terrain_str):
|
||||
|
|
|
@ -4,9 +4,7 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later
|
|||
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
|
||||
"""
|
||||
from pathlib import Path
|
||||
from imports.usage_feeders.de_usage_parameters import DeUsageParameters
|
||||
from imports.usage_feeders.us_new_york_city_usage_parameters import UsNewYorkCityUsageParameters
|
||||
from imports.usage_feeders.ca_usage_parameters import CaUsageParameters
|
||||
from imports.usage_feeders.hft_usage_parameters import HftUsageParameters
|
||||
|
||||
|
||||
class UsageFactory:
|
||||
|
@ -18,16 +16,10 @@ class UsageFactory:
|
|||
self._city = city
|
||||
self._base_path = base_path
|
||||
|
||||
def _us_new_york(self):
|
||||
UsNewYorkCityUsageParameters(self._city, self._base_path).enrich_buildings()
|
||||
def _hft(self):
|
||||
HftUsageParameters(self._city, self._base_path).enrich_buildings()
|
||||
|
||||
def _ca(self):
|
||||
CaUsageParameters(self._city, self._base_path).enrich_buildings()
|
||||
|
||||
def _de(self):
|
||||
DeUsageParameters(self._city, self._base_path).enrich_buildings()
|
||||
|
||||
def _es(self):
|
||||
def _other_usage_library_format(self):
|
||||
raise Exception('Not implemented')
|
||||
|
||||
def enrich(self):
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
"""
|
||||
DeUsageParameters model the usage properties for a German building
|
||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
|
||||
Contributors Pilar Monsalvete pilar_monsalvete@yahoo.es
|
||||
"""
|
||||
import sys
|
||||
|
||||
from imports.geometry_feeders.helpers.geometry_helper import GeometryHelper as gh
|
||||
from imports.usage_feeders.hft_usage_interface import HftUsageInterface
|
||||
from city_model_structure.attributes.usage_zone import UsageZone
|
||||
|
||||
|
||||
class DeUsageParameters(HftUsageInterface):
|
||||
"""
|
||||
DeUsageParameters
|
||||
"""
|
||||
def __init__(self, city, base_path):
|
||||
super().__init__(base_path, 'de_library.xml')
|
||||
self._city = city
|
||||
|
||||
def enrich_buildings(self):
|
||||
"""
|
||||
Returns the city with the usage parameters assigned to the buildings
|
||||
:return:
|
||||
"""
|
||||
city = self._city
|
||||
for building in city.buildings:
|
||||
archetype = self._search_archetype(gh.fuction_to_usage(building.function))
|
||||
if archetype is None:
|
||||
sys.stderr.write(f'Building {building.name} has unknown archetype for building function:'
|
||||
f' {building.function}, that assigns building usage as '
|
||||
f'{gh.fuction_to_usage(building.function)}\n')
|
||||
continue
|
||||
# todo: what to do with mix-usage usages from gml?
|
||||
mix_usage = False
|
||||
if not mix_usage:
|
||||
# just one usage_zone
|
||||
usage_zone = UsageZone()
|
||||
self._assign_values(usage_zone, archetype)
|
||||
building.usage_zones = [usage_zone]
|
||||
|
||||
def _search_archetype(self, building_usage):
|
||||
for building_archetype in self._usage_archetypes:
|
||||
if building_archetype.usage == building_usage:
|
||||
return building_archetype
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def _assign_values(usage_zone, archetype):
|
||||
usage_zone.usage = archetype.usage
|
||||
usage_zone.internal_gains = archetype.internal_gains
|
||||
usage_zone.heating_setpoint = archetype.heating_setpoint
|
||||
usage_zone.heating_setback = archetype.heating_setback
|
||||
usage_zone.cooling_setpoint = archetype.cooling_setpoint
|
||||
usage_zone.occupancy_density = archetype.occupancy_density
|
||||
usage_zone.hours_day = archetype.hours_day
|
||||
usage_zone.days_year = archetype.days_year
|
||||
usage_zone.dhw_average_volume_pers_day = archetype.dhw_average_volume_pers_day
|
||||
usage_zone.dhw_preparation_temperature = archetype.dhw_preparation_temperature
|
||||
usage_zone.electrical_app_average_consumption_sqm_year = archetype.electrical_app_average_consumption_sqm_year
|
||||
usage_zone.mechanical_air_change = archetype.mechanical_air_change
|
|
@ -2,7 +2,7 @@
|
|||
Hft-based interface, it reads format defined within the CERC team based on that one used in SimStadt and developed by
|
||||
the IAF team at hft-Stuttgart and enriches the city with usage parameters
|
||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Pilar Monsalvete pilar_monsalvete@yahoo.es
|
||||
Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||
"""
|
||||
import xmltodict
|
||||
from imports.usage_feeders.data_classes.hft_usage_zone_archetype import HftUsageZoneArchetype as huza
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
"""
|
||||
CaUsageParameters model the usage properties for a Canadian building
|
||||
HftUsageParameters model the usage properties
|
||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Pilar Monsalvete pilar_monsalvete@yahoo.es
|
||||
Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||
"""
|
||||
import sys
|
||||
|
||||
from imports.geometry_feeders.helpers.geometry_helper import GeometryHelper as gh
|
||||
from imports.usage_feeders.hft_usage_interface import HftUsageInterface
|
||||
from city_model_structure.attributes.usage_zone import UsageZone
|
||||
from city_model_structure.attributes.internal_gains import InternalGains
|
||||
|
||||
|
||||
class CaUsageParameters(HftUsageInterface):
|
||||
class HftUsageParameters(HftUsageInterface):
|
||||
"""
|
||||
CaUsageParameters class
|
||||
HftUsageParameters class
|
||||
"""
|
||||
def __init__(self, city, base_path):
|
||||
super().__init__(base_path, 'ca_archetypes_reduced.xml')
|
||||
|
@ -28,9 +29,11 @@ class CaUsageParameters(HftUsageInterface):
|
|||
"""
|
||||
city = self._city
|
||||
for building in city.buildings:
|
||||
archetype = self._search_archetype(building.function)
|
||||
archetype = self._search_archetype(gh.fuction_to_usage(building.function))
|
||||
if archetype is None:
|
||||
sys.stderr.write(f'Building {building.name} has unknown archetype for building usage: {building.function}\n')
|
||||
sys.stderr.write(f'Building {building.name} has unknown archetype for building function:'
|
||||
f' {building.function}, that assigns building usage as '
|
||||
f'{gh.fuction_to_usage(building.function)}\n')
|
||||
continue
|
||||
# todo: what to do with mix-usage usages from gml?
|
||||
mix_usage = False
|
|
@ -1,62 +0,0 @@
|
|||
"""
|
||||
UsNewYorkCityUsageParameters model the usage properties for a NYC building
|
||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
|
||||
Contributors Pilar Monsalvete pilar_monsalvete@yahoo.es
|
||||
"""
|
||||
import sys
|
||||
|
||||
from imports.geometry_feeders.helpers.geometry_helper import GeometryHelper as gh
|
||||
from imports.usage_feeders.hft_usage_interface import HftUsageInterface
|
||||
from city_model_structure.attributes.usage_zone import UsageZone
|
||||
|
||||
|
||||
class UsNewYorkCityUsageParameters(HftUsageInterface):
|
||||
"""
|
||||
UsNewYorkCityUsageParameters class
|
||||
"""
|
||||
def __init__(self, city, base_path):
|
||||
super().__init__(base_path, 'de_library.xml')
|
||||
self._city = city
|
||||
|
||||
def enrich_buildings(self):
|
||||
"""
|
||||
Returns the city with the usage parameters assigned to the buildings
|
||||
:return:
|
||||
"""
|
||||
city = self._city
|
||||
for building in city.buildings:
|
||||
archetype = self._search_archetype(gh.fuction_to_usage(building.function))
|
||||
if archetype is None:
|
||||
sys.stderr.write(f'Building {building.name} has unknown archetype for building function:'
|
||||
f' {building.function}, that assigns building usage as '
|
||||
f'{gh.fuction_to_usage(building.function)}\n')
|
||||
continue
|
||||
# todo: what to do with mix-usage usages from gml?
|
||||
mix_usage = False
|
||||
if not mix_usage:
|
||||
# just one usage_zone
|
||||
usage_zone = UsageZone()
|
||||
self._assign_values(usage_zone, archetype)
|
||||
building.usage_zones = [usage_zone]
|
||||
|
||||
def _search_archetype(self, building_usage):
|
||||
for building_archetype in self._usage_archetypes:
|
||||
if building_archetype.usage == building_usage:
|
||||
return building_archetype
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def _assign_values(usage_zone, archetype):
|
||||
usage_zone.usage = archetype.usage
|
||||
usage_zone.internal_gains = archetype.internal_gains
|
||||
usage_zone.heating_setpoint = archetype.heating_setpoint
|
||||
usage_zone.heating_setback = archetype.heating_setback
|
||||
usage_zone.cooling_setpoint = archetype.cooling_setpoint
|
||||
usage_zone.occupancy_density = archetype.occupancy_density
|
||||
usage_zone.hours_day = archetype.hours_day
|
||||
usage_zone.days_year = archetype.days_year
|
||||
usage_zone.dhw_average_volume_pers_day = archetype.dhw_average_volume_pers_day
|
||||
usage_zone.dhw_preparation_temperature = archetype.dhw_preparation_temperature
|
||||
usage_zone.electrical_app_average_consumption_sqm_year = archetype.electrical_app_average_consumption_sqm_year
|
||||
usage_zone.mechanical_air_change = archetype.mechanical_air_change
|
|
@ -1,61 +0,0 @@
|
|||
"""
|
||||
UsUsageParameters model the usage properties for a USA building except those from NYC
|
||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Pilar Monsalvete pilar_monsalvete@yahoo.es
|
||||
"""
|
||||
import sys
|
||||
|
||||
from imports.geometry_feeders.helpers.geometry_helper import GeometryHelper as gh
|
||||
from imports.usage_feeders.hft_usage_interface import HftUsageInterface
|
||||
from city_model_structure.attributes.usage_zone import UsageZone
|
||||
|
||||
|
||||
class UsUsageParameters(HftUsageInterface):
|
||||
"""
|
||||
UsUsageParameters class
|
||||
"""
|
||||
def __init__(self, city, base_path):
|
||||
super().__init__(base_path, 'de_library.xml')
|
||||
self._city = city
|
||||
|
||||
def enrich_buildings(self):
|
||||
"""
|
||||
Returns the city with the usage parameters assigned to the buildings
|
||||
:return:
|
||||
"""
|
||||
city = self._city
|
||||
for building in city.buildings:
|
||||
archetype = self._search_archetype(gh.fuction_to_usage(building.function))
|
||||
if archetype is None:
|
||||
sys.stderr.write(f'Building {building.name} has unknown archetype for building function:'
|
||||
f' {building.function}, that assigns building usage as '
|
||||
f'{gh.fuction_to_usage(building.function)}\n')
|
||||
continue
|
||||
# todo: what to do with mix-usage usages from gml?
|
||||
mix_usage = False
|
||||
if not mix_usage:
|
||||
# just one usage_zone
|
||||
usage_zone = UsageZone()
|
||||
self._assign_values(usage_zone, archetype)
|
||||
building.usage_zones = [usage_zone]
|
||||
|
||||
def _search_archetype(self, building_usage):
|
||||
for building_archetype in self._usage_archetypes:
|
||||
if building_archetype.usage == building_usage:
|
||||
return building_archetype
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def _assign_values(usage_zone, archetype):
|
||||
usage_zone.usage = archetype.usage
|
||||
usage_zone.internal_gains = archetype.internal_gains
|
||||
usage_zone.heating_setpoint = archetype.heating_setpoint
|
||||
usage_zone.heating_setback = archetype.heating_setback
|
||||
usage_zone.cooling_setpoint = archetype.cooling_setpoint
|
||||
usage_zone.occupancy_density = archetype.occupancy_density
|
||||
usage_zone.hours_day = archetype.hours_day
|
||||
usage_zone.days_year = archetype.days_year
|
||||
usage_zone.dhw_average_volume_pers_day = archetype.dhw_average_volume_pers_day
|
||||
usage_zone.dhw_preparation_temperature = archetype.dhw_preparation_temperature
|
||||
usage_zone.electrical_app_average_consumption_sqm_year = archetype.electrical_app_average_consumption_sqm_year
|
||||
usage_zone.mechanical_air_change = archetype.mechanical_air_change
|
|
@ -1,13 +1,14 @@
|
|||
"""
|
||||
TestConstructionFactory test and validate the city model structure construction parameters
|
||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
|
||||
Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||
"""
|
||||
from pathlib import Path
|
||||
from unittest import TestCase
|
||||
|
||||
from imports.geometry_factory import GeometryFactory
|
||||
from imports.construction_factory import ConstructionFactory
|
||||
from imports.geometry_feeders.helpers.geometry_helper import GeometryHelper
|
||||
|
||||
|
||||
class TestConstructionFactory(TestCase):
|
||||
|
@ -19,37 +20,34 @@ class TestConstructionFactory(TestCase):
|
|||
Configure test environment
|
||||
:return:
|
||||
"""
|
||||
self._city_gml = None
|
||||
self._nyc_with_physics = None
|
||||
self._city = None
|
||||
self._example_path = (Path(__file__).parent / 'tests_data').resolve()
|
||||
|
||||
def _get_citygml(self, file_path):
|
||||
if self._city_gml is None:
|
||||
self._city_gml = GeometryFactory('citygml', file_path).city
|
||||
self.assertIsNotNone(self._city_gml, 'city is none')
|
||||
return self._city_gml
|
||||
def _get_citygml(self, file):
|
||||
file_path = (self._example_path / file).resolve()
|
||||
self._city = GeometryFactory('citygml', file_path).city
|
||||
self.assertIsNotNone(self._city, 'city is none')
|
||||
return self._city
|
||||
|
||||
def _get_city_with_physics(self):
|
||||
if self._nyc_with_physics is None:
|
||||
file_path = (self._example_path / '20buildings.gml').resolve()
|
||||
self._nyc_with_physics = self._get_citygml(file_path)
|
||||
for building in self._nyc_with_physics.buildings:
|
||||
for tz in building.thermal_zones:
|
||||
for tb in tz.bounded:
|
||||
tb.hi = 10
|
||||
tb.he = 25
|
||||
for opening in tb.thermal_openings:
|
||||
opening.hi = 10
|
||||
opening.he = 25
|
||||
ConstructionFactory('us_new_york', self._nyc_with_physics).enrich()
|
||||
return self._nyc_with_physics
|
||||
|
||||
def test_city_with_physics_extended_library(self):
|
||||
def test_city_with_construction_extended_library(self):
|
||||
"""
|
||||
Enrich the city with the physic information and verify it
|
||||
:return: None
|
||||
"""
|
||||
city = self._get_city_with_physics()
|
||||
|
||||
file = 'pluto_building.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
building.function = GeometryHelper.pluto_to_function[building.function]
|
||||
for tz in building.thermal_zones:
|
||||
for tb in tz.bounded:
|
||||
tb.hi = 10
|
||||
tb.he = 25
|
||||
for opening in tb.thermal_openings:
|
||||
opening.hi = 10
|
||||
opening.he = 25
|
||||
# case 1: NREL
|
||||
ConstructionFactory('nrel', city).enrich()
|
||||
for building in city.buildings:
|
||||
self.assertIsNotNone(building.average_storey_height, 'average_storey_height is none')
|
||||
self.assertIsNotNone(building.storeys_above_ground, 'storeys_above_ground is none')
|
||||
|
@ -66,10 +64,20 @@ class TestConstructionFactory(TestCase):
|
|||
self.assertIsNotNone(thermal_boundary.outside_solar_absorptance, 'outside_solar_absorptance is none')
|
||||
self.assertIsNotNone(thermal_boundary.window_ratio, 'window_ratio is none')
|
||||
|
||||
def test_reduced_library(self):
|
||||
file_path = (self._example_path / 'lod2_buildings.gml').resolve()
|
||||
city = self._get_citygml(file_path)
|
||||
ConstructionFactory('ca', city).enrich()
|
||||
def test_city_with_construction_reduced_library(self):
|
||||
file = 'one_building_in_kelowna.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
building.function = GeometryHelper.hft_to_function[building.function]
|
||||
for tz in building.thermal_zones:
|
||||
for tb in tz.bounded:
|
||||
tb.hi = 10
|
||||
tb.he = 25
|
||||
for opening in tb.thermal_openings:
|
||||
opening.hi = 10
|
||||
opening.he = 25
|
||||
# case 2: NRCAN
|
||||
ConstructionFactory('nrcan', city).enrich()
|
||||
for building in city.buildings:
|
||||
self.assertIsNotNone(building.average_storey_height, 'average_storey_height is none')
|
||||
self.assertIsNotNone(building.storeys_above_ground, 'storeys_above_ground is none')
|
227
non_functional_tests/test_geometry_factory.py
Normal file
227
non_functional_tests/test_geometry_factory.py
Normal file
|
@ -0,0 +1,227 @@
|
|||
"""
|
||||
TestGeometryFactory test and validate the city model structure geometric parameters
|
||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||
"""
|
||||
from pathlib import Path
|
||||
from unittest import TestCase
|
||||
from imports.geometry_factory import GeometryFactory
|
||||
from imports.geometry_feeders.helpers.geometry_helper import GeometryHelper
|
||||
|
||||
|
||||
class TestGeometryFactory(TestCase):
|
||||
"""
|
||||
Non-functional TestGeometryFactory
|
||||
Load testing
|
||||
"""
|
||||
def setUp(self) -> None:
|
||||
"""
|
||||
Test setup
|
||||
:return: None
|
||||
"""
|
||||
self._city = None
|
||||
self._example_path = (Path(__file__).parent / 'tests_data').resolve()
|
||||
|
||||
def _get_citygml(self, file):
|
||||
file_path = (self._example_path / file).resolve()
|
||||
self._city = GeometryFactory('citygml', file_path).city
|
||||
self.assertIsNotNone(self._city, 'city is none')
|
||||
return self._city
|
||||
|
||||
def _get_obj(self, file):
|
||||
# todo: solve the incongruences between city and city_debug
|
||||
file_path = (self._example_path / file).resolve()
|
||||
self._city = GeometryFactory('obj', file_path)._city_debug
|
||||
self.assertIsNotNone(self._city, 'city is none')
|
||||
return self._city
|
||||
|
||||
@staticmethod
|
||||
def _internal_function(function_format, original_function):
|
||||
new_function = original_function
|
||||
if function_format == 'hft':
|
||||
new_function = GeometryHelper.hft_to_function[original_function]
|
||||
elif function_format == 'pluto':
|
||||
new_function = GeometryHelper.pluto_to_function[original_function]
|
||||
elif function_format == 'alkis':
|
||||
# todo: not implemented yet!!
|
||||
raise NotImplementedError
|
||||
return new_function
|
||||
|
||||
# citygml
|
||||
def test_stuttgart_gml(self):
|
||||
file = '20190815_mitte_out_MC_FloursurfaceADD.gml'
|
||||
city = self._get_citygml(file)
|
||||
pickle_file = (self._example_path / '20190815_mitte_out_MC_FloursurfaceADD.pickle').resolve()
|
||||
city.save(pickle_file)
|
||||
for building in city.buildings:
|
||||
self.assertIsNotNone(building.volume, 'building volume is none')
|
||||
|
||||
def test_citygml_buildings(self):
|
||||
"""
|
||||
Test city objects in the city
|
||||
:return: None
|
||||
"""
|
||||
file = 'one_building_in_kelowna.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
self.assertIsNotNone(building.name, 'building name is none')
|
||||
self.assertIsNotNone(building.lod, 'building lod is none')
|
||||
self.assertIsNotNone(building.centroid, 'building centroid is none')
|
||||
self.assertIsNotNone(building.year_of_construction, 'building year_of_construction is none')
|
||||
self.assertIsNotNone(building.function, 'building function is none')
|
||||
self.assertIsNotNone(building.volume, 'building volume is none')
|
||||
self.assertIsNotNone(building.surfaces, 'building surfaces is none')
|
||||
self.assertIsNotNone(building.surfaces[0].name, 'surface not found')
|
||||
self.assertIsNone(building.basement_heated, 'building basement_heated is not none')
|
||||
self.assertIsNone(building.attic_heated, 'building attic_heated is not none')
|
||||
self.assertIsNotNone(building.terrains, 'building terrains is none')
|
||||
self.assertIsNotNone(building.usage_zones, 'building usage_zones is none')
|
||||
self.assertIsNone(building.average_storey_height, 'building average_storey_height is not none')
|
||||
self.assertIsNone(building.storeys_above_ground, 'building storeys_above_ground is not none')
|
||||
self.assertIsNotNone(building.thermal_zones, 'building thermal_zones is none')
|
||||
self.assertIsNotNone(building.type, 'building type is none')
|
||||
self.assertIsNotNone(building.max_height, 'building max_height is none')
|
||||
self.assertIsNotNone(building.floor_area, 'building floor_area is none')
|
||||
|
||||
def test_citygml_surfaces(self):
|
||||
"""
|
||||
Test surfaces in city objects
|
||||
:return: None
|
||||
"""
|
||||
file = 'one_building_in_kelowna.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
for surface in building.surfaces:
|
||||
self.assertIsNotNone(surface.name, 'surface name is none')
|
||||
self.assertIsNotNone(surface.type, 'surface type is none')
|
||||
self.assertIsNotNone(surface.azimuth, 'surface azimuth is none')
|
||||
self.assertIsNotNone(surface.inclination, 'surface inclination is none')
|
||||
self.assertIsNotNone(surface.area_below_ground, 'surface area_below_ground is none')
|
||||
self.assertIsNotNone(surface.area_above_ground, 'surface area_above_ground is none')
|
||||
self.assertIsNotNone(surface.global_irradiance, 'monthly irradiance is none')
|
||||
self.assertIsNone(surface.swr, 'surface swr is not none')
|
||||
self.assertIsNotNone(surface.bounds_lower_corner, 'surface envelope_lower_corner is none')
|
||||
self.assertIsNotNone(surface.bounds_upper_corner, 'surface envelope_upper_corner is none')
|
||||
self.assertIsNotNone(surface.area_above_ground, 'surface area_above_ground is none')
|
||||
self.assertIsNotNone(surface.perimeter_polygon, 'surface perimeter_polygon is none')
|
||||
self.assertIsNone(surface.holes_polygons, 'surface hole_polygons is not none')
|
||||
self.assertIsNotNone(surface.solid_polygon, 'surface solid_polygon is none')
|
||||
|
||||
def test_citygml_thermal_zone(self):
|
||||
"""
|
||||
Test thermal zones in city objects
|
||||
:return: None
|
||||
"""
|
||||
file = 'one_building_in_kelowna.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
for thermal_zone in building.thermal_zones:
|
||||
self.assertIsNotNone(thermal_zone.surfaces, 'thermal_zone surfaces is none')
|
||||
self.assertIsNotNone(thermal_zone.bounded, 'thermal_zone bounded is none')
|
||||
self.assertIsNotNone(thermal_zone.floor_area, 'thermal_zone floor_area is none')
|
||||
self.assertIsNotNone(thermal_zone.is_heated, 'thermal_zone heated is none')
|
||||
self.assertIsNotNone(thermal_zone.is_cooled, 'thermal_zone cooled is none')
|
||||
self.assertIsNone(thermal_zone.additional_thermal_bridge_u_value,
|
||||
'thermal_zone additional_thermal_bridge_u_value is not none')
|
||||
self.assertIsNone(thermal_zone.effective_thermal_capacity,
|
||||
'thermal_zone effective_thermal_capacity is not none')
|
||||
self.assertIsNone(thermal_zone.indirectly_heated_area_ratio,
|
||||
'thermal_zone indirectly_heated_area_ratio is not none')
|
||||
self.assertIsNone(thermal_zone.infiltration_rate_system_off,
|
||||
'thermal_zone infiltration_rate_system_off is not none')
|
||||
self.assertIsNone(thermal_zone.infiltration_rate_system_on,
|
||||
'thermal_zone infiltration_rate_system_on is not none')
|
||||
self.assertIsNone(thermal_zone.usage_zones,
|
||||
'thermal_zone usage_zones are not none')
|
||||
|
||||
def test_citygml_thermal_boundary(self):
|
||||
"""
|
||||
Test thermal boundaries in thermal zones
|
||||
:return: None
|
||||
"""
|
||||
file = 'one_building_in_kelowna.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
for thermal_zone in building.thermal_zones:
|
||||
for thermal_boundary in thermal_zone.bounded:
|
||||
self.assertIsNotNone(thermal_boundary.surface, 'thermal_boundary surface is none')
|
||||
self.assertIsNotNone(thermal_boundary.type, 'thermal_boundary type is none')
|
||||
self.assertIsNotNone(thermal_boundary.area, 'thermal_boundary area is none')
|
||||
self.assertIsNotNone(thermal_boundary.area_above_ground, 'thermal_boundary area_above_ground is none')
|
||||
self.assertIsNotNone(thermal_boundary.area_below_ground, 'thermal_boundary area_below_ground is none')
|
||||
self.assertIsNotNone(thermal_boundary.azimuth, 'thermal_boundary azimuth is none')
|
||||
self.assertIsNotNone(thermal_boundary.delimits, 'thermal_boundary delimits is none')
|
||||
self.assertIsNotNone(thermal_boundary.inclination, 'thermal_boundary inclination is none')
|
||||
|
||||
def test_citygml_thermal_opening(self):
|
||||
"""
|
||||
Test thermal openings in thermal zones
|
||||
:return: None
|
||||
"""
|
||||
file = 'one_building_in_kelowna.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
for thermal_zone in building.thermal_zones:
|
||||
for thermal_boundary in thermal_zone.bounded:
|
||||
for thermal_opening in thermal_boundary.thermal_openings:
|
||||
self.assertIsNone(thermal_opening.frame_ratio, 'thermal_opening frame_ratio was initialized')
|
||||
self.assertIsNone(thermal_opening.g_value, 'thermal_opening g_value was initialized')
|
||||
self.assertIsNone(thermal_opening.conductivity, 'thermal_opening conductivity_w_mk was initialized')
|
||||
self.assertIsNone(thermal_opening.back_side_solar_transmittance_at_normal_incidence,
|
||||
'thermal_opening back_side_solar_transmittance_at_normal_incidence was initialized')
|
||||
self.assertRaises(Exception, lambda: thermal_opening.openable_ratio,
|
||||
'thermal_opening openable_ratio is not raising an exception')
|
||||
self.assertIsNone(thermal_opening.front_side_solar_transmittance_at_normal_incidence,
|
||||
'thermal_opening front_side_solar_transmittance_at_normal_incidence was initialized')
|
||||
self.assertIsNone(thermal_opening.thickness, 'thermal_opening thickness_m was initialized')
|
||||
self.assertRaises(Exception, lambda: thermal_opening.u_value, 'thermal_opening u_value was initialized')
|
||||
self.assertIsNone(thermal_opening.overall_u_value, 'thermal_opening overall_u_value was initialized')
|
||||
self.assertIsNone(thermal_opening.hi, 'thermal_opening hi was initialized')
|
||||
self.assertIsNone(thermal_opening.he, 'thermal_opening he was initialized')
|
||||
|
||||
def test_citygml_function(self):
|
||||
"""
|
||||
Test city objects' functions in the city
|
||||
:return: None
|
||||
"""
|
||||
# case 1: hft
|
||||
file = 'one_building_in_kelowna.gml'
|
||||
function_format = 'hft'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
building.function = self._internal_function(function_format, building.function)
|
||||
self.assertEqual(building.function, 'residential', 'format hft')
|
||||
|
||||
# case 2: Pluto
|
||||
file = 'pluto_building.gml'
|
||||
function_format = 'pluto'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
building.function = self._internal_function(function_format, building.function)
|
||||
self.assertEqual(building.function, 'secondary school', 'format pluto')
|
||||
|
||||
# case 3: Alkis
|
||||
file = 'one_building_in_kelowna_alkis.gml'
|
||||
function_format = 'alkis'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
self.assertRaises(Exception, lambda: self._internal_function(function_format, building.function))
|
||||
|
||||
# obj
|
||||
def test_import_obj(self):
|
||||
file = 'kelowna.obj'
|
||||
city = self._get_obj(file)
|
||||
self.assertIsNotNone(city, 'city is none')
|
||||
for building in city.buildings:
|
||||
self.assertIsNotNone(building, 'building is none')
|
||||
|
||||
# osm
|
||||
def test_subway(self):
|
||||
"""
|
||||
Test subway parsing
|
||||
:return:
|
||||
"""
|
||||
file_path = (self._example_path / 'subway.osm').resolve()
|
||||
subway_entrances = self._features = GeometryFactory('osm_subway', file_path).features
|
||||
self.assertIsNotNone(subway_entrances, 'subway entrances is none')
|
||||
self.assertEqual(len(subway_entrances), 20, 'Wrong number of subway entrances')
|
44
non_functional_tests/test_schedules_factory.py
Normal file
44
non_functional_tests/test_schedules_factory.py
Normal file
|
@ -0,0 +1,44 @@
|
|||
"""
|
||||
TestSchedulesFactory test and validate the city model structure schedules
|
||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||
"""
|
||||
from pathlib import Path
|
||||
from unittest import TestCase
|
||||
|
||||
from imports.geometry_factory import GeometryFactory
|
||||
from imports.usage_factory import UsageFactory
|
||||
from imports.schedules_factory import SchedulesFactory
|
||||
from imports.geometry_feeders.helpers.geometry_helper import GeometryHelper
|
||||
|
||||
|
||||
class TestSchedulesFactory(TestCase):
|
||||
"""
|
||||
TestSchedulesFactory TestCase
|
||||
"""
|
||||
|
||||
def setUp(self) -> None:
|
||||
"""
|
||||
Configure test environment
|
||||
:return:
|
||||
"""
|
||||
self._city_gml = None
|
||||
self._example_path = (Path(__file__).parent / 'tests_data').resolve()
|
||||
|
||||
def _get_citygml(self, file):
|
||||
file_path = (self._example_path / file).resolve()
|
||||
self._city = GeometryFactory('citygml', file_path).city
|
||||
self.assertIsNotNone(self._city, 'city is none')
|
||||
for building in self._city.buildings:
|
||||
building.function = GeometryHelper.pluto_to_function[building.function]
|
||||
UsageFactory('hft', self._city)
|
||||
return self._city
|
||||
|
||||
def test_comnet_archetypes(self):
|
||||
file = (self._example_path / 'pluto_building.gml').resolve()
|
||||
city = self._get_citygml(file)
|
||||
occupancy_handler = 'comnet'
|
||||
SchedulesFactory(occupancy_handler, city)
|
||||
for building in city.buildings:
|
||||
for usage_zone in building.usage_zones:
|
||||
self.assertTrue(usage_zone.schedules)
|
|
@ -1,13 +1,14 @@
|
|||
"""
|
||||
TestUsageFactory test and validate the city model structure usage parameters
|
||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Pilar Monsalvete pilar_monsalvete@yahoo.es
|
||||
Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||
"""
|
||||
from pathlib import Path
|
||||
from unittest import TestCase
|
||||
|
||||
from imports.geometry_factory import GeometryFactory
|
||||
from imports.usage_factory import UsageFactory
|
||||
from imports.geometry_feeders.helpers.geometry_helper import GeometryHelper
|
||||
|
||||
|
||||
class TestUsageFactory(TestCase):
|
||||
|
@ -20,28 +21,26 @@ class TestUsageFactory(TestCase):
|
|||
:return:
|
||||
"""
|
||||
self._city_gml = None
|
||||
self._nyc_with_usage = None
|
||||
self._example_path = (Path(__file__).parent / 'tests_data').resolve()
|
||||
|
||||
def _get_citygml(self, file_path):
|
||||
if self._city_gml is None:
|
||||
self._city_gml = GeometryFactory('citygml', file_path).city
|
||||
self.assertIsNotNone(self._city_gml, 'city is none')
|
||||
return self._city_gml
|
||||
|
||||
def _get_city_with_usage(self):
|
||||
if self._nyc_with_usage is None:
|
||||
file_path = (self._example_path / '20buildings.gml').resolve()
|
||||
self._nyc_with_usage = self._get_citygml(file_path)
|
||||
UsageFactory('us_new_york', self._nyc_with_usage)
|
||||
return self._nyc_with_usage
|
||||
def _get_citygml(self, file):
|
||||
file_path = (self._example_path / file).resolve()
|
||||
self._city = GeometryFactory('citygml', file_path).city
|
||||
self.assertIsNotNone(self._city, 'city is none')
|
||||
return self._city
|
||||
|
||||
def test_city_with_usage(self):
|
||||
"""
|
||||
Enrich the city with the usage information and verify it
|
||||
:return: None
|
||||
"""
|
||||
city = self._get_city_with_usage()
|
||||
file = 'pluto_building.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
building.function = GeometryHelper.pluto_to_function[building.function]
|
||||
|
||||
# case 1: HFT
|
||||
UsageFactory('hft', city)
|
||||
for building in city.buildings:
|
||||
for usage_zone in building.usage_zones:
|
||||
self.assertIsNotNone(usage_zone.usage, 'usage is none')
|
||||
|
@ -55,20 +54,3 @@ class TestUsageFactory(TestCase):
|
|||
self.assertIsNotNone(usage_zone.dhw_average_volume_pers_day, 'usage is none')
|
||||
self.assertIsNotNone(usage_zone.dhw_preparation_temperature, 'usage is none')
|
||||
self.assertIsNotNone(usage_zone.electrical_app_average_consumption_sqm_year, 'usage is none')
|
||||
# todo: missing schedules, schedules and heating schedule
|
||||
|
||||
def test_hft_interface(self):
|
||||
file_path = (self._example_path / 'lod2_buildings.gml').resolve()
|
||||
city = self._get_citygml(file_path)
|
||||
# reduced library
|
||||
UsageFactory('ca', city)
|
||||
for building in city.buildings:
|
||||
for usage_zone in building.usage_zones:
|
||||
self.assertIsNotNone(usage_zone.usage, 'usage is none')
|
||||
self.assertIsNotNone(usage_zone.internal_gains, 'usage is none')
|
||||
self.assertIsNotNone(usage_zone.cooling_setpoint, 'usage is none')
|
||||
self.assertIsNotNone(usage_zone.heating_setback, 'usage is none')
|
||||
self.assertIsNotNone(usage_zone.heating_setpoint, 'usage is none')
|
||||
self.assertIsNotNone(usage_zone.occupancy_density, 'usage is none')
|
||||
self.assertIsNotNone(usage_zone.hours_day, 'usage is none')
|
||||
self.assertIsNotNone(usage_zone.days_year, 'usage is none')
|
634693
non_functional_tests/tests_data/20190815_mitte_out_MC_FloursurfaceADD.gml
Normal file
634693
non_functional_tests/tests_data/20190815_mitte_out_MC_FloursurfaceADD.gml
Normal file
File diff suppressed because one or more lines are too long
81
non_functional_tests/tests_data/kelowna.obj
Normal file
81
non_functional_tests/tests_data/kelowna.obj
Normal file
|
@ -0,0 +1,81 @@
|
|||
# https://github.com/mikedh/trimesh
|
||||
v 329238.00000000 5528272.00000000 0.00000000
|
||||
v 329238.00000000 5528272.00000000 3.79999995
|
||||
v 329254.12500000 5528263.00000000 0.00000000
|
||||
v 329254.12500000 5528263.00000000 3.79999995
|
||||
v 329245.12500000 5528267.50000000 4.93084002
|
||||
v 329246.15625000 5528272.50000000 0.00000000
|
||||
v 329246.15625000 5528272.50000000 3.79999995
|
||||
v 329229.15625000 5528271.00000000 0.00000000
|
||||
v 329229.15625000 5528271.00000000 3.79999995
|
||||
v 329242.18750000 5528267.00000000 5.29822016
|
||||
v 329238.31250000 5528266.50000000 4.68875980
|
||||
v 329229.31250000 5528269.50000000 0.00000000
|
||||
v 329229.31250000 5528269.50000000 3.79999995
|
||||
v 329244.34375000 5528267.00000000 4.99910021
|
||||
v 329242.34375000 5528267.00000000 5.30000019
|
||||
v 329233.34375000 5528276.00000000 0.00000000
|
||||
v 329233.34375000 5528276.00000000 3.79999995
|
||||
v 329247.34375000 5528262.50000000 0.00000000
|
||||
v 329247.34375000 5528262.50000000 3.79999995
|
||||
v 329242.40625000 5528257.50000000 0.00000000
|
||||
v 329242.40625000 5528257.50000000 3.79999995
|
||||
v 329231.50000000 5528270.50000000 4.31147003
|
||||
v 329253.53125000 5528273.00000000 0.00000000
|
||||
v 329253.53125000 5528273.00000000 3.79999995
|
||||
v 329241.71875000 5528276.50000000 0.00000000
|
||||
v 329241.71875000 5528276.50000000 3.79999995
|
||||
v 329233.81250000 5528270.50000000 4.68364000
|
||||
v 329248.81250000 5528267.50000000 4.92572021
|
||||
f 22 9 13
|
||||
f 28 4 24
|
||||
f 23 6 7
|
||||
f 7 24 23
|
||||
f 6 25 26
|
||||
f 26 7 6
|
||||
f 25 1 2
|
||||
f 2 26 25
|
||||
f 1 16 17
|
||||
f 17 2 1
|
||||
f 16 8 9
|
||||
f 9 17 16
|
||||
f 8 12 13
|
||||
f 13 9 8
|
||||
f 12 20 21
|
||||
f 21 13 12
|
||||
f 20 18 19
|
||||
f 19 21 20
|
||||
f 18 3 4
|
||||
f 4 19 18
|
||||
f 3 23 24
|
||||
f 24 4 3
|
||||
f 6 23 3
|
||||
f 6 3 18
|
||||
f 6 18 20
|
||||
f 6 20 12
|
||||
f 6 12 8
|
||||
f 8 16 1
|
||||
f 6 8 1
|
||||
f 1 25 6
|
||||
f 24 7 14
|
||||
f 24 14 5
|
||||
f 5 28 24
|
||||
f 7 26 15
|
||||
f 15 14 7
|
||||
f 26 2 11
|
||||
f 26 11 10
|
||||
f 10 15 26
|
||||
f 2 17 27
|
||||
f 27 11 2
|
||||
f 17 9 22
|
||||
f 22 27 17
|
||||
f 21 10 11
|
||||
f 13 21 11
|
||||
f 13 11 27
|
||||
f 27 22 13
|
||||
f 21 19 5
|
||||
f 21 5 14
|
||||
f 21 14 15
|
||||
f 15 10 21
|
||||
f 19 4 28
|
||||
f 28 5 19
|
409
non_functional_tests/tests_data/one_building_in_kelowna.gml
Normal file
409
non_functional_tests/tests_data/one_building_in_kelowna.gml
Normal file
|
@ -0,0 +1,409 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<core:CityModel xmlns:brid="http://www.opengis.net/citygml/bridge/2.0" xmlns:tran="http://www.opengis.net/citygml/transportation/2.0" xmlns:frn="http://www.opengis.net/citygml/cityfurniture/2.0" xmlns:wtr="http://www.opengis.net/citygml/waterbody/2.0" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:veg="http://www.opengis.net/citygml/vegetation/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:tun="http://www.opengis.net/citygml/tunnel/2.0" xmlns:tex="http://www.opengis.net/citygml/texturedsurface/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:luse="http://www.opengis.net/citygml/landuse/2.0" xmlns:xAL="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:smil20lang="http://www.w3.org/2001/SMIL20/Language" xmlns:pbase="http://www.opengis.net/citygml/profiles/base/2.0" xmlns:smil20="http://www.w3.org/2001/SMIL20/" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:grp="http://www.opengis.net/citygml/cityobjectgroup/2.0">
|
||||
<gml:boundedBy>
|
||||
<gml:Envelope srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:lowerCorner>326011.03601000085 5526048.416990001 -1.6000000000058208</gml:lowerCorner>
|
||||
<gml:upperCorner>329466.6600299999 5529018.72205 9.80000000000291</gml:upperCorner>
|
||||
</gml:Envelope>
|
||||
</gml:boundedBy>
|
||||
<core:cityObjectMember>
|
||||
<bldg:Building gml:id="BLD109438">
|
||||
<gen:doubleAttribute name="gross_floor_area">
|
||||
<gen:value>291</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:stringAttribute name="gross_floor_raea_unit">
|
||||
<gen:value>m2</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<bldg:function>residential</bldg:function>
|
||||
<bldg:yearOfConstruction>1996</bldg:yearOfConstruction>
|
||||
<bldg:measuredHeight>5.3</bldg:measuredHeight>
|
||||
<bldg:storeysAboveGround>1</bldg:storeysAboveGround>
|
||||
<bldg:lod2Solid>
|
||||
<gml:Solid srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:exterior>
|
||||
<gml:CompositeSurface>
|
||||
<gml:surfaceMember xlink:href="#UUID_854e7876-bcb7-43f5-9f4b-7c55803cf04f"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_50045e42-87aa-4aa4-b179-99d03a5569df"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_6138b267-e734-4830-98f8-a79fc4d38da4"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_7e4a20ee-4581-4e9a-a661-3e80c79ae226"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_770546ef-e544-4d39-8747-e5c6c88d5725"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_0f22b07c-8bd5-43d1-8904-c96a5a0456ce"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_b6219259-c948-487a-96dc-25f9ce257974"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_d806c8f3-93e1-4155-ab28-743fed870f6b"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_da660fbf-9aea-4895-8d9c-cf5fab95862e"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_6315337c-3919-423e-9e46-35fc5f005b7d"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_6bed5c5e-9ee9-4b3a-bfbc-fac54c0f2090"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_8f4f6388-d576-4ded-925a-fd01d43e3c11"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_ad685374-7888-41cf-8464-48c037230174"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_1b440294-d10f-49e2-9c65-78aa0a57a389"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_4d4017ed-3a71-43c7-a79c-04acd9f86433"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_b7c0600b-0c3b-4b8c-8f5f-11d8f774966e"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_18f19ab4-f128-41a0-ab05-34d91ad061b9"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_e5b962d8-6186-4e78-ae08-fc0c00484e8c"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_eebbc322-bf68-4c56-a826-392b617db97c"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_16a00d48-90a4-4cd1-94e6-0654a5b9b1d2"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_4832dea6-f237-45ec-a711-ce1fc27b7e3b"/>
|
||||
</gml:CompositeSurface>
|
||||
</gml:exterior>
|
||||
</gml:Solid>
|
||||
</bldg:lod2Solid>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_2e3a196c-b5b1-4ee4-af82-329ced61e624">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_854e7876-bcb7-43f5-9f4b-7c55803cf04f">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329231.5010599997 5528270.404139999 4.311470000000554 329229.15295 5528271.14002 3.8000000000029104 329229.30395000055 5528269.304020001 3.8000000000029104 329231.5010599997 5528270.404139999 4.311470000000554</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_9a4410b3-f53c-468a-aef9-1e9f1ba88748">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_50045e42-87aa-4aa4-b179-99d03a5569df">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329248.8121399991 5528267.658840001 4.925719999999274 329254.11205999926 5528262.99903 3.8000000000029104 329253.52796000056 5528272.956 3.8000000000029104 329248.8121399991 5528267.658840001 4.925719999999274</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_d4f2198a-dd18-4fe2-a1f3-33f47393cb22">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_6138b267-e734-4830-98f8-a79fc4d38da4">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329246.16602000035 5528272.533020001 0 329246.16602000035 5528272.533020001 3.8000000000029104 329253.52796000056 5528272.956 3.8000000000029104 329253.52796000056 5528272.956 0 329246.16602000035 5528272.533020001 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_3d62148d-9d75-455f-86aa-1c0877942853">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_7e4a20ee-4581-4e9a-a661-3e80c79ae226">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329241.7199700009 5528276.307010001 0 329241.7199700009 5528276.307010001 3.8000000000029104 329246.16602000035 5528272.533020001 3.8000000000029104 329246.16602000035 5528272.533020001 0 329241.7199700009 5528276.307010001 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_b59d0530-9980-46ae-8452-e0a07cfdf84d">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_770546ef-e544-4d39-8747-e5c6c88d5725">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329237.9890100006 5528272.159 0 329237.9890100006 5528272.159 3.8000000000029104 329241.7199700009 5528276.307010001 3.8000000000029104 329241.7199700009 5528276.307010001 0 329237.9890100006 5528272.159 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_c0bd57d9-a02c-40d5-b467-3fd57478e93b">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_0f22b07c-8bd5-43d1-8904-c96a5a0456ce">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329233.3360600006 5528276.213989999 0 329233.3360600006 5528276.213989999 3.8000000000029104 329237.9890100006 5528272.159 3.8000000000029104 329237.9890100006 5528272.159 0 329233.3360600006 5528276.213989999 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_2ff7cfd9-a3d1-4c76-b30e-501cc012b663">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_b6219259-c948-487a-96dc-25f9ce257974">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329229.15295 5528271.14002 0 329229.15295 5528271.14002 3.8000000000029104 329233.3360600006 5528276.213989999 3.8000000000029104 329233.3360600006 5528276.213989999 0 329229.15295 5528271.14002 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_4bcf78ac-c688-40f8-86ca-19bd790a6647">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_d806c8f3-93e1-4155-ab28-743fed870f6b">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329229.30395000055 5528269.304020001 0 329229.30395000055 5528269.304020001 3.8000000000029104 329229.15295 5528271.14002 3.8000000000029104 329229.15295 5528271.14002 0 329229.30395000055 5528269.304020001 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_5677b3e5-abef-4bc0-87a3-3366fc38e6f9">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_da660fbf-9aea-4895-8d9c-cf5fab95862e">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329242.40003000014 5528257.71503 0 329242.40003000014 5528257.71503 3.8000000000029104 329229.30395000055 5528269.304020001 3.8000000000029104 329229.30395000055 5528269.304020001 0 329242.40003000014 5528257.71503 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_e32a4a70-ad52-4f92-a7e4-bcaeb38ff7c9">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_6315337c-3919-423e-9e46-35fc5f005b7d">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329247.3289800007 5528262.52503 0 329247.3289800007 5528262.52503 3.8000000000029104 329242.40003000014 5528257.71503 3.8000000000029104 329242.40003000014 5528257.71503 0 329247.3289800007 5528262.52503 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_b1442311-0705-4bec-a28d-a81db9bd2f5d">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_6bed5c5e-9ee9-4b3a-bfbc-fac54c0f2090">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329254.11205999926 5528262.99903 0 329254.11205999926 5528262.99903 3.8000000000029104 329247.3289800007 5528262.52503 3.8000000000029104 329247.3289800007 5528262.52503 0 329254.11205999926 5528262.99903 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_63185eaf-4f7b-481b-b912-193cfcb4316a">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_8f4f6388-d576-4ded-925a-fd01d43e3c11">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329253.52796000056 5528272.956 0 329253.52796000056 5528272.956 3.8000000000029104 329254.11205999926 5528262.99903 3.8000000000029104 329254.11205999926 5528262.99903 0 329253.52796000056 5528272.956 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:GroundSurface gml:id="UUID_e348daa3-75bc-44c5-b203-aca0902b4034">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_ad685374-7888-41cf-8464-48c037230174">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329253.52796000056 5528272.956 0 329254.11205999926 5528262.99903 0 329247.3289800007 5528262.52503 0 329242.40003000014 5528257.71503 0 329229.30395000055 5528269.304020001 0 329229.15295 5528271.14002 0 329233.3360600006 5528276.213989999 0 329237.9890100006 5528272.159 0 329241.7199700009 5528276.307010001 0 329246.16602000035 5528272.533020001 0 329253.52796000056 5528272.956 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:GroundSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_1b3328ee-ecdb-45a9-b6f3-e36247f4929e">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_1b440294-d10f-49e2-9c65-78aa0a57a389">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329246.16602000035 5528272.533020001 3.8000000000029104 329244.33748999983 5528267.074109999 4.999100000000908 329245.1323099993 5528267.42457 4.930840000000899 329248.8121399991 5528267.658840001 4.925719999999274 329253.52796000056 5528272.956 3.8000000000029104 329246.16602000035 5528272.533020001 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_02a78c5a-3d35-4491-9801-64aa42addf7e">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_4d4017ed-3a71-43c7-a79c-04acd9f86433">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329241.7199700009 5528276.307010001 3.8000000000029104 329242.3462899998 5528267.00502 5.30000000000291 329244.33748999983 5528267.074109999 4.999100000000908 329246.16602000035 5528272.533020001 3.8000000000029104 329241.7199700009 5528276.307010001 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_f550a210-6813-4f8a-b826-7f7965b50a4a">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_b7c0600b-0c3b-4b8c-8f5f-11d8f774966e">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329237.9890100006 5528272.159 3.8000000000029104 329238.32637000084 5528266.609999999 4.6887600000045495 329242.1777599994 5528266.829500001 5.298219999996945 329242.3462899998 5528267.00502 5.30000000000291 329241.7199700009 5528276.307010001 3.8000000000029104 329237.9890100006 5528272.159 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_8d65b4c5-fa18-4cee-81c9-45229588115e">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_18f19ab4-f128-41a0-ab05-34d91ad061b9">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329233.3360600006 5528276.213989999 3.8000000000029104 329233.80010999925 5528270.5848900005 4.683640000002924 329238.32637000084 5528266.609999999 4.6887600000045495 329237.9890100006 5528272.159 3.8000000000029104 329233.3360600006 5528276.213989999 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_46e8afe5-fd30-4c7a-88ae-a7ee5b2d2af6">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_e5b962d8-6186-4e78-ae08-fc0c00484e8c">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329229.15295 5528271.14002 3.8000000000029104 329231.5010599997 5528270.404139999 4.311470000000554 329233.80010999925 5528270.5848900005 4.683640000002924 329233.3360600006 5528276.213989999 3.8000000000029104 329229.15295 5528271.14002 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_c535c900-8077-46d6-a267-d3e9f3c34254">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_eebbc322-bf68-4c56-a826-392b617db97c">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329242.40003000014 5528257.71503 3.8000000000029104 329242.1777599994 5528266.829500001 5.298219999996945 329238.32637000084 5528266.609999999 4.6887600000045495 329233.80010999925 5528270.5848900005 4.683640000002924 329231.5010599997 5528270.404139999 4.311470000000554 329229.30395000055 5528269.304020001 3.8000000000029104 329242.40003000014 5528257.71503 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_d6d9c32d-cd29-490e-accc-3ac5decbb289">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_16a00d48-90a4-4cd1-94e6-0654a5b9b1d2">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329247.3289800007 5528262.52503 3.8000000000029104 329245.1323099993 5528267.42457 4.930840000000899 329244.33748999983 5528267.074109999 4.999100000000908 329242.3462899998 5528267.00502 5.30000000000291 329242.1777599994 5528266.829500001 5.298219999996945 329242.40003000014 5528257.71503 3.8000000000029104 329247.3289800007 5528262.52503 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_d97b1be8-8be7-4a5c-9f4d-3159853b054e">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_4832dea6-f237-45ec-a711-ce1fc27b7e3b">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329254.11205999926 5528262.99903 3.8000000000029104 329248.8121399991 5528267.658840001 4.925719999999274 329245.1323099993 5528267.42457 4.930840000000899 329247.3289800007 5528262.52503 3.8000000000029104 329254.11205999926 5528262.99903 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
</bldg:Building>
|
||||
</core:cityObjectMember>
|
||||
</core:CityModel>
|
|
@ -0,0 +1,409 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<core:CityModel xmlns:brid="http://www.opengis.net/citygml/bridge/2.0" xmlns:tran="http://www.opengis.net/citygml/transportation/2.0" xmlns:frn="http://www.opengis.net/citygml/cityfurniture/2.0" xmlns:wtr="http://www.opengis.net/citygml/waterbody/2.0" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:veg="http://www.opengis.net/citygml/vegetation/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:tun="http://www.opengis.net/citygml/tunnel/2.0" xmlns:tex="http://www.opengis.net/citygml/texturedsurface/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:luse="http://www.opengis.net/citygml/landuse/2.0" xmlns:xAL="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:smil20lang="http://www.w3.org/2001/SMIL20/Language" xmlns:pbase="http://www.opengis.net/citygml/profiles/base/2.0" xmlns:smil20="http://www.w3.org/2001/SMIL20/" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:grp="http://www.opengis.net/citygml/cityobjectgroup/2.0">
|
||||
<gml:boundedBy>
|
||||
<gml:Envelope srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:lowerCorner>326011.03601000085 5526048.416990001 -1.6000000000058208</gml:lowerCorner>
|
||||
<gml:upperCorner>329466.6600299999 5529018.72205 9.80000000000291</gml:upperCorner>
|
||||
</gml:Envelope>
|
||||
</gml:boundedBy>
|
||||
<core:cityObjectMember>
|
||||
<bldg:Building gml:id="BLD109438">
|
||||
<gen:doubleAttribute name="gross_floor_area">
|
||||
<gen:value>291</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:stringAttribute name="gross_floor_raea_unit">
|
||||
<gen:value>m2</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<bldg:function>1010</bldg:function>
|
||||
<bldg:yearOfConstruction>1996</bldg:yearOfConstruction>
|
||||
<bldg:measuredHeight>5.3</bldg:measuredHeight>
|
||||
<bldg:storeysAboveGround>1</bldg:storeysAboveGround>
|
||||
<bldg:lod2Solid>
|
||||
<gml:Solid srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:exterior>
|
||||
<gml:CompositeSurface>
|
||||
<gml:surfaceMember xlink:href="#UUID_854e7876-bcb7-43f5-9f4b-7c55803cf04f"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_50045e42-87aa-4aa4-b179-99d03a5569df"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_6138b267-e734-4830-98f8-a79fc4d38da4"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_7e4a20ee-4581-4e9a-a661-3e80c79ae226"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_770546ef-e544-4d39-8747-e5c6c88d5725"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_0f22b07c-8bd5-43d1-8904-c96a5a0456ce"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_b6219259-c948-487a-96dc-25f9ce257974"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_d806c8f3-93e1-4155-ab28-743fed870f6b"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_da660fbf-9aea-4895-8d9c-cf5fab95862e"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_6315337c-3919-423e-9e46-35fc5f005b7d"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_6bed5c5e-9ee9-4b3a-bfbc-fac54c0f2090"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_8f4f6388-d576-4ded-925a-fd01d43e3c11"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_ad685374-7888-41cf-8464-48c037230174"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_1b440294-d10f-49e2-9c65-78aa0a57a389"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_4d4017ed-3a71-43c7-a79c-04acd9f86433"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_b7c0600b-0c3b-4b8c-8f5f-11d8f774966e"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_18f19ab4-f128-41a0-ab05-34d91ad061b9"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_e5b962d8-6186-4e78-ae08-fc0c00484e8c"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_eebbc322-bf68-4c56-a826-392b617db97c"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_16a00d48-90a4-4cd1-94e6-0654a5b9b1d2"/>
|
||||
<gml:surfaceMember xlink:href="#UUID_4832dea6-f237-45ec-a711-ce1fc27b7e3b"/>
|
||||
</gml:CompositeSurface>
|
||||
</gml:exterior>
|
||||
</gml:Solid>
|
||||
</bldg:lod2Solid>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_2e3a196c-b5b1-4ee4-af82-329ced61e624">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_854e7876-bcb7-43f5-9f4b-7c55803cf04f">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329231.5010599997 5528270.404139999 4.311470000000554 329229.15295 5528271.14002 3.8000000000029104 329229.30395000055 5528269.304020001 3.8000000000029104 329231.5010599997 5528270.404139999 4.311470000000554</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_9a4410b3-f53c-468a-aef9-1e9f1ba88748">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_50045e42-87aa-4aa4-b179-99d03a5569df">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329248.8121399991 5528267.658840001 4.925719999999274 329254.11205999926 5528262.99903 3.8000000000029104 329253.52796000056 5528272.956 3.8000000000029104 329248.8121399991 5528267.658840001 4.925719999999274</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_d4f2198a-dd18-4fe2-a1f3-33f47393cb22">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_6138b267-e734-4830-98f8-a79fc4d38da4">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329246.16602000035 5528272.533020001 0 329246.16602000035 5528272.533020001 3.8000000000029104 329253.52796000056 5528272.956 3.8000000000029104 329253.52796000056 5528272.956 0 329246.16602000035 5528272.533020001 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_3d62148d-9d75-455f-86aa-1c0877942853">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_7e4a20ee-4581-4e9a-a661-3e80c79ae226">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329241.7199700009 5528276.307010001 0 329241.7199700009 5528276.307010001 3.8000000000029104 329246.16602000035 5528272.533020001 3.8000000000029104 329246.16602000035 5528272.533020001 0 329241.7199700009 5528276.307010001 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_b59d0530-9980-46ae-8452-e0a07cfdf84d">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_770546ef-e544-4d39-8747-e5c6c88d5725">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329237.9890100006 5528272.159 0 329237.9890100006 5528272.159 3.8000000000029104 329241.7199700009 5528276.307010001 3.8000000000029104 329241.7199700009 5528276.307010001 0 329237.9890100006 5528272.159 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_c0bd57d9-a02c-40d5-b467-3fd57478e93b">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_0f22b07c-8bd5-43d1-8904-c96a5a0456ce">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329233.3360600006 5528276.213989999 0 329233.3360600006 5528276.213989999 3.8000000000029104 329237.9890100006 5528272.159 3.8000000000029104 329237.9890100006 5528272.159 0 329233.3360600006 5528276.213989999 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_2ff7cfd9-a3d1-4c76-b30e-501cc012b663">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_b6219259-c948-487a-96dc-25f9ce257974">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329229.15295 5528271.14002 0 329229.15295 5528271.14002 3.8000000000029104 329233.3360600006 5528276.213989999 3.8000000000029104 329233.3360600006 5528276.213989999 0 329229.15295 5528271.14002 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_4bcf78ac-c688-40f8-86ca-19bd790a6647">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_d806c8f3-93e1-4155-ab28-743fed870f6b">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329229.30395000055 5528269.304020001 0 329229.30395000055 5528269.304020001 3.8000000000029104 329229.15295 5528271.14002 3.8000000000029104 329229.15295 5528271.14002 0 329229.30395000055 5528269.304020001 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_5677b3e5-abef-4bc0-87a3-3366fc38e6f9">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_da660fbf-9aea-4895-8d9c-cf5fab95862e">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329242.40003000014 5528257.71503 0 329242.40003000014 5528257.71503 3.8000000000029104 329229.30395000055 5528269.304020001 3.8000000000029104 329229.30395000055 5528269.304020001 0 329242.40003000014 5528257.71503 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_e32a4a70-ad52-4f92-a7e4-bcaeb38ff7c9">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_6315337c-3919-423e-9e46-35fc5f005b7d">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329247.3289800007 5528262.52503 0 329247.3289800007 5528262.52503 3.8000000000029104 329242.40003000014 5528257.71503 3.8000000000029104 329242.40003000014 5528257.71503 0 329247.3289800007 5528262.52503 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_b1442311-0705-4bec-a28d-a81db9bd2f5d">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_6bed5c5e-9ee9-4b3a-bfbc-fac54c0f2090">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329254.11205999926 5528262.99903 0 329254.11205999926 5528262.99903 3.8000000000029104 329247.3289800007 5528262.52503 3.8000000000029104 329247.3289800007 5528262.52503 0 329254.11205999926 5528262.99903 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:WallSurface gml:id="UUID_63185eaf-4f7b-481b-b912-193cfcb4316a">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_8f4f6388-d576-4ded-925a-fd01d43e3c11">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329253.52796000056 5528272.956 0 329253.52796000056 5528272.956 3.8000000000029104 329254.11205999926 5528262.99903 3.8000000000029104 329254.11205999926 5528262.99903 0 329253.52796000056 5528272.956 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:WallSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:GroundSurface gml:id="UUID_e348daa3-75bc-44c5-b203-aca0902b4034">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_ad685374-7888-41cf-8464-48c037230174">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329253.52796000056 5528272.956 0 329254.11205999926 5528262.99903 0 329247.3289800007 5528262.52503 0 329242.40003000014 5528257.71503 0 329229.30395000055 5528269.304020001 0 329229.15295 5528271.14002 0 329233.3360600006 5528276.213989999 0 329237.9890100006 5528272.159 0 329241.7199700009 5528276.307010001 0 329246.16602000035 5528272.533020001 0 329253.52796000056 5528272.956 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:GroundSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_1b3328ee-ecdb-45a9-b6f3-e36247f4929e">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_1b440294-d10f-49e2-9c65-78aa0a57a389">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329246.16602000035 5528272.533020001 3.8000000000029104 329244.33748999983 5528267.074109999 4.999100000000908 329245.1323099993 5528267.42457 4.930840000000899 329248.8121399991 5528267.658840001 4.925719999999274 329253.52796000056 5528272.956 3.8000000000029104 329246.16602000035 5528272.533020001 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_02a78c5a-3d35-4491-9801-64aa42addf7e">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_4d4017ed-3a71-43c7-a79c-04acd9f86433">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329241.7199700009 5528276.307010001 3.8000000000029104 329242.3462899998 5528267.00502 5.30000000000291 329244.33748999983 5528267.074109999 4.999100000000908 329246.16602000035 5528272.533020001 3.8000000000029104 329241.7199700009 5528276.307010001 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_f550a210-6813-4f8a-b826-7f7965b50a4a">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_b7c0600b-0c3b-4b8c-8f5f-11d8f774966e">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329237.9890100006 5528272.159 3.8000000000029104 329238.32637000084 5528266.609999999 4.6887600000045495 329242.1777599994 5528266.829500001 5.298219999996945 329242.3462899998 5528267.00502 5.30000000000291 329241.7199700009 5528276.307010001 3.8000000000029104 329237.9890100006 5528272.159 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_8d65b4c5-fa18-4cee-81c9-45229588115e">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_18f19ab4-f128-41a0-ab05-34d91ad061b9">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329233.3360600006 5528276.213989999 3.8000000000029104 329233.80010999925 5528270.5848900005 4.683640000002924 329238.32637000084 5528266.609999999 4.6887600000045495 329237.9890100006 5528272.159 3.8000000000029104 329233.3360600006 5528276.213989999 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_46e8afe5-fd30-4c7a-88ae-a7ee5b2d2af6">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_e5b962d8-6186-4e78-ae08-fc0c00484e8c">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329229.15295 5528271.14002 3.8000000000029104 329231.5010599997 5528270.404139999 4.311470000000554 329233.80010999925 5528270.5848900005 4.683640000002924 329233.3360600006 5528276.213989999 3.8000000000029104 329229.15295 5528271.14002 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_c535c900-8077-46d6-a267-d3e9f3c34254">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_eebbc322-bf68-4c56-a826-392b617db97c">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329242.40003000014 5528257.71503 3.8000000000029104 329242.1777599994 5528266.829500001 5.298219999996945 329238.32637000084 5528266.609999999 4.6887600000045495 329233.80010999925 5528270.5848900005 4.683640000002924 329231.5010599997 5528270.404139999 4.311470000000554 329229.30395000055 5528269.304020001 3.8000000000029104 329242.40003000014 5528257.71503 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_d6d9c32d-cd29-490e-accc-3ac5decbb289">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_16a00d48-90a4-4cd1-94e6-0654a5b9b1d2">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329247.3289800007 5528262.52503 3.8000000000029104 329245.1323099993 5528267.42457 4.930840000000899 329244.33748999983 5528267.074109999 4.999100000000908 329242.3462899998 5528267.00502 5.30000000000291 329242.1777599994 5528266.829500001 5.298219999996945 329242.40003000014 5528257.71503 3.8000000000029104 329247.3289800007 5528262.52503 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<bldg:boundedBy>
|
||||
<bldg:RoofSurface gml:id="UUID_d97b1be8-8be7-4a5c-9f4d-3159853b054e">
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_4832dea6-f237-45ec-a711-ce1fc27b7e3b">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>329254.11205999926 5528262.99903 3.8000000000029104 329248.8121399991 5528267.658840001 4.925719999999274 329245.1323099993 5528267.42457 4.930840000000899 329247.3289800007 5528262.52503 3.8000000000029104 329254.11205999926 5528262.99903 3.8000000000029104</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
</bldg:Building>
|
||||
</core:cityObjectMember>
|
||||
</core:CityModel>
|
420
non_functional_tests/tests_data/pluto_building.gml
Normal file
420
non_functional_tests/tests_data/pluto_building.gml
Normal file
|
@ -0,0 +1,420 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<CityModel>
|
||||
<name>Gowanus 2050 Best Practice Scenario</name>
|
||||
<boundedBy>
|
||||
<Envelope srsName="EPSG:32118" srsDimension="3" xmlns:brid="http://www.opengis.net/citygml/bridge/2.0" xmlns:tran="http://www.opengis.net/citygml/transportation/2.0" xmlns:frn="http://www.opengis.net/citygml/cityfurniture/2.0" xmlns:wtr="http://www.opengis.net/citygml/waterbody/2.0" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:veg="http://www.opengis.net/citygml/vegetation/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:tun="http://www.opengis.net/citygml/tunnel/2.0" xmlns:tex="http://www.opengis.net/citygml/texturedsurface/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:luse="http://www.opengis.net/citygml/landuse/2.0" xmlns:xAL="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:smil20lang="http://www.w3.org/2001/SMIL20/Language" xmlns:pbase="http://www.opengis.net/citygml/profiles/base/2.0" xmlns:smil20="http://www.w3.org/2001/SMIL20/" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:grp="http://www.opengis.net/citygml/cityobjectgroup/2.0">
|
||||
<lowerCorner>299606.4441129853 55348.37638737355 0</lowerCorner>
|
||||
<upperCorner>301879.9050504853 57594.05119206105 62.04879541695123</upperCorner>
|
||||
</Envelope>
|
||||
</boundedBy>
|
||||
<cityObjectMember>
|
||||
<Building id="GBP__169">
|
||||
<lod1Solid>
|
||||
<Solid srsName="EPSG:32118" srsDimension="3">
|
||||
<exterior>
|
||||
<CompositeSurface>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301010.4314176728 57301.3749225298 10.786276534199727 301004.1125700165 57288.87345768605 10.786276534199727 301024.4275114228 57311.0624225298 10.786276534199727 301010.4314176728 57301.3749225298 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301014.183859079 57308.78849674855 10.786276534199727 301010.4314176728 57301.3749225298 10.786276534199727 301024.4275114228 57311.0624225298 10.786276534199727 301014.183859079 57308.78849674855 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301004.1125700165 57288.87345768605 10.786276534199727 300992.0398161103 57285.56779362355 10.786276534199727 301000.3254606415 57281.3758990923 10.786276534199727 301004.1125700165 57288.87345768605 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301024.4275114228 57311.0624225298 10.786276534199727 301004.1125700165 57288.87345768605 10.786276534199727 301004.5266325165 57271.70548893605 10.786276534199727 301024.4275114228 57311.0624225298 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301000.3254606415 57281.3758990923 10.786276534199727 300997.2820036103 57275.3758990923 10.786276534199727 301004.5266325165 57271.70548893605 10.786276534199727 301000.3254606415 57281.3758990923 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301004.1125700165 57288.87345768605 10.786276534199727 301000.3254606415 57281.3758990923 10.786276534199727 301004.5266325165 57271.70548893605 10.786276534199727 301004.1125700165 57288.87345768605 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301017.183859079 57314.7147662798 10.786276534199727 301014.183859079 57308.78849674855 10.786276534199727 301024.4275114228 57311.0624225298 10.786276534199727 301017.183859079 57314.7147662798 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301005.9055387665 57312.9716022173 10.786276534199727 301002.1530973603 57305.55900456105 10.786276534199727 301014.183859079 57308.78849674855 10.786276534199727 301005.9055387665 57312.9716022173 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>300995.8337614228 57293.0555865923 10.786276534199727 300992.0398161103 57285.56779362355 10.786276534199727 301004.1125700165 57288.87345768605 10.786276534199727 300995.8337614228 57293.0555865923 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301014.183859079 57308.78849674855 10.786276534199727 301002.1530973603 57305.55900456105 10.786276534199727 301010.4314176728 57301.3749225298 10.786276534199727 301014.183859079 57308.78849674855 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301005.9055387665 57312.9716022173 10.786276534199727 301005.9055387665 57312.9716022173 0.0 301002.1530973603 57305.55900456105 10.786276534199727 301005.9055387665 57312.9716022173 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301002.1530973603 57305.55900456105 10.786276534199727 301005.9055387665 57312.9716022173 0.0 301002.1530973603 57305.55900456105 0.0 301002.1530973603 57305.55900456105 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301017.183859079 57314.7147662798 0.0 301024.4275114228 57311.0624225298 0.0 301014.183859079 57308.78849674855 0.0 301017.183859079 57314.7147662798 0.0</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301005.9055387665 57312.9716022173 0.0 301014.183859079 57308.78849674855 0.0 301002.1530973603 57305.55900456105 0.0 301005.9055387665 57312.9716022173 0.0</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>300995.8337614228 57293.0555865923 0.0 301004.1125700165 57288.87345768605 0.0 300992.0398161103 57285.56779362355 0.0 300995.8337614228 57293.0555865923 0.0</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301014.183859079 57308.78849674855 0.0 301010.4314176728 57301.3749225298 0.0 301002.1530973603 57305.55900456105 0.0 301014.183859079 57308.78849674855 0.0</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301010.4314176728 57301.3749225298 0.0 301024.4275114228 57311.0624225298 0.0 301004.1125700165 57288.87345768605 0.0 301010.4314176728 57301.3749225298 0.0</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301014.183859079 57308.78849674855 0.0 301024.4275114228 57311.0624225298 0.0 301010.4314176728 57301.3749225298 0.0 301014.183859079 57308.78849674855 0.0</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301024.4275114228 57311.0624225298 0.0 301004.5266325165 57271.70548893605 0.0 301004.1125700165 57288.87345768605 0.0 301024.4275114228 57311.0624225298 0.0</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301004.1125700165 57288.87345768605 0.0 301000.3254606415 57281.3758990923 0.0 300992.0398161103 57285.56779362355 0.0 301004.1125700165 57288.87345768605 0.0</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301000.3254606415 57281.3758990923 0.0 301004.5266325165 57271.70548893605 0.0 300997.2820036103 57275.3758990923 0.0 301000.3254606415 57281.3758990923 0.0</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301004.1125700165 57288.87345768605 0.0 301004.5266325165 57271.70548893605 0.0 301000.3254606415 57281.3758990923 0.0 301004.1125700165 57288.87345768605 0.0</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301014.183859079 57308.78849674855 10.786276534199727 301014.183859079 57308.78849674855 0.0 301005.9055387665 57312.9716022173 10.786276534199727 301014.183859079 57308.78849674855 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301005.9055387665 57312.9716022173 10.786276534199727 301014.183859079 57308.78849674855 0.0 301005.9055387665 57312.9716022173 0.0 301005.9055387665 57312.9716022173 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301017.183859079 57314.7147662798 10.786276534199727 301017.183859079 57314.7147662798 0.0 301014.183859079 57308.78849674855 10.786276534199727 301017.183859079 57314.7147662798 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301014.183859079 57308.78849674855 10.786276534199727 301017.183859079 57314.7147662798 0.0 301014.183859079 57308.78849674855 0.0 301014.183859079 57308.78849674855 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301002.1530973603 57305.55900456105 10.786276534199727 301002.1530973603 57305.55900456105 0.0 301010.4314176728 57301.3749225298 10.786276534199727 301002.1530973603 57305.55900456105 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301010.4314176728 57301.3749225298 10.786276534199727 301002.1530973603 57305.55900456105 0.0 301010.4314176728 57301.3749225298 0.0 301010.4314176728 57301.3749225298 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301024.4275114228 57311.0624225298 10.786276534199727 301024.4275114228 57311.0624225298 0.0 301017.183859079 57314.7147662798 10.786276534199727 301024.4275114228 57311.0624225298 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301017.183859079 57314.7147662798 10.786276534199727 301024.4275114228 57311.0624225298 0.0 301017.183859079 57314.7147662798 0.0 301017.183859079 57314.7147662798 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301004.5266325165 57271.70548893605 10.786276534199727 301004.5266325165 57271.70548893605 0.0 301024.4275114228 57311.0624225298 10.786276534199727 301004.5266325165 57271.70548893605 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301024.4275114228 57311.0624225298 10.786276534199727 301004.5266325165 57271.70548893605 0.0 301024.4275114228 57311.0624225298 0.0 301024.4275114228 57311.0624225298 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>300997.2820036103 57275.3758990923 10.786276534199727 300997.2820036103 57275.3758990923 0.0 301004.5266325165 57271.70548893605 10.786276534199727 300997.2820036103 57275.3758990923 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301004.5266325165 57271.70548893605 10.786276534199727 300997.2820036103 57275.3758990923 0.0 301004.5266325165 57271.70548893605 0.0 301004.5266325165 57271.70548893605 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301010.4314176728 57301.3749225298 10.786276534199727 301010.4314176728 57301.3749225298 0.0 301004.1125700165 57288.87345768605 10.786276534199727 301010.4314176728 57301.3749225298 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301004.1125700165 57288.87345768605 10.786276534199727 301010.4314176728 57301.3749225298 0.0 301004.1125700165 57288.87345768605 0.0 301004.1125700165 57288.87345768605 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301004.1125700165 57288.87345768605 10.786276534199727 301004.1125700165 57288.87345768605 0.0 300995.8337614228 57293.0555865923 10.786276534199727 301004.1125700165 57288.87345768605 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>300995.8337614228 57293.0555865923 10.786276534199727 301004.1125700165 57288.87345768605 0.0 300995.8337614228 57293.0555865923 0.0 300995.8337614228 57293.0555865923 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301000.3254606415 57281.3758990923 10.786276534199727 301000.3254606415 57281.3758990923 0.0 300997.2820036103 57275.3758990923 10.786276534199727 301000.3254606415 57281.3758990923 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>300997.2820036103 57275.3758990923 10.786276534199727 301000.3254606415 57281.3758990923 0.0 300997.2820036103 57275.3758990923 0.0 300997.2820036103 57275.3758990923 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>300995.8337614228 57293.0555865923 10.786276534199727 300995.8337614228 57293.0555865923 0.0 300992.0398161103 57285.56779362355 10.786276534199727 300995.8337614228 57293.0555865923 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>300992.0398161103 57285.56779362355 10.786276534199727 300995.8337614228 57293.0555865923 0.0 300992.0398161103 57285.56779362355 0.0 300992.0398161103 57285.56779362355 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>300992.0398161103 57285.56779362355 10.786276534199727 300992.0398161103 57285.56779362355 0.0 301000.3254606415 57281.3758990923 10.786276534199727 300992.0398161103 57285.56779362355 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
<surfaceMember>
|
||||
<Polygon>
|
||||
<exterior>
|
||||
<LinearRing>
|
||||
<posList>301000.3254606415 57281.3758990923 10.786276534199727 300992.0398161103 57285.56779362355 0.0 301000.3254606415 57281.3758990923 0.0 301000.3254606415 57281.3758990923 10.786276534199727</posList>
|
||||
</LinearRing>
|
||||
</exterior>
|
||||
</Polygon>
|
||||
</surfaceMember>
|
||||
</CompositeSurface>
|
||||
</exterior>
|
||||
</Solid>
|
||||
</lod1Solid>
|
||||
<yearOfConstruction>1965</yearOfConstruction>
|
||||
<function>W4</function>
|
||||
</Building>
|
||||
</cityObjectMember>
|
||||
</CityModel>
|
179883
non_functional_tests/tests_data/subway.osm
Normal file
179883
non_functional_tests/tests_data/subway.osm
Normal file
File diff suppressed because it is too large
Load Diff
4
non_functional_tests/tests_outputs/.gitignore
vendored
Normal file
4
non_functional_tests/tests_outputs/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Ignore everything in this directory
|
||||
*
|
||||
# Except this file
|
||||
!.gitignore
|
|
@ -30,16 +30,6 @@ class TestGeometryFactory(TestCase):
|
|||
self.assertIsNotNone(self._city_gml, 'city is none')
|
||||
return self._city_gml
|
||||
|
||||
def test_subway(self):
|
||||
"""
|
||||
Test subway parsing
|
||||
:return:
|
||||
"""
|
||||
file_path = (self._example_path / 'subway.osm').resolve()
|
||||
subway_entrances = self._features = GeometryFactory('osm_subway', file_path).features
|
||||
self.assertIsNotNone(subway_entrances, 'subway entrances is none')
|
||||
self.assertEqual(len(subway_entrances), 20, 'Wrong number of subway entrances')
|
||||
|
||||
def test_citygml_city_serialization(self):
|
||||
"""
|
||||
Test the City from citygml serialization de-serialization
|
||||
|
@ -69,129 +59,6 @@ class TestGeometryFactory(TestCase):
|
|||
self.assertIsNotNone(city.country_code, 'country code is none')
|
||||
os.remove(pickle_file)
|
||||
|
||||
def test_citygml_buildings(self):
|
||||
"""
|
||||
Test city objects in the city
|
||||
:return: None
|
||||
"""
|
||||
file = 'lod2_buildings.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
self.assertIsNotNone(building.name, 'building name is none')
|
||||
self.assertIsNotNone(building.lod, 'building lod is none')
|
||||
self.assertIsNotNone(building.centroid, 'building centroid is none')
|
||||
self.assertIsNotNone(building.year_of_construction, 'building year_of_construction is none')
|
||||
self.assertIsNotNone(building.function, 'building function is none')
|
||||
self.assertIsNotNone(building.volume, 'building volume is none')
|
||||
self.assertIsNotNone(building.surfaces, 'building surfaces is none')
|
||||
self.assertIsNotNone(building.surfaces[0].name, 'surface not found')
|
||||
self.assertIsNone(building.basement_heated, 'building basement_heated is not none')
|
||||
self.assertIsNone(building.attic_heated, 'building attic_heated is not none')
|
||||
self.assertIsNotNone(building.terrains, 'building terrains is none')
|
||||
self.assertIsNotNone(building.usage_zones, 'building usage_zones is none')
|
||||
self.assertIsNone(building.average_storey_height, 'building average_storey_height is not none')
|
||||
self.assertIsNone(building.storeys_above_ground, 'building storeys_above_ground is not none')
|
||||
self.assertIsNotNone(building.thermal_zones, 'building thermal_zones is none')
|
||||
self.assertIsNotNone(building.type, 'building type is none')
|
||||
self.assertIsNotNone(building.max_height, 'building max_height is none')
|
||||
self.assertIsNotNone(building.floor_area, 'building floor_area is none')
|
||||
|
||||
def test_citygml_surfaces(self):
|
||||
"""
|
||||
Test surfaces in city objects
|
||||
:return: None
|
||||
"""
|
||||
file = 'lod2_buildings.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
for surface in building.surfaces:
|
||||
self.assertIsNotNone(surface.name, 'surface name is none')
|
||||
self.assertIsNotNone(surface.type, 'surface type is none')
|
||||
self.assertIsNotNone(surface.azimuth, 'surface azimuth is none')
|
||||
self.assertIsNotNone(surface.inclination, 'surface inclination is none')
|
||||
self.assertIsNotNone(surface.area_below_ground, 'surface area_below_ground is none')
|
||||
self.assertIsNotNone(surface.area_above_ground, 'surface area_above_ground is none')
|
||||
self.assertIsNotNone(surface.global_irradiance, 'monthly irradiance is none')
|
||||
self.assertIsNone(surface.swr, 'surface swr is not none')
|
||||
self.assertIsNotNone(surface.bounds_lower_corner, 'surface envelope_lower_corner is none')
|
||||
self.assertIsNotNone(surface.bounds_upper_corner, 'surface envelope_upper_corner is none')
|
||||
self.assertIsNotNone(surface.area_above_ground, 'surface area_above_ground is none')
|
||||
self.assertIsNotNone(surface.perimeter_polygon, 'surface perimeter_polygon is none')
|
||||
self.assertIsNone(surface.holes_polygons, 'surface hole_polygons is not none')
|
||||
self.assertIsNotNone(surface.solid_polygon, 'surface solid_polygon is none')
|
||||
|
||||
def test_citygml_thermal_zone(self):
|
||||
"""
|
||||
Test thermal zones in city objects
|
||||
:return: None
|
||||
"""
|
||||
file = 'lod2_buildings.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
for thermal_zone in building.thermal_zones:
|
||||
self.assertIsNotNone(thermal_zone.surfaces, 'thermal_zone surfaces is none')
|
||||
self.assertIsNotNone(thermal_zone.bounded, 'thermal_zone bounded is none')
|
||||
self.assertIsNotNone(thermal_zone.floor_area, 'thermal_zone floor_area is none')
|
||||
self.assertIsNotNone(thermal_zone.is_heated, 'thermal_zone heated is none')
|
||||
self.assertIsNotNone(thermal_zone.is_cooled, 'thermal_zone cooled is none')
|
||||
self.assertIsNone(thermal_zone.additional_thermal_bridge_u_value,
|
||||
'thermal_zone additional_thermal_bridge_u_value is not none')
|
||||
self.assertIsNone(thermal_zone.effective_thermal_capacity,
|
||||
'thermal_zone effective_thermal_capacity is not none')
|
||||
self.assertIsNone(thermal_zone.indirectly_heated_area_ratio,
|
||||
'thermal_zone indirectly_heated_area_ratio is not none')
|
||||
self.assertIsNone(thermal_zone.infiltration_rate_system_off,
|
||||
'thermal_zone infiltration_rate_system_off is not none')
|
||||
self.assertIsNone(thermal_zone.infiltration_rate_system_on,
|
||||
'thermal_zone infiltration_rate_system_on is not none')
|
||||
self.assertIsNone(thermal_zone.usage_zones,
|
||||
'thermal_zone usage_zones are not none')
|
||||
|
||||
def test_citygml_thermal_boundary(self):
|
||||
"""
|
||||
Test thermal boundaries in thermal zones
|
||||
:return: None
|
||||
"""
|
||||
file = 'lod2_buildings.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
for thermal_zone in building.thermal_zones:
|
||||
for thermal_boundary in thermal_zone.bounded:
|
||||
self.assertIsNotNone(thermal_boundary.surface, 'thermal_boundary surface is none')
|
||||
self.assertIsNotNone(thermal_boundary.type, 'thermal_boundary type is none')
|
||||
self.assertIsNotNone(thermal_boundary.area, 'thermal_boundary area is none')
|
||||
self.assertIsNotNone(thermal_boundary.area_above_ground, 'thermal_boundary area_above_ground is none')
|
||||
self.assertIsNotNone(thermal_boundary.area_below_ground, 'thermal_boundary area_below_ground is none')
|
||||
self.assertIsNotNone(thermal_boundary.azimuth, 'thermal_boundary azimuth is none')
|
||||
self.assertIsNotNone(thermal_boundary.delimits, 'thermal_boundary delimits is none')
|
||||
self.assertIsNotNone(thermal_boundary.inclination, 'thermal_boundary inclination is none')
|
||||
|
||||
def test_citygml_thermal_opening(self):
|
||||
"""
|
||||
Test thermal openings in thermal zones
|
||||
:return: None
|
||||
"""
|
||||
file = 'lod2_buildings.gml'
|
||||
city = self._get_citygml(file)
|
||||
for building in city.buildings:
|
||||
for thermal_zone in building.thermal_zones:
|
||||
for thermal_boundary in thermal_zone.bounded:
|
||||
for thermal_opening in thermal_boundary.thermal_openings:
|
||||
self.assertIsNone(thermal_opening.frame_ratio, 'thermal_opening frame_ratio was initialized')
|
||||
self.assertIsNone(thermal_opening.g_value, 'thermal_opening g_value was initialized')
|
||||
self.assertIsNone(thermal_opening.conductivity, 'thermal_opening conductivity_w_mk was initialized')
|
||||
self.assertIsNone(thermal_opening.back_side_solar_transmittance_at_normal_incidence,
|
||||
'thermal_opening back_side_solar_transmittance_at_normal_incidence was initialized')
|
||||
self.assertRaises(Exception, lambda: thermal_opening.openable_ratio,
|
||||
'thermal_opening openable_ratio is not raising an exception')
|
||||
self.assertIsNone(thermal_opening.front_side_solar_transmittance_at_normal_incidence,
|
||||
'thermal_opening front_side_solar_transmittance_at_normal_incidence was initialized')
|
||||
self.assertIsNone(thermal_opening.thickness, 'thermal_opening thickness_m was initialized')
|
||||
self.assertRaises(Exception, lambda: thermal_opening.u_value, 'thermal_opening u_value was initialized')
|
||||
self.assertIsNone(thermal_opening.overall_u_value, 'thermal_opening overall_u_value was initialized')
|
||||
self.assertIsNone(thermal_opening.hi, 'thermal_opening hi was initialized')
|
||||
self.assertIsNone(thermal_opening.he, 'thermal_opening he was initialized')
|
||||
|
||||
def test_surfaces_triangulation(self):
|
||||
"""
|
||||
Test city surfaces triangulation and polygon creation
|
||||
|
@ -206,10 +73,3 @@ class TestGeometryFactory(TestCase):
|
|||
counter += 1
|
||||
self.assertEqual(counter, 1, f'{counter} buildings had errors when triangulating surfaces')
|
||||
|
||||
def test_stuttgart_gml(self):
|
||||
file = '20190815_mitte_out_MC_FloursurfaceADD.gml'
|
||||
city = self._get_citygml(file)
|
||||
pickle_file = (self._example_path / '20190815_mitte_out_MC_FloursurfaceADD.pickle').resolve()
|
||||
city.save(pickle_file)
|
||||
for building in city.buildings:
|
||||
self.assertIsNotNone(building.volume, 'building volume is none')
|
||||
|
|
|
@ -29,7 +29,7 @@ class TestIdf(TestCase):
|
|||
|
||||
def _get_city(self):
|
||||
if self._city_gml is None:
|
||||
file_path = (self._example_path / '20buildings.gml').resolve()
|
||||
file_path = (self._example_path / 'pluto_building.gml').resolve()
|
||||
self._city_gml = GeometryFactory('citygml', file_path).city
|
||||
ConstructionFactory('us_new_york', self._city_gml)
|
||||
UsageFactory('us_new_york', self._city_gml)
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
"""
|
||||
TestImports test and validate the city export formats
|
||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
from unittest import TestCase
|
||||
from imports.geometry_factory import GeometryFactory
|
||||
|
||||
|
||||
class MyTestCase(TestCase):
|
||||
"""
|
||||
TestImports
|
||||
"""
|
||||
def setUp(self) -> None:
|
||||
"""
|
||||
Test setup
|
||||
:return: None
|
||||
"""
|
||||
self._city_obj = None
|
||||
self._example_path = (Path(__file__).parent / 'tests_data').resolve()
|
||||
self._output_path = (Path(__file__).parent / 'tests_outputs').resolve()
|
||||
|
||||
def _get_city(self):
|
||||
if self._city_obj is None:
|
||||
file_path = (self._example_path / 'kelowna.obj').resolve()
|
||||
self._city_obj = GeometryFactory('obj', file_path)._city_debug
|
||||
return self._city_obj
|
||||
|
||||
def test_import_obj(self):
|
||||
city = self._get_city()
|
||||
self.assertIsNotNone(city, 'city is none')
|
||||
for building in city.buildings:
|
||||
self.assertIsNotNone(building, 'building is none')
|
|
@ -1,51 +0,0 @@
|
|||
"""
|
||||
TestSchedulesFactory test and validate the city model structure schedules
|
||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
|
||||
Contributors Pilar Monsalvete pilar_monsalvete@yahoo.es
|
||||
"""
|
||||
from pathlib import Path
|
||||
from unittest import TestCase
|
||||
|
||||
from imports.geometry_factory import GeometryFactory
|
||||
from imports.usage_factory import UsageFactory
|
||||
from imports.schedules_factory import SchedulesFactory
|
||||
|
||||
|
||||
class TestSchedulesFactory(TestCase):
|
||||
"""
|
||||
TestSchedulesFactory TestCase
|
||||
"""
|
||||
|
||||
def setUp(self) -> None:
|
||||
"""
|
||||
Test setup
|
||||
:return: None
|
||||
"""
|
||||
self._city_gml_with_usage = None
|
||||
self._example_path = (Path(__file__).parent / 'tests_data').resolve()
|
||||
|
||||
@property
|
||||
def _handler(self):
|
||||
if self._city_gml_with_usage.name == 'New York':
|
||||
handler = '{0}_{1}'
|
||||
return handler.format(self._city_gml_with_usage.country_code,
|
||||
self._city_gml_with_usage.name.lower().replace(' ', '_'))
|
||||
return self._city_gml_with_usage.country_code
|
||||
|
||||
def _get_citygml_with_usage(self):
|
||||
if self._city_gml_with_usage is None:
|
||||
file_path = (self._example_path / '20buildings.gml').resolve()
|
||||
self._city_gml_with_usage = GeometryFactory('citygml', file_path).city
|
||||
self.assertIsNotNone(self._city_gml_with_usage, 'city is none')
|
||||
UsageFactory(self._handler, self._city_gml_with_usage)
|
||||
self.assertIsNotNone(self._city_gml_with_usage, 'city with usage is none')
|
||||
return self._city_gml_with_usage
|
||||
|
||||
def test_comnet_archetypes(self):
|
||||
city = self._get_citygml_with_usage()
|
||||
occupancy_handler = 'comnet'
|
||||
SchedulesFactory(occupancy_handler, city)
|
||||
for building in city.buildings:
|
||||
for usage_zone in building.usage_zones:
|
||||
self.assertTrue(usage_zone.schedules)
|
Loading…
Reference in New Issue
Block a user