recreate the repository

This commit is contained in:
Guille Gutierrez 2021-02-04 11:17:31 -05:00
parent 770889efac
commit 6985d2445c
17 changed files with 48332 additions and 1 deletions

View File

@ -1,3 +1,85 @@
# MonthlyEnergyBalance
Monthly energy balance project
This tool calculates the monthly energy balance for a given region.
The current version can only use NYC CityGml at LOD1, but we will increase the regions and the level of detail in future releases.
#### dependencies
You will need to install the following dependencies in your computer order to run the software; please take a look at the [install process](#installation) for your system-specific details
##### External software
+ INSEL 8 (https://insel4d.ca/en/download.html)
+ Simplified Radiosity Algorithm (mail to: guillermo.gutierrezmorote@concordia.ca)
After installing these tools you should include their paths in Path.
##### Python libraries
+ Shapely (1.7.0)
+ cycler (0.10.0)
+ geographiclib (1.50)
+ geopy (1.21.0)
+ kiwisolver (1.2.0)
+ matplotlib (3.2.1)
+ numpy (1.18.3)
+ numpy-stl (2.11.2)
+ pandas (1.0.3)
+ pip (20.0.2)
+ pyny3d (0.2)
+ pyparsing (2.4.7)
+ pyproj (2.6.0)
+ python-dateutil (2.8.1)
+ python-utils (2.4.0)
+ pytz (2019.3)
+ scipy (1.4.1)
+ setuptools (46.1.3)
+ six (1.14.0)
+ stl (0.0.3)
+ xmltodict (0.12.0)
## installation
##### Linux / Mac
Open a terminal and run the following commands.
```
$ mkdir MonthlyEnergyBalance
$ cd MonthlyEnergyBalance
$ git clone https://binarycat.org/git/PMAU/MonthlyEnergyBalance.git
$ python -m pip install requirements.txt
```
##### Windows
Open a terminal and run the following commands.
```
c:\> mkdir MonthlyEnergyBalance
c:\> cd MonthlyEnergyBalance
c:\> git clone https://binarycat.org/git/PMAU/MonthlyEnergyBalance.git
c:\> python.exe -m pip install requirements.txt
```
#### usage
##### Linux / Mac
Open a terminal and run the following command
```
$ python main.py
```
##### Windows
Open a terminal and run the following command.
```
c:\> python.exe main.py
```

9
helpers/assumptions.py Normal file
View File

@ -0,0 +1,9 @@
# These values are intended as configurable assumptions
# ToDo: these values need to be changed into configurable parameters
# convective fluxes
h_i = 10 # W/m2K
h_e = 25 # W/m2K
# windows' default values
frame_ratio = 0

19
helpers/geometry.py Normal file
View File

@ -0,0 +1,19 @@
import math
import numpy as np
class Geometry:
def __init__(self, delta=0.5):
self._delta = delta
def almost_equal(self, v1, v2):
delta = math.sqrt(pow((v1[0]-v2[0]), 2) + pow((v1[1]-v2[1]), 2) + pow((v1[2]-v2[2]), 2))
return delta <= self._delta
@staticmethod
def to_points_matrix(points, remove_last=False):
rows = points.size//3
points = points.reshape(rows, 3)
if remove_last:
points = np.delete(points, rows-1, 0)
return points

13
helpers/library_codes.py Normal file
View File

@ -0,0 +1,13 @@
class LibraryCodes(object):
construction_code = {
'Wall': '1',
'Ground': '2',
'Roof': '3',
'interior wall': '5',
'ground wall': '6',
'attic floor': '7',
'interior slab': '8'
}
def construction_types_to_code(self, construction_type):
return self.construction_code[construction_type]

46
helpers/monthly_values.py Normal file
View File

@ -0,0 +1,46 @@
"""
Monthly values
SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Pilar Monsalvete pilar_monsalvete@yahoo.es
"""
import pandas as pd
import numpy as np
import helpers.constants as cte
class MonthlyValues:
def __init__(self):
self._month_hour = None
def get_mean_values(self, values):
out = None
if values is not None:
if 'month' not in values.columns:
values = pd.concat([self.month_hour, pd.DataFrame(values)], axis=1)
out = values.groupby('month', as_index=False).mean()
del out['month']
return out
def get_total_month(self, values):
out = None
if values is not None:
if 'month' not in values.columns:
values = pd.concat([self.month_hour, pd.DataFrame(values)], axis=1)
out = pd.DataFrame(values).groupby('month', as_index=False).sum()
del out['month']
return out
@property
def month_hour(self):
"""
returns a DataFrame that has x values of the month number (January = 1, February = 2...),
being x the number of hours of the corresponding month
:return: DataFrame(int)
"""
array = []
for i in range(0, 12):
total_hours = cte.days_of_month[i] * 24
array = np.concatenate((array, np.full(total_hours, i + 1)))
self._month_hour = pd.DataFrame(array, columns=['month'])
return self._month_hour

60
insel/insel.py Normal file
View File

@ -0,0 +1,60 @@
import os
from pathlib import Path
class Insel:
def __init__(self, path, name, new_content="", mode=1, keep_files=False):
self._path = path
self._name = name
self._full_path = None
self._content = None
self._results = None
self._keep_files = keep_files
self.add_content(new_content, mode)
self.save()
def save(self):
with open(self.full_path, 'w') as insel_file:
insel_file.write(self.content)
return
@property
def full_path(self):
if self._full_path is None:
self._full_path = (Path(self._path) / 'tmp' / self._name).resolve()
return self._full_path
@property
def content(self):
if self._content is None:
if os.path.exists(self.full_path):
with open(self.full_path, 'r') as insel_file:
self._content = insel_file.read()
else:
self._content = ''
return self._content
# todo: create method
def add_block(self):
raise Exception('Not implemented')
def add_content(self, new_content, mode):
# mode = 1: keep old content
if mode == 1:
self._content = self.content + '\r\n' + new_content
# mode = 2: over-write
elif mode == 2:
self._content = new_content
else:
raise Exception('Add content mode not supported')
return
def run(self):
output = os.system('insel ' + str(self.full_path))
# todo: catch errors from INSEL
if not self._keep_files:
os.remove(self.full_path)
@property
def results(self):
raise Exception('Not implemented')

View File

@ -0,0 +1,160 @@
import helpers.library_codes
import numpy as np
from pathlib import Path
import pandas as pd
import csv
from factories.weather_feeders.helpers.weather import Weather as wt
class MonthlyEnergyBalance:
@staticmethod
def generate_meb_template(building, insel_outputs_path):
lc = helpers.library_codes.LibraryCodes()
file = ""
file += "s 1 do\r\n"
file += "p 1 1 12 1\r\n"
file += "\r\n"
file += "s 4 d18599 1.1 20.1 21.1\r\n"
surfaces = building.surfaces
for i in range(1, len(surfaces) + 1):
file += str(100 + i) + '.1 % Radiation surface ' + str(i) + '\r\n'
file += 'p 4' + '\r\n'
# BUILDING PARAMETERS
file += str(building.heated_volume) + ' % BP(1) Heated Volume (vBrutto)\r\n'
file += str(building.average_storey_height) + ' % BP(2) Average storey height / m\r\n'
file += str(building.storeys_above_ground) + ' % BP(3) Number of storeys above ground\r\n'
file += str(building.attic_heated) + ' % BP(4) Attic heating type (0=no room, 1=unheated, 2=heated)\r\n'
file += str(building.basement_heated) + ' % BP(5) Cellar heating type (0=no room, 1=unheated, ' \
'2=heated, 99=invalid)\r\n'
# todo: this method and the insel model have to be reviewed for more than one thermal zone
thermal_zone = building.thermal_zones[0]
file += str(thermal_zone.indirectly_heated_area_ratio) + ' % BP(6) Indirectly heated area ratio\r\n'
file += str(thermal_zone.effective_thermal_capacity) + ' % BP(7) Effective heat capacity\r\n'
file += str(thermal_zone.additional_thermal_bridge_u_value) + ' % BP(8) Additional U-value for heat bridge\r\n'
file += '0 % BP(9) Usage type (0=standard, 1=IWU)\r\n'
# ZONES AND SURFACES
# todo: is this actually number of thermal zones or of usage zones?
file += str(len(building.thermal_zones)) + ' % BP(10) Number $z$ of zones\r\n'
i = 0
for usage_zone in building.usage_zones:
percentage_usage = 1
file += str(float(building.foot_print.area) * percentage_usage) + ' % BP(11) #1 Area of zone ' + \
str(i + 1) + ' (sqm)' + '\r\n'
total_internal_gains = 0
for ig in usage_zone.internal_gains:
total_internal_gains += float(ig.average_internal_gain) * \
(float(ig.convective_fraction) + float(ig.radiative_fraction))
file += str(total_internal_gains) + ' % BP(12) #2 Internal gains of zone ' + str(i + 1) + '\r\n'
file += str(usage_zone.heating_setpoint) + ' % BP(13) #3 Heating setpoint temperature zone ' + \
str(i + 1) + ' (tSetHeat)' + '\r\n'
file += str(usage_zone.heating_setback) + ' % BP(14) #4 Heating setback temperature zone ' + \
str(i + 1) + ' (tSetbackHeat)' + '\r\n'
file += str(usage_zone.cooling_setpoint) + ' % BP(15) #5 Cooling setpoint temperature zone ' + \
str(i + 1) + ' (tSetCool)' + '\r\n'
file += str(usage_zone.hours_day) + ' % BP(16) #6 Usage hours per day zone ' + str(i + 1) + '\r\n'
file += str(usage_zone.days_year) + ' % BP(17) #7 Usage days per year zone ' + str(i + 1) + '\r\n'
if usage_zone.mechanical_air_change is None:
raise Exception('Ventilation air rate is not initialized')
file += str(usage_zone.mechanical_air_change) + ' % BP(18) #8 Minimum air change rate zone ' + \
str(i + 1) + ' (h^-1)' + '\r\n'
i += 1
file += str(len(surfaces)) + ' % Number of surfaces = BP(11+8z)\r\n'
file += '% 1. Surface type (1=wall, 2=ground 3=roof, 4=flat roof)' + '\r\n'
file += '% 2. Areas above ground' + '\r\n'
file += '% 3. Areas below ground' + '\r\n'
file += '% 4. U-value' + '\r\n'
file += '% 5. Window area' + '\r\n'
file += '% 6. Window frame fraction' + '\r\n'
file += '% 7. Window U-value' + '\r\n'
file += '% 8. Window g-value' + '\r\n'
file += '% 9. Short-wave reflectance' + '\r\n'
file += '% #1 #2 #3 #4 #5 #6 #7 #8 #9' + '\r\n'
# todo: this method has to be reviewed for more than one thermal opening per thermal boundary
for thermal_boundary in building.thermal_zones[0].bounded:
type_code = lc.construction_types_to_code(thermal_boundary.type)
string = type_code + ' ' + str(thermal_boundary.area_above_ground) + ' ' + \
str(thermal_boundary.area_below_ground) + ' ' + str(thermal_boundary.u_value) + ' ' + \
str(thermal_boundary.window_area) + ' '
if thermal_boundary.window_area <= 0.001:
string = string + '0 0 0 '
else:
string = string + str(thermal_boundary.thermal_openings[0].frame_ratio) + ' ' + \
str(thermal_boundary.thermal_openings[0].overall_u_value) + ' ' + \
str(thermal_boundary.thermal_openings[0].g_value) + ' '
if thermal_boundary.outside_solar_absorptance is not None:
string += str(thermal_boundary.shortwave_reflectance) + '\r\n'
else:
string += '0 \r\n'
file += string
file += '\r\n'
file += 's 20 polyg 1\r\n'
file += 'p 20 12 % Monthly ambient temperature\r\n'
external_temperature = building.external_temperature['month']
for i in range(0, len(external_temperature)):
file += str(i+1) + ' ' + str(external_temperature.at[i, 'inseldb']) + '\r\n'
file += '\r\n'
file += 's 21 polyg 1\r\n'
file += 'p 21 12 % Monthly sky temperature\r\n'
i = 1
sky_temperature = wt.sky_temperature(external_temperature[['inseldb']].to_numpy().T[0])
for temperature in sky_temperature:
file += str(i) + ' ' + str(temperature) + '\r\n'
i += 1
i = 0
for surface in surfaces:
file += '\r\n'
file += 's ' + str(101 + i) + ' polyg 1 % Monthly surface radiation (W/sqm)\r\n'
file += 'p ' + str(101 + i) + ' 12 % Azimuth ' + str(np.rad2deg(surface.azimuth)) + \
', inclination ' + str(np.rad2deg(surface.inclination)) + ' degrees\r\n'
if surface.type != 'Ground':
global_irradiance = surface.global_irradiance['month']
for j in range(0, len(global_irradiance)):
file += str(j + 1) + ' ' + str(global_irradiance.at[j, 'sra']) + '\r\n'
else:
for j in range(0, 12):
file += str(j + 1) + ' 0\r\n'
i += 1
file += '\r\n'
file += '% ONE YEAR\r\n'
file += 's 300 cum 4.1 4.2\r\n'
file += 's 303 atend 300.1 300.2\r\n'
file += '\r\n'
file += 's ' + str(310) + ' WRITE\r\n'
file += '4.1 4.2\r\n'
file += 'p ' + str(310) + '\r\n'
file += '1 % Mode\r\n'
file += '0 % Suppress FNQ inputs\r\n'
file += "'" + str(insel_outputs_path) + "' % File name\r\n"
file += "'*' % Fortran format\r\n"
return file
@staticmethod
def demand(insel_outputs_path):
heating = []
cooling = []
with open(Path(insel_outputs_path).resolve()) as csv_file:
csv_reader = csv.reader(csv_file)
for line in csv_reader:
demand = str(line).replace("['", '').replace("']", '').split()
heating.append(demand[0])
cooling.append(demand[1])
monthly_heating = pd.DataFrame(heating, columns=['INSEL'])
monthly_cooling = pd.DataFrame(cooling, columns=['INSEL'])
return monthly_heating, monthly_cooling

139
main.py Normal file
View File

@ -0,0 +1,139 @@
"""
Monthly energy balance main
SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Pilar Monsalvete pilar_monsalvete@yahoo.es
"""
import sys
from pathlib import Path
from argparse import ArgumentParser
import ast
import pandas as pd
from helpers import monthly_values as mv
from populate import Populate
from insel.insel import Insel
from insel.templates.monthly_energy_balance import MonthlyEnergyBalance as templates
from simplified_radiosity_algorithm.simplified_radiosity_algorithm import SimplifiedRadiosityAlgorithm
from factories.geometry_factory import GeometryFactory
from factories.weather_factory import WeatherFactory
from city_model_structure.city import City
parser = ArgumentParser(description='Monthly energy balance workflow v0.1.')
required = parser.add_argument_group('required arguments')
parser.add_argument('--geometry_type', '-g', help='Geometry type {citygml}', default='citygml')
required.add_argument('--input_geometry_file', '-i', help='Input geometry file', required=True)
parser.add_argument('--use_pickle_file', '-p', help='Use pickle file instead of importing geometry file', default=False,
required=True)
parser.add_argument('--populated_step_in_pickle', '-ps', help='Physics and usage parameters already in pickle file',
default=False, required=True)
parser.add_argument('--weather_step_in_pickle', '-ws', help='Weather parameters already in pickle file',
default=False, required=True)
parser.add_argument('--use_cached_sra_file', '-u', help='Use sra files from cache, instead of freshly calculated sra '
'files', default=False)
required.add_argument('--project_folder', '-f', help='Project folder', required=True)
required.add_argument('--cli_weather_file', '-c', help='weather cli file', required=True)
required.add_argument('--city_name', '-n', help='city name for dat file', required=True)
try:
args = parser.parse_args()
except SystemExit:
sys.exit()
keep_files = True
# Step 1: Initialize the city model
pickle_file = ''
if ast.literal_eval(args.use_pickle_file):
pickle_file = Path(args.input_geometry_file).resolve()
city = City.load(pickle_file)
else:
city = GeometryFactory(args.geometry_type, Path(args.input_geometry_file).resolve()).city
# Step 2: Populate city adding thermal- and usage-related parameters
populated_step_in_pickle = ast.literal_eval(args.populated_step_in_pickle)
if populated_step_in_pickle:
populated_city = city
else:
populated_city = Populate(city).populated_city
pickle_file = Path(str(pickle_file).replace('.pickle', '_populated.pickle'))
populated_city.save(pickle_file)
if populated_city.buildings is None:
print('No building to be calculated')
sys.exit()
# Step 3: Populate city adding climate-related parameters
weather_step_in_pickle = ast.literal_eval(args.weather_step_in_pickle)
if not weather_step_in_pickle:
city_name = args.city_name
WeatherFactory('dat', populated_city, city_name)
for building in populated_city.buildings:
if 'hour' not in building.external_temperature:
print('No external temperature found')
sys.exit()
if 'month' not in building.external_temperature:
building.external_temperature['month'] = mv.MonthlyValues().\
get_mean_values(building.external_temperature['hour'][['inseldb']])
max_buildings_handled_by_sra = 500
sra_file_name = 'SRA'
sra = SimplifiedRadiosityAlgorithm(Path(args.project_folder).resolve(), sra_file_name,
Path(args.cli_weather_file).resolve(),
city.city_objects, lower_corner=city.lower_corner)
if ast.literal_eval(args.use_cached_sra_file):
sra.results()
sra.set_irradiance_surfaces(populated_city)
else:
total_number_of_buildings = len(city.buildings)
if total_number_of_buildings > max_buildings_handled_by_sra:
radius = 100
for building in city.buildings:
new_city = city.region(building.location, radius)
sra_file_name = 'SRA'
sra_new = SimplifiedRadiosityAlgorithm(Path(args.project_folder).resolve(), sra_file_name,
Path(args.cli_weather_file).resolve(),
new_city.city_objects, lower_corner=new_city.lower_corner)
sra_new.call_sra(keep_files=True)
sra_new.set_irradiance_surfaces(city, building_name=building.name)
else:
sra.call_sra(keep_files=keep_files)
sra.set_irradiance_surfaces(populated_city)
pickle_file = Path(str(pickle_file).replace('.pickle', '_weather.pickle'))
populated_city.save(pickle_file)
# Step 4: Demand calculation (one model per building)
print_results = None
file = 'city name: ' + city.name + '\r\n'
i = 0
for building in populated_city.buildings:
if 3000 < i and building.name != 'BLD122177':
print(building.name)
full_path_out = Path(args.project_folder + '/outputs/' + building.name + '_insel.out').resolve()
full_path_out.parent.mkdir(parents=True, exist_ok=True)
insel_file_name = building.name + '.insel'
try:
content = templates.generate_meb_template(building, full_path_out)
insel = Insel(Path(args.project_folder).resolve(), insel_file_name, content, mode=2, keep_files=keep_files).run()
building.heating['month'], building.cooling['month'] = templates.demand(full_path_out)
new_building = building.heating['month'].rename(columns={'INSEL': building.name})
if print_results is None:
print_results = new_building
else:
print_results = pd.concat([print_results, new_building], axis='columns')
file += '\r\n'
file += 'name: ' + building.name + '\r\n'
file += 'year of construction: ' + building.year_of_construction + '\r\n'
file += 'function: ' + building.function + '\r\n'
except ValueError:
print(sys.exc_info()[1])
print('Building ' + building.name + ' could not be processed')
continue
i += 1
full_path_results = Path(args.project_folder + '/outputs/heating_demand.csv').resolve()
print_results.to_csv(full_path_results)
full_path_metadata = Path(args.project_folder + '/outputs/metadata.csv').resolve()
with open(full_path_metadata, 'w') as metadata_file:
metadata_file.write(file)

58
populate.py Normal file
View File

@ -0,0 +1,58 @@
"""
Populate city
SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Pilar Monsalvete pilar_monsalvete@yahoo.es
"""
from factories.physics_factory import PhysicsFactory
from factories.usage_factory import UsageFactory
from city_model_structure.city import City
class Populate:
def __init__(self, city):
self._city = city
self._populated_city = None
self._errors = []
@property
def handler(self):
if self._city.name == 'New York':
handler = '{0}_{1}'
return handler.format(self._city.country_code, self._city.name.lower().replace(' ', '_'))
return self._city.country_code
@property
def errors(self):
return self._errors
@property
def populated_city(self):
if self._populated_city is None:
self._errors = []
# Step 2.1: Thermal parameters
tmp_city = City(self._city.lower_corner, self._city.upper_corner, self._city.srs_name)
PhysicsFactory(self.handler, self._city)
print('original:', len(self._city.buildings))
for building in self._city.buildings:
# infiltration_rate_system_off is a mandatory parameter.
# If it is not returned, extract the building from the calculation list
if building.thermal_zones[0].infiltration_rate_system_off is not None:
tmp_city.add_city_object(building)
if tmp_city.buildings is None:
self._populated_city = tmp_city
return self._populated_city
# Step 2.2: Usage parameters
print('physics:', len(tmp_city.buildings))
UsageFactory(self.handler, tmp_city)
self._populated_city = City(self._city.lower_corner, self._city.upper_corner, self._city.srs_name)
for building in tmp_city.buildings:
# heating_setpoint is a mandatory parameter.
# If it is not returned, extract the building from the calculation list
print(len(building.usage_zones))
if len(building.usage_zones) > 0:
self._populated_city.add_city_object(building)
if self._populated_city.buildings is None:
self._errors.append('no archetype found per usage')
return self._populated_city

View File

@ -0,0 +1,209 @@
"""
Simplified Radiosity Algorithm
SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Pilar Monsalvete pilar_monsalvete@yahoo.es
"""
import os
import shutil
from pathlib import Path
import pandas as pd
from helpers import monthly_values as mv
import subprocess
import xmltodict
from collections import OrderedDict
from subprocess import SubprocessError, TimeoutExpired, CalledProcessError
class SimplifiedRadiosityAlgorithm:
# todo: define executable as configurable parameter
# _executable = 'citysim_sra' # for linux
_executable = 'shortwave_integer' # for windows
def __init__(self, sra_working_path, sra_file_name, full_path_cli, city_objects=None,
begin_month=1, begin_day=1, end_month=12, end_day=31, lower_corner=None):
self._full_path_cli = full_path_cli
self._sra_file_name = sra_file_name
self._begin_month = begin_month
self._begin_day = begin_day
self._end_month = end_month
self._end_day = end_day
if lower_corner is None:
lower_corner = [0, 0, 0]
self._lower_corner = lower_corner
self._sra_working_path = sra_working_path
tmp_path = (sra_working_path / 'tmp').resolve()
Path(tmp_path).mkdir(parents=True, exist_ok=True)
# Ensure tmp file is empty
for child in tmp_path.glob('*'):
if child.is_file():
child.unlink()
cache_path = (sra_working_path / 'cache').resolve()
Path(cache_path).mkdir(parents=True, exist_ok=True)
self._full_path_in_sra = (tmp_path / (sra_file_name + '.xml')).resolve()
self._sra_out_file_name = sra_file_name + '_SW.out'
self._full_path_out_sra = (cache_path / self._sra_out_file_name).resolve()
print(self._full_path_in_sra, self._sra_out_file_name, self._full_path_out_sra)
self._out_values = None
self._radiation = []
self._content = OrderedDict()
climate = OrderedDict()
climate['@location'] = self._full_path_cli
climate['@city'] = self.city
simulation = OrderedDict()
simulation['@beginMonth'] = begin_month
simulation['@beginDay'] = begin_day
simulation['@endMonth'] = end_month
simulation['@endDay'] = end_day
city_sim = OrderedDict()
city_sim['@name'] = sra_file_name + '.xml'
city_sim['Simulation'] = simulation
city_sim['Climate'] = climate
self._content['CitySim'] = city_sim
if city_objects is not None:
self.add_city_objects(city_objects)
self.save()
def call_sra(self, keep_files=False):
try:
completed = subprocess.run([self._executable, str(self._full_path_in_sra)])
except (SubprocessError, TimeoutExpired, CalledProcessError) as error:
raise Exception(error)
file = (Path(self._sra_working_path) / 'tmp' / self._sra_out_file_name).resolve()
new_path = (Path(self._sra_working_path) / 'cache' / self._sra_out_file_name).resolve()
try:
shutil.move(str(file), str(new_path))
except Exception:
raise Exception('No SRA output file found')
self._out_values = self.results()
if not keep_files:
os.remove(self._full_path_in_sra)
return completed
def results(self):
if self._out_values is None:
try:
self._out_values = pd.read_csv(self._full_path_out_sra, sep='\s+', header=0)
except Exception:
raise Exception('No SRA output file found')
return self._out_values
@property
def radiation(self) -> []:
if len(self._radiation) == 0:
id_building = ''
header_building = []
for column in self._out_values.columns.values:
if id_building != column.split(':')[1]:
id_building = column.split(':')[1]
if len(header_building) > 0:
self._radiation.append(pd.concat([mv.MonthlyValues().month_hour, self._out_values[header_building]],
axis=1))
header_building = [column]
else:
header_building.append(column)
self._radiation.append(pd.concat([mv.MonthlyValues().month_hour, self._out_values[header_building]], axis=1))
return self._radiation
def set_irradiance_surfaces(self, city, mode=0, building_name=None):
"""
saves in building surfaces the correspondent irradiance at different time-scales depending on the mode
if building is None, it saves all buildings' surfaces in file, if building is specified, it saves only that
specific building values
mode = 0, set only monthly values
mode = 1, set only hourly values
mode = 2, set both
:parameter city: city
:parameter mode: str (time-scale definition)
:parameter building_name: str
:return: none
"""
for radiation in self.radiation:
city_object_name = radiation.columns.values.tolist()[1].split(':')[1]
if building_name is not None:
if city_object_name != building_name:
continue
city_object = city.city_object(city_object_name)
for column in radiation.columns.values:
if column == 'month':
continue
header_name = column
surface_name = header_name.split(':')[2]
surface = city_object.surface(surface_name)
new_value = pd.DataFrame(radiation[[header_name]].to_numpy(), columns=['sra'])
if mode == 0 or mode == 2:
month_new_value = mv.MonthlyValues().get_mean_values(new_value)
if 'month' not in surface.global_irradiance:
surface.global_irradiance['month'] = month_new_value
else:
pd.concat([surface.global_irradiance['month'], month_new_value], axis=1)
if mode == 1 or mode == 2:
if 'hour' not in surface.global_irradiance:
surface.global_irradiance['hour'] = new_value
else:
pd.concat([surface.global_irradiance['hour'], new_value], axis=1)
@property
def content(self):
return xmltodict.unparse(self._content, pretty=True, short_empty_elements=True)
def save(self):
with open(self._full_path_in_sra, "w") as sra_file:
sra_file.write(self.content)
return
def _correct_points(self, points):
# correct the x, y, z values into the reference frame set by lower_corner parameter
# [0, 0, 0] by default means no correction.
x = points[0] - self._lower_corner[0]
y = points[1] - self._lower_corner[1]
z = points[2] - self._lower_corner[2]
correct_points = [x, y, z]
return correct_points
def add_city_objects(self, city_objects):
buildings = []
for i in range(len(city_objects)):
city_object = city_objects[i]
building = OrderedDict()
building['@Name'] = city_object.name
building['@id'] = i
building['@key'] = city_object.name
building['@Simulate'] = 'True'
walls, roofs, floors = [], [], []
for s in city_object.surfaces:
surface = OrderedDict()
surface['@id'] = s.name
surface['@ShortWaveReflectance'] = s.swr
for j in range(len(s.points - 1)):
points = self._correct_points(s.points[j])
vertex = OrderedDict()
vertex['@x'] = points[0]
vertex['@y'] = points[1]
vertex['@z'] = points[2]
surface['V' + str(j)] = vertex
if s.type == 'Wall':
walls.append(surface)
elif s.type == 'Roof':
roofs.append(surface)
else:
floors.append(surface)
building['Wall'] = walls
building['Roof'] = roofs
building['Floor'] = floors
buildings.append(building)
district = OrderedDict()
district['FarFieldObstructions'] = None
district['Building'] = buildings
self._content['CitySim']['District'] = district
return
@property
def city(self):
with open(self._full_path_cli, 'r') as file:
return file.readline().replace('\n', '')

189
tests/test_meb_workflow.py Normal file
View File

@ -0,0 +1,189 @@
"""
TestMebWorkflow tests and validates the complete Monthly Energy Balance workflow
SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Pilar Monsalvete pilar_monsalvete@yahoo.es
"""
from pathlib import Path
from unittest import TestCase
import numpy as np
import subprocess
from subprocess import SubprocessError, TimeoutExpired, CalledProcessError
from insel.insel import Insel
from insel.templates.monthly_energy_balance import MonthlyEnergyBalance as templates
from factories.geometry_factory import GeometryFactory
from populate import Populate
from factories.weather_factory import WeatherFactory
from helpers import monthly_values as mv
from simplified_radiosity_algorithm.simplified_radiosity_algorithm import SimplifiedRadiosityAlgorithm as sralgorithm
from city_model_structure.city import City
class TestMebWorkflow(TestCase):
"""
TestMebWorkflow TestCase 1
"""
def setUp(self) -> None:
"""
Test setup
:return: None
"""
self._example_path = (Path(__file__).parent.parent / 'tests_data').resolve()
self._geometry_type = 'citygml'
self._use_cached_sra_file = False
self._input_geometry_file = (self._example_path / 'gis' / '2050 bp_2buildings.gml').resolve()
self._project_folder = Path(__file__).parent.parent
self._cli_weather_file = (self._example_path / 'weather' / 'inseldb_new_york_city.cli').resolve()
self._city_gml = None
self._city = None
self._populated_city = None
self._monthly_temperatures = None
self._city_with_weather = None
self._city_with_cli = None
self._city_with_dat = None
self._pickle_file = (self._example_path / 'gis' / 'kelowna_test_case.pickle').resolve()
self._pickle_file_populated = Path(str(self._pickle_file).replace('.pickle', '_populated.pickle'))
self._pickle_file_populated_weather = Path(str(self._pickle_file_populated).replace('.pickle', '_weather.pickle'))
self._city_name = 'Summerland'
def _get_citygml(self, use_pickle=False):
if self._city_gml is None:
if use_pickle:
self._city_gml = City.load(self._pickle_file)
else:
file_path = self._input_geometry_file
self._city_gml = GeometryFactory('citygml', file_path).city
self.assertIsNotNone(self._city_gml, 'city is none')
return self._city_gml
def _get_citygml_populated(self, use_pickle):
if self._populated_city is None:
self._city = self._get_citygml(use_pickle=use_pickle)
self._populated_city = Populate(self._city).populated_city
return self._populated_city
def _get_citygml_with_weather(self, use_pickle):
if self._city_with_weather is None:
self._city_with_weather = self._get_citygml(use_pickle=use_pickle)
weather_path = (self._example_path / 'weather').resolve()
WeatherFactory('dat', self._city_with_weather, city_name=self._city_name, base_path=weather_path)
for building in self._city_with_weather.buildings:
building.external_temperature['month'] = mv.MonthlyValues(). \
get_mean_values(building.external_temperature['hour'][['inseldb']])
sra_file_name = 'SRA'
sra = sralgorithm(Path(self._project_folder).resolve(), sra_file_name, Path(self._cli_weather_file).resolve(),
self._city_with_weather.city_objects, lower_corner=self._city_with_weather.lower_corner)
if self._use_cached_sra_file:
sra.results()
else:
sra.call_sra(keep_files=True)
sra.set_irradiance_surfaces(self._city_with_weather)
return self._city_with_weather
def _get_cli_single_building(self, building_name, radius, use_pickle):
self._city_with_cli = self._get_citygml(use_pickle=use_pickle)
building = self._city_with_cli.city_object(building_name)
new_city = self._city_with_cli.region(building.location, radius)
sra_file_name = 'SRA'
print('location', building.location)
print('lower corner', new_city.lower_corner)
full_path_cli = (self._example_path / 'weather' / 'inseldb_Summerland.cli').resolve()
sra = sralgorithm(Path(self._project_folder).resolve(), sra_file_name, full_path_cli, new_city.city_objects,
lower_corner=new_city.lower_corner)
sra.call_sra(keep_files=True)
sra.set_irradiance_surfaces(self._city_with_cli, building_name=building_name)
return self._city_with_cli
def _get_city_with_dat(self, use_pickle):
if self._city_with_dat is None:
self._city_with_dat = self._get_citygml(use_pickle=use_pickle)
weather_path = (self._example_path / 'weather').resolve()
WeatherFactory('dat', self._city_with_dat, city_name=self._city_name, base_path=weather_path)
for building in self._city_with_dat.buildings:
building.external_temperature['month'] = mv.MonthlyValues(). \
get_mean_values(building.external_temperature['hour'][['inseldb']])
return self._city_with_dat
def test_populate_city(self):
"""
Test populate class
:return: none
"""
# populated_city = self._get_citygml_populated(True)
# populated_city.save(pickle_file_populated)
populated_city = City.load(self._pickle_file_populated)
self.assertIsNotNone(populated_city.city_objects, 'city_objects is none')
for building in populated_city.buildings:
self.assertIsNotNone(building.usage_zones, 'city_object return none')
self.assertIsNotNone(building.thermal_zones, 'city_object return none')
def test_weather_assignment(self):
"""
Test the weather assignment
:return: none
"""
weather_city = self._get_citygml_with_weather(False)
for building in weather_city.buildings:
self.assertFalse(building.external_temperature['month'].empty, 'monthly external temperature return none')
for surface in building.surfaces:
if surface.type != 'Ground':
self.assertIsNotNone(surface.global_irradiance['month'], 'monthly irradiance return none')
def test_insel_call(self):
"""
Test the insel template generation and engine call
:return: none
"""
self._get_citygml_populated(False)
city = self._get_citygml_with_weather(False)
expected_values = [[13619.57, 3.65], [14886.33, 1.67]]
i = 0
for building in city.buildings:
full_path_out = Path(self._project_folder / 'outputs' / (building.name + '_insel.out')).resolve()
full_path_out.parent.mkdir(parents=True, exist_ok=True)
insel_file_name = building.name + '.insel'
content = templates.generate_meb_template(building, full_path_out)
self.assertIsNotNone(content, 'content return empty')
Insel(Path(self._project_folder).resolve(), insel_file_name, content, mode=2,
keep_files=True).run()
building.heating['month'], building.cooling['month'] = templates.demand(full_path_out)
values = building.heating['month'][['INSEL']].to_numpy()
self.assertEqual(expected_values[i][0], np.around(float(values[11]), decimals=2), 'wrong value monthly heating')
values = building.cooling['month'][['INSEL']].to_numpy()
self.assertEqual(expected_values[i][1], np.around(float(values[11]), decimals=2), 'wrong value monthly cooling')
i += 1
def test_city_with_weather_building_by_building(self):
radius = 100
building_names = ['BLD100086', 'BLD131702', 'BLD132148', 'BLD126221', 'BLD131081', 'BLD135303', 'BLD130088',
'BLD128703', 'BLD121900', 'BLD141378', 'BLD135375', 'BLD126801', 'BLD120774', 'BLD118577',
'BLD129395', 'BLD126848', 'BLD115972', 'BLD138959', 'BLD122103', 'BLD114335', 'BLD124272',
'BLD107027', 'BLD105415', 'BLD129867', 'BLD133164', 'BLD119241', 'BLD106658', 'BLD114097',
'BLD130182', 'BLD121456', 'BLD123516', 'BLD126061', 'BLD128845', 'BLD138802', 'BLD129673']
building_names = ['BLD100086']
city = self._get_city_with_dat(True)
for building in city.buildings:
self.assertTrue(building.external_temperature, 'external temperature return none')
for building_name in building_names:
print(building_name)
weather_city = self._get_cli_single_building(building_name, radius, True)
# for building in weather_city.city_objects:
# if building.name == building_name:
# for surface in building.surfaces:
# if surface.type != 'Ground':
# self.assertTrue(surface.global_irradiance, 'global irradiance return none in calculated building')
# else:
# for surface in building.surfaces:
# self.assertFalse(surface.global_irradiance, 'global irradiance return not none in not calculated building')
def test_sra(self):
_executable = 'shortwave_integer'
_full_path_in = (Path(__file__).parent.parent / 'tmp\SRA.xml').resolve()
try:
completed = subprocess.run([_executable, str(_full_path_in)])
except (SubprocessError, TimeoutExpired, CalledProcessError) as error:
raise Exception(error)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,626 @@
<?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">
<stringAttribute name="PLUTO_year_built">
<value>1965</value>
</stringAttribute>
<stringAttribute name="PLUTO_building_class">
<value>I1</value>
</stringAttribute>
<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>I1</function>
</Building>
</cityObjectMember>
<cityObjectMember>
<Building id="GBP__15">
<stringAttribute name="PLUTO_year_built">
<value>2045</value>
</stringAttribute>
<stringAttribute name="PLUTO_building_class">
<value>I1</value>
</stringAttribute>
<lod1Solid>
<Solid srsName="EPSG:32118" srsDimension="3">
<exterior>
<CompositeSurface>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300906.4538786103 56181.20939518605 7.9999997168779355 300897.539327829 56167.5155475298 7.9999997168779355 300906.4538786103 56181.20939518605 0.0 300906.4538786103 56181.20939518605 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300897.539327829 56167.5155475298 7.9999997168779355 300897.539327829 56167.5155475298 0.0 300906.4538786103 56181.20939518605 0.0 300897.539327829 56167.5155475298 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300883.334249704 56196.25919987355 7.9999997168779355 300861.299093454 56191.1053912798 7.9999997168779355 300897.539327829 56167.5155475298 7.9999997168779355 300883.334249704 56196.25919987355 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300906.4538786103 56181.20939518605 7.9999997168779355 300883.334249704 56196.25919987355 7.9999997168779355 300897.539327829 56167.5155475298 7.9999997168779355 300906.4538786103 56181.20939518605 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300896.0696012665 56215.82365299855 7.9999997168779355 300882.9489957978 56224.3641803423 7.9999997168779355 300883.334249704 56196.25919987355 7.9999997168779355 300896.0696012665 56215.82365299855 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300882.9489957978 56224.3641803423 7.9999997168779355 300861.299093454 56191.1053912798 7.9999997168779355 300883.334249704 56196.25919987355 7.9999997168779355 300882.9489957978 56224.3641803423 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300883.334249704 56196.25919987355 7.9999997168779355 300883.334249704 56196.25919987355 0.0 300896.0696012665 56215.82365299855 7.9999997168779355 300883.334249704 56196.25919987355 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300896.0696012665 56215.82365299855 7.9999997168779355 300883.334249704 56196.25919987355 0.0 300896.0696012665 56215.82365299855 0.0 300896.0696012665 56215.82365299855 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300883.334249704 56196.25919987355 7.9999997168779355 300906.4538786103 56181.20939518605 7.9999997168779355 300883.334249704 56196.25919987355 0.0 300883.334249704 56196.25919987355 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300906.4538786103 56181.20939518605 7.9999997168779355 300906.4538786103 56181.20939518605 0.0 300883.334249704 56196.25919987355 0.0 300906.4538786103 56181.20939518605 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300896.0696012665 56215.82365299855 0.0 300883.334249704 56196.25919987355 0.0 300882.9489957978 56224.3641803423 0.0 300896.0696012665 56215.82365299855 0.0</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300882.9489957978 56224.3641803423 0.0 300883.334249704 56196.25919987355 0.0 300861.299093454 56191.1053912798 0.0 300882.9489957978 56224.3641803423 0.0</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300883.334249704 56196.25919987355 0.0 300897.539327829 56167.5155475298 0.0 300861.299093454 56191.1053912798 0.0 300883.334249704 56196.25919987355 0.0</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300906.4538786103 56181.20939518605 0.0 300897.539327829 56167.5155475298 0.0 300883.334249704 56196.25919987355 0.0 300906.4538786103 56181.20939518605 0.0</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300882.9489957978 56224.3641803423 7.9999997168779355 300896.0696012665 56215.82365299855 7.9999997168779355 300882.9489957978 56224.3641803423 0.0 300882.9489957978 56224.3641803423 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300896.0696012665 56215.82365299855 7.9999997168779355 300896.0696012665 56215.82365299855 0.0 300882.9489957978 56224.3641803423 0.0 300896.0696012665 56215.82365299855 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300882.9489957978 56224.3641803423 7.9999997168779355 300882.9489957978 56224.3641803423 0.0 300861.299093454 56191.1053912798 7.9999997168779355 300882.9489957978 56224.3641803423 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300861.299093454 56191.1053912798 7.9999997168779355 300882.9489957978 56224.3641803423 0.0 300861.299093454 56191.1053912798 0.0 300861.299093454 56191.1053912798 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300897.539327829 56167.5155475298 7.9999997168779355 300861.299093454 56191.1053912798 7.9999997168779355 300897.539327829 56167.5155475298 0.0 300897.539327829 56167.5155475298 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
<surfaceMember>
<Polygon>
<exterior>
<LinearRing>
<posList>300861.299093454 56191.1053912798 7.9999997168779355 300861.299093454 56191.1053912798 0.0 300897.539327829 56167.5155475298 0.0 300861.299093454 56191.1053912798 7.9999997168779355</posList>
</LinearRing>
</exterior>
</Polygon>
</surfaceMember>
</CompositeSurface>
</exterior>
</Solid>
</lod1Solid>
<yearOfConstruction>2045</yearOfConstruction>
<function>I1</function>
</Building>
</cityObjectMember>
</CityModel>

View File

@ -0,0 +1,925 @@
<?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="BLD100086">
<gen:doubleAttribute name="gross_floor_area">
<gen:value>148</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>2019</bldg:yearOfConstruction>
<bldg:measuredHeight>4.4</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_3e35c142-df2d-40b7-aae4-557db18ec7c6"/>
<gml:surfaceMember xlink:href="#UUID_a49ef266-ec5e-443b-9a64-c9c93747d01a"/>
<gml:surfaceMember xlink:href="#UUID_ef7f2ab9-ad15-4d43-8234-2794686aa04f"/>
<gml:surfaceMember xlink:href="#UUID_daee926d-4126-4cc4-90c3-163884289002"/>
<gml:surfaceMember xlink:href="#UUID_c39b3ab3-f724-4abb-b5a0-4cf7a111a081"/>
<gml:surfaceMember xlink:href="#UUID_9e3db7c2-b03e-424a-932e-ee236b69eca1"/>
<gml:surfaceMember xlink:href="#UUID_825bb74a-aa70-4b35-9562-ba89aa8cd378"/>
<gml:surfaceMember xlink:href="#UUID_f155bbcf-0f71-4e0e-9cf1-2c4cc7b52da6"/>
<gml:surfaceMember xlink:href="#UUID_a2c4f627-5b56-43ea-a53d-84e828250d49"/>
<gml:surfaceMember xlink:href="#UUID_5268aa45-e711-4e47-8ae2-9498b02758ef"/>
<gml:surfaceMember xlink:href="#UUID_829f53c2-1834-4f09-b180-db4cd81e773a"/>
<gml:surfaceMember xlink:href="#UUID_bdd4f42b-6aaf-4a30-b92f-351deedf79ad"/>
<gml:surfaceMember xlink:href="#UUID_5663501c-ae1a-4c42-a779-cc5c77cbe9ae"/>
<gml:surfaceMember xlink:href="#UUID_c489400f-a849-4be4-bbfd-729cf1020aa8"/>
<gml:surfaceMember xlink:href="#UUID_909d9316-ea8c-4458-9523-3632a0a67dca"/>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod2Solid>
<bldg:boundedBy>
<bldg:RoofSurface gml:id="UUID_6919c082-ca72-4008-8dbc-bc947505cbd7">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_3e35c142-df2d-40b7-aae4-557db18ec7c6">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327915.32435999997 5527616.99446 3.8290600000036648 327918.65699999966 5527620.1219999995 2.8999999999941792 327912.1970099993 5527620.328 2.8999999999941792 327915.32435999997 5527616.99446 3.8290600000036648</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_3ae51274-1b29-4784-ad12-47e590b1aa3e">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_a49ef266-ec5e-443b-9a64-c9c93747d01a">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327920.9297700003 5527614.973139999 3.7896900000050664 327924.1219900008 5527617.968 2.8999999999941792 327920.45799 5527618.085000001 2.8999999999941792 327920.9297700003 5527614.973139999 3.7896900000050664</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_bf100ceb-a838-400f-8f25-60656fcf6b5b">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_ef7f2ab9-ad15-4d43-8234-2794686aa04f">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327918.65699999966 5527620.1219999995 0 327918.65699999966 5527620.1219999995 2.8999999999941792 327918.5720000006 5527617.433 2.8999999999941792 327918.5720000006 5527617.433 0 327918.65699999966 5527620.1219999995 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_01cc0d33-f732-4541-9041-b50628b20eea">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_daee926d-4126-4cc4-90c3-163884289002">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327912.1970099993 5527620.328 0 327912.1970099993 5527620.328 2.8999999999941792 327918.65699999966 5527620.1219999995 2.8999999999941792 327918.65699999966 5527620.1219999995 0 327912.1970099993 5527620.328 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_86c2f9ea-533e-4de5-82a4-899520cca64b">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_c39b3ab3-f724-4abb-b5a0-4cf7a111a081">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327911.7700100001 5527606.959000001 0 327911.7700100001 5527606.959000001 2.8999999999941792 327912.1970099993 5527620.328 2.8999999999941792 327912.1970099993 5527620.328 0 327911.7700100001 5527606.959000001 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_6d4a4e78-fcd5-44c3-99f7-298722288831">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_9e3db7c2-b03e-424a-932e-ee236b69eca1">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327923.7589999996 5527606.57701 0 327923.7589999996 5527606.57701 2.8999999999941792 327911.7700100001 5527606.959000001 2.8999999999941792 327911.7700100001 5527606.959000001 0 327923.7589999996 5527606.57701 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_3526e729-c17c-46c2-b632-1347baf4b799">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_825bb74a-aa70-4b35-9562-ba89aa8cd378">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327924.1219900008 5527617.968 0 327924.1219900008 5527617.968 2.8999999999941792 327923.7589999996 5527606.57701 2.8999999999941792 327923.7589999996 5527606.57701 0 327924.1219900008 5527617.968 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_29cd539d-855f-4067-8dbd-30a7fbb9d8d5">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_f155bbcf-0f71-4e0e-9cf1-2c4cc7b52da6">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327920.45799 5527618.085000001 0 327920.45799 5527618.085000001 2.8999999999941792 327924.1219900008 5527617.968 2.8999999999941792 327924.1219900008 5527617.968 0 327920.45799 5527618.085000001 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_4cdae8c2-e795-4553-b548-64aa5d957203">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_a2c4f627-5b56-43ea-a53d-84e828250d49">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327918.5720000006 5527617.433 0 327918.5720000006 5527617.433 2.8999999999941792 327920.45799 5527618.085000001 2.8999999999941792 327920.45799 5527618.085000001 0 327918.5720000006 5527617.433 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_fa9ef0bc-bf10-477b-9c0e-27dc04667679">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_5268aa45-e711-4e47-8ae2-9498b02758ef">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327918.5720000006 5527617.433 0 327920.45799 5527618.085000001 0 327924.1219900008 5527617.968 0 327923.7589999996 5527606.57701 0 327911.7700100001 5527606.959000001 0 327912.1970099993 5527620.328 0 327918.65699999966 5527620.1219999995 0 327918.5720000006 5527617.433 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_c60b7d6d-65fe-4a40-bb4c-861a618d9b8f">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_829f53c2-1834-4f09-b180-db4cd81e773a">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327918.65699999966 5527620.1219999995 2.8999999999941792 327915.32435999997 5527616.99446 3.8290600000036648 327915.19247999974 5527612.844070001 3.8292599999986123 327918.5720000006 5527617.433 2.8999999999941792 327918.65699999966 5527620.1219999995 2.8999999999941792</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_952b965f-e0d1-4bfd-9641-1fb1a3ed0163">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_bdd4f42b-6aaf-4a30-b92f-351deedf79ad">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327911.7700100001 5527606.959000001 2.8999999999941792 327916.7891399991 5527611.6678 4.298760000005132 327915.19247999974 5527612.844070001 3.8292599999986123 327915.32435999997 5527616.99446 3.8290600000036648 327912.1970099993 5527620.328 2.8999999999941792 327911.7700100001 5527606.959000001 2.8999999999941792</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_733946c8-f30b-49ba-a4ee-21fdda0e2864">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_5663501c-ae1a-4c42-a779-cc5c77cbe9ae">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327923.7589999996 5527606.57701 2.8999999999941792 327918.70940000005 5527611.959000001 4.399999999994179 327916.7891399991 5527611.6678 4.298760000005132 327911.7700100001 5527606.959000001 2.8999999999941792 327923.7589999996 5527606.57701 2.8999999999941792</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_9d86a537-1cb9-4aec-87cd-5bc7cb36152d">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_c489400f-a849-4be4-bbfd-729cf1020aa8">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327924.1219900008 5527617.968 2.8999999999941792 327920.9297700003 5527614.973139999 3.7896900000050664 327918.70940000005 5527611.959000001 4.399999999994179 327923.7589999996 5527606.57701 2.8999999999941792 327924.1219900008 5527617.968 2.8999999999941792</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_6d2fb90c-5d12-4bc3-af9f-214f8a280021">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_909d9316-ea8c-4458-9523-3632a0a67dca">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327918.5720000006 5527617.433 2.8999999999941792 327915.19247999974 5527612.844070001 3.8292599999986123 327916.7891399991 5527611.6678 4.298760000005132 327918.70940000005 5527611.959000001 4.399999999994179 327920.9297700003 5527614.973139999 3.7896900000050664 327920.45799 5527618.085000001 2.8999999999941792 327918.5720000006 5527617.433 2.8999999999941792</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:RoofSurface>
</bldg:boundedBy>
</bldg:Building>
</core:cityObjectMember>
<core:cityObjectMember>
<bldg:Building gml:id="BLD131702">
<gen:doubleAttribute name="gross_floor_area">
<gen:value>184</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>1967</bldg:yearOfConstruction>
<bldg:measuredHeight>4.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_e5c39971-5698-4d10-ae06-e51dc3a377ce"/>
<gml:surfaceMember xlink:href="#UUID_293983c1-b135-4a2c-905b-0278c410e97d"/>
<gml:surfaceMember xlink:href="#UUID_1c09ccd7-2575-4938-a2f1-ccb6b24d3b03"/>
<gml:surfaceMember xlink:href="#UUID_585484c4-65b0-423a-a409-c75a07954c3f"/>
<gml:surfaceMember xlink:href="#UUID_4d946189-9405-4e48-8fb6-db97066f9833"/>
<gml:surfaceMember xlink:href="#UUID_f2d8d3d2-3573-405c-8e36-02a725386d3e"/>
<gml:surfaceMember xlink:href="#UUID_2e9d0c95-f353-469a-aebb-3fa678c9c5bd"/>
<gml:surfaceMember xlink:href="#UUID_3730f689-06de-46fb-9d2e-02b86699ee6a"/>
<gml:surfaceMember xlink:href="#UUID_5774dcca-47c4-4dd6-ade1-10cdaf4967ab"/>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod2Solid>
<bldg:boundedBy>
<bldg:RoofSurface gml:id="UUID_adb175e6-f054-4550-9b63-727a170cf7b5">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_e5c39971-5698-4d10-ae06-e51dc3a377ce">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327889.6721599996 5528260.4894900005 4.30000000000291 327893.94501000084 5528255.66602 2.8000000000029104 327894.2890000008 5528264.94702 2.8000000000029104 327889.6721599996 5528260.4894900005 4.30000000000291</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_1ba722de-c8db-47df-b9c6-77618b5afaa4">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_293983c1-b135-4a2c-905b-0278c410e97d">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327881.71928999946 5528260.815470001 4.1848900000040885 327877.7609899994 5528264.91498 2.8000000000029104 327877.47000000067 5528257.051030001 2.8000000000029104 327881.71928999946 5528260.815470001 4.1848900000040885</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_84b8a1c1-5f10-42e9-923b-d4e78499857f">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_1c09ccd7-2575-4938-a2f1-ccb6b24d3b03">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327894.2890000008 5528264.94702 0 327894.2890000008 5528264.94702 2.8000000000029104 327893.94501000084 5528255.66602 2.8000000000029104 327893.94501000084 5528255.66602 0 327894.2890000008 5528264.94702 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_fd4d0222-cb62-4ffd-93b1-ad02891d0cc2">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_585484c4-65b0-423a-a409-c75a07954c3f">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327877.7609899994 5528264.91498 0 327877.7609899994 5528264.91498 2.8000000000029104 327894.2890000008 5528264.94702 2.8000000000029104 327894.2890000008 5528264.94702 0 327877.7609899994 5528264.91498 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_5ce0d1e5-da65-4d02-8f90-287d72e45431">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_4d946189-9405-4e48-8fb6-db97066f9833">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327877.47000000067 5528257.051030001 0 327877.47000000067 5528257.051030001 2.8000000000029104 327877.7609899994 5528264.91498 2.8000000000029104 327877.7609899994 5528264.91498 0 327877.47000000067 5528257.051030001 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_51112e11-39d4-413d-a2b9-4ac2dc5d1f11">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_f2d8d3d2-3573-405c-8e36-02a725386d3e">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327893.94501000084 5528255.66602 0 327893.94501000084 5528255.66602 2.8000000000029104 327877.47000000067 5528257.051030001 2.8000000000029104 327877.47000000067 5528257.051030001 0 327893.94501000084 5528255.66602 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_cf5a51de-113d-497a-a47b-3152342855bd">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_2e9d0c95-f353-469a-aebb-3fa678c9c5bd">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327893.94501000084 5528255.66602 0 327877.47000000067 5528257.051030001 0 327877.7609899994 5528264.91498 0 327894.2890000008 5528264.94702 0 327893.94501000084 5528255.66602 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_e89e9479-6848-41a8-b732-e1ed79ad549f">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_3730f689-06de-46fb-9d2e-02b86699ee6a">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327877.7609899994 5528264.91498 2.8000000000029104 327881.71928999946 5528260.815470001 4.1848900000040885 327889.6721599996 5528260.4894900005 4.30000000000291 327894.2890000008 5528264.94702 2.8000000000029104 327877.7609899994 5528264.91498 2.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_9c73fe7d-eef7-4c5d-b8b8-7e7ecdd167a2">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_5774dcca-47c4-4dd6-ade1-10cdaf4967ab">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327893.94501000084 5528255.66602 2.8000000000029104 327889.6721599996 5528260.4894900005 4.30000000000291 327881.71928999946 5528260.815470001 4.1848900000040885 327877.47000000067 5528257.051030001 2.8000000000029104 327893.94501000084 5528255.66602 2.8000000000029104</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:RoofSurface>
</bldg:boundedBy>
</bldg:Building>
</core:cityObjectMember>
<core:cityObjectMember>
<bldg:Building gml:id="BLD132148">
<gen:doubleAttribute name="gross_floor_area">
<gen:value>169</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>1968</bldg:yearOfConstruction>
<bldg:measuredHeight>4.4</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_6e67a380-559d-4a4b-96bc-896b464e3ce4"/>
<gml:surfaceMember xlink:href="#UUID_62387503-740a-4497-a42e-1135659a9353"/>
<gml:surfaceMember xlink:href="#UUID_837aaa06-d81e-413b-bd52-2ccd4cd69462"/>
<gml:surfaceMember xlink:href="#UUID_8eef1d1e-67e3-407a-a8d4-83e150e3c313"/>
<gml:surfaceMember xlink:href="#UUID_2f238b7e-1340-484f-8391-befd1f7dd3ca"/>
<gml:surfaceMember xlink:href="#UUID_f0117b8a-ba25-4aef-9a30-99b4a5fd0233"/>
<gml:surfaceMember xlink:href="#UUID_476739ee-39a9-4714-a554-726b32cd996e"/>
<gml:surfaceMember xlink:href="#UUID_4266c758-c0aa-48c5-9cc2-b45e0e679cf5"/>
<gml:surfaceMember xlink:href="#UUID_b7c6846c-a548-4216-8ecb-67a82ee44f11"/>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod2Solid>
<bldg:boundedBy>
<bldg:RoofSurface gml:id="UUID_9a612561-3c66-4183-8294-2a19a45de3af">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_6e67a380-559d-4a4b-96bc-896b464e3ce4">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327742.01761000045 5528353.102499999 4.399999999994179 327746.7440000009 5528357.50702 2.8999999999941792 327737.6129999999 5528357.828980001 2.8999999999941792 327742.01761000045 5528353.102499999 4.399999999994179</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_02786aa1-b451-42e3-82f3-bfd01e8ae368">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_62387503-740a-4497-a42e-1135659a9353">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327741.7813799996 5528346.39899 4.399999999994179 327737.0549999997 5528341.99402 2.8999999999941792 327746.1860000007 5528341.672970001 2.8999999999941792 327741.7813799996 5528346.39899 4.399999999994179</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_d3c34c74-cc20-4c9b-9718-672774a795e2">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_837aaa06-d81e-413b-bd52-2ccd4cd69462">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327746.7440000009 5528357.50702 0 327746.7440000009 5528357.50702 2.8999999999941792 327746.1860000007 5528341.672970001 2.8999999999941792 327746.1860000007 5528341.672970001 0 327746.7440000009 5528357.50702 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_42a94b4f-2dea-4ad7-8d5e-59337dd96d5b">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_8eef1d1e-67e3-407a-a8d4-83e150e3c313">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327737.6129999999 5528357.828980001 0 327737.6129999999 5528357.828980001 2.8999999999941792 327746.7440000009 5528357.50702 2.8999999999941792 327746.7440000009 5528357.50702 0 327737.6129999999 5528357.828980001 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_3e3c8647-7a58-4ad4-be23-5071133333f3">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_2f238b7e-1340-484f-8391-befd1f7dd3ca">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327737.0549999997 5528341.99402 0 327737.0549999997 5528341.99402 2.8999999999941792 327737.6129999999 5528357.828980001 2.8999999999941792 327737.6129999999 5528357.828980001 0 327737.0549999997 5528341.99402 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_4facb252-1e3b-428e-8087-be1ea5633236">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_f0117b8a-ba25-4aef-9a30-99b4a5fd0233">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327746.1860000007 5528341.672970001 0 327746.1860000007 5528341.672970001 2.8999999999941792 327737.0549999997 5528341.99402 2.8999999999941792 327737.0549999997 5528341.99402 0 327746.1860000007 5528341.672970001 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_e9569b7d-65f7-4c84-aa57-8505391bb2f3">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_476739ee-39a9-4714-a554-726b32cd996e">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327746.1860000007 5528341.672970001 0 327737.0549999997 5528341.99402 0 327737.6129999999 5528357.828980001 0 327746.7440000009 5528357.50702 0 327746.1860000007 5528341.672970001 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_fff45dbc-592b-4e9c-8394-8c1a9b01dc19">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_4266c758-c0aa-48c5-9cc2-b45e0e679cf5">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327746.7440000009 5528357.50702 2.8999999999941792 327742.01761000045 5528353.102499999 4.399999999994179 327741.7813799996 5528346.39899 4.399999999994179 327746.1860000007 5528341.672970001 2.8999999999941792 327746.7440000009 5528357.50702 2.8999999999941792</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_a9f91fe6-060b-4f3d-bf3a-49e4ede6831a">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_b7c6846c-a548-4216-8ecb-67a82ee44f11">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327737.0549999997 5528341.99402 2.8999999999941792 327741.7813799996 5528346.39899 4.399999999994179 327742.01761000045 5528353.102499999 4.399999999994179 327737.6129999999 5528357.828980001 2.8999999999941792 327737.0549999997 5528341.99402 2.8999999999941792</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:RoofSurface>
</bldg:boundedBy>
</bldg:Building>
</core:cityObjectMember>
<core:cityObjectMember>
<bldg:Building gml:id="BLD126221">
<gen:doubleAttribute name="gross_floor_area">
<gen:value>178</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>1974</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_83f7c8de-6592-4051-87e8-e53cf1bff666"/>
<gml:surfaceMember xlink:href="#UUID_085c374a-d224-4473-b115-29b1eb1426ee"/>
<gml:surfaceMember xlink:href="#UUID_296e7780-2f1b-4569-bc9b-9bcd1f2d0ada"/>
<gml:surfaceMember xlink:href="#UUID_a5a956e0-0217-4aff-92c7-e3c7732b6c03"/>
<gml:surfaceMember xlink:href="#UUID_64d7e393-dda1-45a3-8f42-82b77deb466a"/>
<gml:surfaceMember xlink:href="#UUID_417c5d97-3884-4abd-9b86-05db29387fd7"/>
<gml:surfaceMember xlink:href="#UUID_d6fd56dc-fc72-46b8-847f-b25266d3c864"/>
<gml:surfaceMember xlink:href="#UUID_00a5a748-92cc-4dac-9b1b-f3c9e8a252b4"/>
<gml:surfaceMember xlink:href="#UUID_e03b384d-9342-4c5e-8987-09ce6fe08d92"/>
<gml:surfaceMember xlink:href="#UUID_50559cac-1742-4b7e-ba64-3dae96cee280"/>
<gml:surfaceMember xlink:href="#UUID_5480fee5-ca6d-438c-85a7-242d574cf2af"/>
<gml:surfaceMember xlink:href="#UUID_6fd39224-fd54-43b7-b36e-3c348e3a1bb7"/>
<gml:surfaceMember xlink:href="#UUID_e0064db9-80cc-4b97-96ce-898b46ee6f75"/>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod2Solid>
<bldg:boundedBy>
<bldg:RoofSurface gml:id="UUID_2de9444e-9753-4eea-a548-18685adb6744">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_83f7c8de-6592-4051-87e8-e53cf1bff666">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327339.9300800003 5527571.58928 5.30000000000291 327337.7550000008 5527578.159 3.8000000000029104 327333.58898999915 5527569.294 3.8000000000029104 327339.9300800003 5527571.58928 5.30000000000291</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_618b47c2-c386-4fdd-92fe-64b970ec686c">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_085c374a-d224-4473-b115-29b1eb1426ee">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327346.9847800005 5527563.90927 4.722859999994398 327343.0859999992 5527562.504009999 3.8000000000029104 327348.3900099993 5527560.0110100005 3.8000000000029104 327346.9847800005 5527563.90927 4.722859999994398</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_c9b31fae-7942-4088-aab0-25eb7a8de944">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_296e7780-2f1b-4569-bc9b-9bcd1f2d0ada">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327333.58898999915 5527569.294 0 327333.58898999915 5527569.294 3.8000000000029104 327337.7550000008 5527578.159 3.8000000000029104 327337.7550000008 5527578.159 0 327333.58898999915 5527569.294 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_19cb7070-a024-4c28-933a-0705b5f902c0">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_a5a956e0-0217-4aff-92c7-e3c7732b6c03">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327343.99399000034 5527564.435009999 0 327343.99399000034 5527564.435009999 3.8000000000029104 327333.58898999915 5527569.294 3.8000000000029104 327333.58898999915 5527569.294 0 327343.99399000034 5527564.435009999 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_0ea9995b-bc13-4072-a8b9-9eb731c873a5">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_64d7e393-dda1-45a3-8f42-82b77deb466a">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327343.0859999992 5527562.504009999 0 327343.0859999992 5527562.504009999 3.8000000000029104 327343.99399000034 5527564.435009999 3.8000000000029104 327343.99399000034 5527564.435009999 0 327343.0859999992 5527562.504009999 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_caa8ef09-8ff4-4f00-a226-46bb4c60ef6a">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_417c5d97-3884-4abd-9b86-05db29387fd7">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327348.3900099993 5527560.0110100005 0 327348.3900099993 5527560.0110100005 3.8000000000029104 327343.0859999992 5527562.504009999 3.8000000000029104 327343.0859999992 5527562.504009999 0 327348.3900099993 5527560.0110100005 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_752fc0b9-bf62-4d2a-84dd-2d77a8f3814b">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_d6fd56dc-fc72-46b8-847f-b25266d3c864">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327353.06399000064 5527569.953 0 327353.06399000064 5527569.953 3.8000000000029104 327348.3900099993 5527560.0110100005 3.8000000000029104 327348.3900099993 5527560.0110100005 0 327353.06399000064 5527569.953 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_a6be4294-1346-495a-ade5-957fbbb665b0">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_00a5a748-92cc-4dac-9b1b-f3c9e8a252b4">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327337.7550000008 5527578.159 0 327337.7550000008 5527578.159 3.8000000000029104 327353.06399000064 5527569.953 3.8000000000029104 327353.06399000064 5527569.953 0 327337.7550000008 5527578.159 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_90d0900f-e5d3-40c6-97cd-c67095888e89">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_e03b384d-9342-4c5e-8987-09ce6fe08d92">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327337.7550000008 5527578.159 0 327353.06399000064 5527569.953 0 327348.3900099993 5527560.0110100005 0 327343.0859999992 5527562.504009999 0 327343.99399000034 5527564.435009999 0 327333.58898999915 5527569.294 0 327337.7550000008 5527578.159 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_4d1da16c-9b9a-419a-8415-9c5dfb3afb4d">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_50559cac-1742-4b7e-ba64-3dae96cee280">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327343.99399000034 5527564.435009999 3.8000000000029104 327347.8957700003 5527565.84684 4.722829999998794 327347.1216000002 5527567.986129999 5.230139999999665 327339.9300800003 5527571.58928 5.30000000000291 327333.58898999915 5527569.294 3.8000000000029104 327343.99399000034 5527564.435009999 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_66ba0f9e-bc5f-4df4-9457-e9ece305d335">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_5480fee5-ca6d-438c-85a7-242d574cf2af">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327343.0859999992 5527562.504009999 3.8000000000029104 327346.9847800005 5527563.90927 4.722859999994398 327347.8957700003 5527565.84684 4.722829999998794 327343.99399000034 5527564.435009999 3.8000000000029104 327343.0859999992 5527562.504009999 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_15bfa943-fa1b-473c-ae13-b974382c1999">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_6fd39224-fd54-43b7-b36e-3c348e3a1bb7">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327353.06399000064 5527569.953 3.8000000000029104 327347.1216000002 5527567.986129999 5.230139999999665 327347.8957700003 5527565.84684 4.722829999998794 327346.9847800005 5527563.90927 4.722859999994398 327348.3900099993 5527560.0110100005 3.8000000000029104 327353.06399000064 5527569.953 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_171e288a-58e9-497d-a2c7-8b0488bb8f9c">
<bldg:lod2MultiSurface>
<gml:MultiSurface srsName="EPSG:26911" srsDimension="3">
<gml:surfaceMember>
<gml:Polygon gml:id="UUID_e0064db9-80cc-4b97-96ce-898b46ee6f75">
<gml:exterior>
<gml:LinearRing>
<gml:posList>327337.7550000008 5527578.159 3.8000000000029104 327339.9300800003 5527571.58928 5.30000000000291 327347.1216000002 5527567.986129999 5.230139999999665 327353.06399000064 5527569.953 3.8000000000029104 327337.7550000008 5527578.159 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>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff