Lod2 import for citygml
This commit is contained in:
parent
09f8515ee4
commit
33725e8b74
|
@ -4,12 +4,13 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later
|
|||
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
|
||||
"""
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
from trimesh import Trimesh
|
||||
from helpers.geometry_helper import GeometryHelper
|
||||
from helpers.configuration_helper import ConfigurationHelper
|
||||
from city_model_structure.attributes.surface import Surface
|
||||
|
||||
|
||||
|
||||
class Polyhedron:
|
||||
"""
|
||||
Polyhedron class
|
||||
|
@ -25,6 +26,11 @@ class Polyhedron:
|
|||
self._mesh = None
|
||||
self._centroid = None
|
||||
self._max_z = None
|
||||
self._max_y = None
|
||||
self._max_x = None
|
||||
self._min_z = None
|
||||
self._min_y = None
|
||||
self._min_x = None
|
||||
self._geometry = GeometryHelper()
|
||||
|
||||
def _position_of(self, point):
|
||||
|
@ -59,36 +65,13 @@ class Polyhedron:
|
|||
def _point(coordinates):
|
||||
return coordinates[0], coordinates[1], coordinates[2]
|
||||
|
||||
@staticmethod
|
||||
def _ground_weird_shape(points, original, triangle=False):
|
||||
x = []
|
||||
y = []
|
||||
xo = []
|
||||
yo = []
|
||||
for o in original:
|
||||
xo.append(o[0])
|
||||
yo.append(o[1])
|
||||
for point in points:
|
||||
x.append(point[0])
|
||||
y.append(point[1])
|
||||
x = [val - min(xo) for val in x]
|
||||
y = [val - min(yo) for val in y]
|
||||
if triangle:
|
||||
print(len(points))
|
||||
for point in range(0, len(x)):
|
||||
print('point', x[point], y[point])
|
||||
|
||||
def _triangulate(self, surface):
|
||||
Polyhedron._ground_weird_shape(surface.points, surface.points)
|
||||
triangles = []
|
||||
triangles_count = len(surface.points) - 2
|
||||
points_list = surface.points_list
|
||||
print(points_list)
|
||||
point_index = 0
|
||||
area = surface.area
|
||||
print(f'area is {area}')
|
||||
while len(triangles) < triangles_count:
|
||||
print(f'try vertex {point_index}')
|
||||
# select a triangle starting at point index
|
||||
triangle_points = ' '.join(str(e) for e in [*points_list[point_index:point_index + 9]])
|
||||
# remove the middle vertex from previous triangle
|
||||
|
@ -97,22 +80,12 @@ class Polyhedron:
|
|||
rest_surface = Surface(rest_points, remove_last=False)
|
||||
if self._geometry.almost_same_area(area, (triangular_surface.area + rest_surface.area)):
|
||||
area = rest_surface.area
|
||||
print(f'ok! new area is {area}')
|
||||
print('Triangle-----------------------------------------')
|
||||
Polyhedron._ground_weird_shape(triangular_surface.points, surface.points)
|
||||
print('rest---------------------------------------------')
|
||||
Polyhedron._ground_weird_shape(rest_surface.points, surface.points)
|
||||
triangles.append(triangular_surface)
|
||||
points_list = rest_surface.points_list
|
||||
if len(rest_surface.points) == 3:
|
||||
triangles.append(rest_surface)
|
||||
point_index = 0
|
||||
else:
|
||||
print(f'nok! area {(triangular_surface.area + rest_surface.area)} is not {area}')
|
||||
print('Triangle-----------------------------------------')
|
||||
Polyhedron._ground_weird_shape(triangular_surface.points, surface.points)
|
||||
print('rest---------------------------------------------')
|
||||
Polyhedron._ground_weird_shape(rest_surface.points, surface.points)
|
||||
point_index = point_index + 3
|
||||
return triangles
|
||||
|
||||
|
@ -127,39 +100,23 @@ class Polyhedron:
|
|||
for surface in self._surfaces:
|
||||
face = []
|
||||
points = surface.points
|
||||
if len(points) != 3: # three vertices
|
||||
print(f'Number of vertex {len(points)}')
|
||||
if len(points) != 3:
|
||||
sub_surfaces = self._triangulate(surface)
|
||||
print(f'Transformed {len(points)} vertex into {len(sub_surfaces)} triangles')
|
||||
print(f'Total area: {surface.area}')
|
||||
sum_area = 0.0
|
||||
for sub_surface in sub_surfaces:
|
||||
sum_area = sum_area + sub_surface.area
|
||||
points = sub_surface.points
|
||||
for point in points:
|
||||
face.append(self._position_of(point))
|
||||
self._faces.append(face)
|
||||
print(f'Accumulated area: {sum_area}')
|
||||
else:
|
||||
for point in points:
|
||||
face.append(self._position_of(point))
|
||||
self._faces.append(face)
|
||||
return self._faces
|
||||
|
||||
@property
|
||||
def _cloud_mesh(self):
|
||||
if self._mesh is None:
|
||||
self._mesh = GeometryHelper.create_mesh(self._surfaces)
|
||||
return self._mesh
|
||||
|
||||
@property
|
||||
def _polyhedron_mesh(self):
|
||||
if self._mesh is None:
|
||||
try:
|
||||
print("create mesh")
|
||||
self._mesh = Trimesh(vertices=self.vertices, faces=self.faces)
|
||||
except SyntaxError:
|
||||
self._mesh = self._cloud_mesh
|
||||
self._mesh = Trimesh(vertices=self.vertices, faces=self.faces)
|
||||
return self._mesh
|
||||
|
||||
@property
|
||||
|
@ -181,9 +138,82 @@ class Polyhedron:
|
|||
Polyhedron maximal z value
|
||||
:return: float
|
||||
"""
|
||||
bounds = self._polyhedron_mesh.bounds
|
||||
z_max = max(bounds[:, 2])
|
||||
return z_max
|
||||
if self._max_z is None:
|
||||
self._max_z = ConfigurationHelper().min_coordinate
|
||||
for surface in self._surfaces:
|
||||
for point in surface.points:
|
||||
if self._max_z < point[2]:
|
||||
self._max_z = point[2]
|
||||
return self._max_z
|
||||
|
||||
@property
|
||||
def max_y(self):
|
||||
"""
|
||||
Polyhedron maximal y value
|
||||
:return: float
|
||||
"""
|
||||
if self._max_y is None:
|
||||
self._max_y = ConfigurationHelper().min_coordinate
|
||||
for surface in self._surfaces:
|
||||
for point in surface.points:
|
||||
if self._max_y < point[1]:
|
||||
self._max_y = point[1]
|
||||
return self._max_y
|
||||
|
||||
@property
|
||||
def max_x(self):
|
||||
"""
|
||||
Polyhedron maximal x value
|
||||
:return: float
|
||||
"""
|
||||
if self._max_x is None:
|
||||
self._max_x = ConfigurationHelper().min_coordinate
|
||||
for surface in self._surfaces:
|
||||
for point in surface.points:
|
||||
self._max_x = max(self._max_x, point[0])
|
||||
return self._max_x
|
||||
|
||||
@property
|
||||
def min_z(self):
|
||||
"""
|
||||
Polyhedron minimal z value
|
||||
:return: float
|
||||
"""
|
||||
if self._min_z is None:
|
||||
self._min_z = self.max_z
|
||||
for surface in self._surfaces:
|
||||
for point in surface.points:
|
||||
if self._min_z > point[2]:
|
||||
self._min_z = point[2]
|
||||
return self._min_z
|
||||
|
||||
@property
|
||||
def min_y(self):
|
||||
"""
|
||||
Polyhedron minimal y value
|
||||
:return: float
|
||||
"""
|
||||
if self._min_y is None:
|
||||
self._min_y = self.max_y
|
||||
for surface in self._surfaces:
|
||||
for point in surface.points:
|
||||
if self._min_y > point[1]:
|
||||
self._min_y = point[1]
|
||||
return self._min_y
|
||||
|
||||
@property
|
||||
def min_x(self):
|
||||
"""
|
||||
Polyhedron minimal x value
|
||||
:return: float
|
||||
"""
|
||||
if self._min_x is None:
|
||||
self._min_x = self.max_x
|
||||
for surface in self._surfaces:
|
||||
for point in surface.points:
|
||||
if self._min_x > point[0]:
|
||||
self._min_x = point[0]
|
||||
return self._min_x
|
||||
|
||||
@property
|
||||
def centroid(self):
|
||||
|
@ -191,7 +221,8 @@ class Polyhedron:
|
|||
Polyhedron centroid
|
||||
:return: [x,y,z]
|
||||
"""
|
||||
return self._polyhedron_mesh.centroid
|
||||
return [self.max_x - self.min_x, self.max_y - self.min_y, self.max_z - self.min_z]
|
||||
|
||||
|
||||
def stl_export(self, full_path):
|
||||
"""
|
||||
|
|
|
@ -204,7 +204,10 @@ class Surface:
|
|||
:return: float
|
||||
"""
|
||||
if self._area is None:
|
||||
self._area = self.polygon.get_area()
|
||||
try:
|
||||
self._area = self.polygon.get_area()
|
||||
except AttributeError:
|
||||
self._area = 0
|
||||
return self._area
|
||||
|
||||
def _is_almost_same_terrain(self, terrain_points, ground_points):
|
||||
|
@ -406,3 +409,7 @@ class Surface:
|
|||
except Exception as err:
|
||||
print('Error', err)
|
||||
return None
|
||||
|
||||
@property
|
||||
def convex(self):
|
||||
return pn.Polygon.is_convex(self.polygon.points)
|
||||
|
|
|
@ -20,3 +20,4 @@ min_air_change = 0.5
|
|||
|
||||
[buildings]
|
||||
max_location_distance_for_shared_walls = 100.0
|
||||
min_coordinate = -1.7976931348623157e+308
|
|
@ -39,7 +39,7 @@ class CityGml:
|
|||
'http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd" '
|
||||
'xmlns="http://www.opengis.net/citygml/2.0': None,
|
||||
'http://www.opengis.net/citygml/2.0': None
|
||||
}, force_list=('cityObjectMember', 'curveMember', 'boundedBy', 'surfaceMember', 'CompositeSurface'))
|
||||
}, force_list=('cityObjectMember', 'curveMember', 'boundedBy', 'surfaceMember'))
|
||||
self._city_objects = None
|
||||
self._geometry = GeometryHelper()
|
||||
for bound in self._gml['CityModel']['boundedBy']:
|
||||
|
@ -80,6 +80,9 @@ class CityGml:
|
|||
elif 'lod1MultiSurface' in o['Building']:
|
||||
lod += 1
|
||||
surfaces = CityGml._lod1_multisurface(o)
|
||||
elif 'lod2MultiSurface' in o['Building']:
|
||||
lod = 2
|
||||
surfaces = surfaces + CityGml._lod2_multisurface(o)
|
||||
else:
|
||||
for bound in o['Building']['boundedBy']:
|
||||
surface_type = next(iter(bound))
|
||||
|
@ -135,6 +138,12 @@ class CityGml:
|
|||
for s in o['Building']['lod1MultiSurface']['MultiSurface']['surfaceMember']]
|
||||
return surfaces
|
||||
|
||||
@staticmethod
|
||||
def _lod2_multisurface(o):
|
||||
surfaces = [Surface(s['Polygon']['exterior']['LinearRing']['posList'])
|
||||
for s in o['Building']['lod2MultiSurface']['MultiSurface']['surfaceMember']]
|
||||
return surfaces
|
||||
|
||||
@staticmethod
|
||||
def _lod2(bound):
|
||||
surfaces = []
|
||||
|
|
|
@ -100,8 +100,15 @@ class ConfigurationHelper:
|
|||
@property
|
||||
def max_location_distance_for_shared_walls(self):
|
||||
"""
|
||||
Configured maximal distance between
|
||||
attributes to consider that they may share walls in meters
|
||||
Configured maximal distance between attributes to consider that they may share walls in meters
|
||||
:return: float
|
||||
"""
|
||||
return self._config.getfloat('buildings', 'max_location_distance_for_shared_walls')
|
||||
|
||||
@property
|
||||
def min_coordinate(self) -> float:
|
||||
"""
|
||||
Configured minimal coordinate value
|
||||
:return: float
|
||||
"""
|
||||
return self._config.getfloat('buildings', 'min_coordinate')
|
||||
|
|
|
@ -28,7 +28,6 @@ class GeometryHelper:
|
|||
:param location2:
|
||||
:return: Boolean
|
||||
"""
|
||||
print("check adjacency")
|
||||
max_distance = ConfigurationHelper().max_location_distance_for_shared_walls
|
||||
x = location1[0] - location2[0]
|
||||
y = location1[1] - location2[1]
|
||||
|
|
|
@ -24,7 +24,9 @@ class TestGeometryFactory(TestCase):
|
|||
|
||||
def _get_citygml(self):
|
||||
if self._city_gml is None:
|
||||
file_path = (self._example_path / 'EngHT_Flat_model_lod1.gml').resolve()
|
||||
print("load")
|
||||
# file_path = (self._example_path / 'EngHT_Flat_model_01.gml').resolve()
|
||||
file_path = (self._example_path / 'lod2_buildings.gml').resolve()
|
||||
self._city_gml = GeometryFactory('citygml', file_path).city
|
||||
self.assertIsNotNone(self._city_gml, 'city is none')
|
||||
return self._city_gml
|
||||
|
|
453
tests_data/building_lod2.gml
Normal file
453
tests_data/building_lod2.gml
Normal file
|
@ -0,0 +1,453 @@
|
|||
<?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:32191" srsDimension="3">
|
||||
<gml:lowerCorner>326011.03601000085 5526362.34802 0</gml:lowerCorner>
|
||||
<gml:upperCorner>329466.6600299999 5529018.72205 8.5</gml:upperCorner>
|
||||
</gml:Envelope>
|
||||
</gml:boundedBy>
|
||||
<core:cityObjectMember>
|
||||
<bldg:Building gml:id="BLD100086">
|
||||
<gen:doubleAttribute name="Kelowna_id">
|
||||
<gen:value>809144</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:doubleAttribute name="Population">
|
||||
<gen:value>7</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:stringAttribute name="Building_Type">
|
||||
<gen:value>SFD</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<gen:doubleAttribute name="footprint_area">
|
||||
<gen:value>148.17</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:stringAttribute name="footprint_area_unit">
|
||||
<gen:value>m2</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<gen:doubleAttribute name="gross_floor_area">
|
||||
<gen:value>189</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:stringAttribute name="gross_floor_area_unit">
|
||||
<gen:value>m2</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<gen:stringAttribute name="citygml_function{0}">
|
||||
<gen:value>residential</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<gen:doubleAttribute name="furnace_age_base">
|
||||
<gen:value>2019</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:doubleAttribute name="HWT_age_base">
|
||||
<gen:value>2019</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<bldg:function>residential</bldg:function>
|
||||
<bldg:yearOfConstruction>2019</bldg:yearOfConstruction>
|
||||
<bldg:roofType>flat</bldg:roofType>
|
||||
<bldg:measuredHeight>5.5</bldg:measuredHeight>
|
||||
<bldg:storeysAboveGround>1</bldg:storeysAboveGround>
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:32191" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327918.65699999966 5527620.1219999995 0 327918.65699999966 5527620.1219999995 5.5 327918.5720000006 5527617.433 5.5 327918.5720000006 5527617.433 0 327918.65699999966 5527620.1219999995 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327912.1970099993 5527620.328 0 327912.1970099993 5527620.328 5.5 327918.65699999966 5527620.1219999995 5.5 327918.65699999966 5527620.1219999995 0 327912.1970099993 5527620.328 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327911.7700100001 5527606.959000001 0 327911.7700100001 5527606.959000001 5.5 327912.1970099993 5527620.328 5.5 327912.1970099993 5527620.328 0 327911.7700100001 5527606.959000001 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327923.7589999996 5527606.57701 0 327923.7589999996 5527606.57701 5.5 327911.7700100001 5527606.959000001 5.5 327911.7700100001 5527606.959000001 0 327923.7589999996 5527606.57701 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327924.1219900008 5527617.968 0 327924.1219900008 5527617.968 5.5 327923.7589999996 5527606.57701 5.5 327923.7589999996 5527606.57701 0 327924.1219900008 5527617.968 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327920.45799 5527618.085000001 0 327920.45799 5527618.085000001 5.5 327924.1219900008 5527617.968 5.5 327924.1219900008 5527617.968 0 327920.45799 5527618.085000001 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327918.5720000006 5527617.433 0 327918.5720000006 5527617.433 5.5 327920.45799 5527618.085000001 5.5 327920.45799 5527618.085000001 0 327918.5720000006 5527617.433 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327918.65699999966 5527620.1219999995 5.5 327912.1970099993 5527620.328 5.5 327911.7700100001 5527606.959000001 5.5 327923.7589999996 5527606.57701 5.5 327924.1219900008 5527617.968 5.5 327920.45799 5527618.085000001 5.5 327918.5720000006 5527617.433 5.5 327918.65699999966 5527620.1219999995 5.5</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:Building>
|
||||
</core:cityObjectMember>
|
||||
<core:cityObjectMember>
|
||||
<bldg:Building gml:id="BLD100087">
|
||||
<gen:doubleAttribute name="Kelowna_id">
|
||||
<gen:value>809157</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:doubleAttribute name="Population">
|
||||
<gen:value>7</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:stringAttribute name="Building_Type">
|
||||
<gen:value>SFD</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<gen:doubleAttribute name="footprint_area">
|
||||
<gen:value>147.58</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:stringAttribute name="footprint_area_unit">
|
||||
<gen:value>m2</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<gen:doubleAttribute name="gross_floor_area">
|
||||
<gen:value>201</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:stringAttribute name="gross_floor_area_unit">
|
||||
<gen:value>m2</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<gen:stringAttribute name="citygml_function{0}">
|
||||
<gen:value>residential</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<gen:doubleAttribute name="furnace_age_base">
|
||||
<gen:value>2019</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:doubleAttribute name="HWT_age_base">
|
||||
<gen:value>2019</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<bldg:function>residential</bldg:function>
|
||||
<bldg:yearOfConstruction>2019</bldg:yearOfConstruction>
|
||||
<bldg:roofType>flat</bldg:roofType>
|
||||
<bldg:measuredHeight>7</bldg:measuredHeight>
|
||||
<bldg:storeysAboveGround>2</bldg:storeysAboveGround>
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:32191" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327903.1820100006 5527620.4350000005 0 327903.1820100006 5527620.4350000005 7 327903.13698999956 5527617.434 7 327903.13698999956 5527617.434 0 327903.1820100006 5527620.4350000005 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327896.92998999916 5527620.528000001 0 327896.92998999916 5527620.528000001 7 327903.1820100006 5527620.4350000005 7 327903.1820100006 5527620.4350000005 0 327896.92998999916 5527620.528000001 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327896.716 5527606.1899999995 0 327896.716 5527606.1899999995 7 327896.92998999916 5527620.528000001 7 327896.92998999916 5527620.528000001 0 327896.716 5527606.1899999995 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327904.02800000086 5527606.081 0 327904.02800000086 5527606.081 7 327896.716 5527606.1899999995 7 327896.716 5527606.1899999995 0 327904.02800000086 5527606.081 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327907.9790000003 5527606.880999999 0 327907.9790000003 5527606.880999999 7 327904.02800000086 5527606.081 7 327904.02800000086 5527606.081 0 327907.9790000003 5527606.880999999 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327908.15699999966 5527618.875 0 327908.15699999966 5527618.875 7 327907.9790000003 5527606.880999999 7 327907.9790000003 5527606.880999999 0 327908.15699999966 5527618.875 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327905.10500000045 5527618.92 0 327905.10500000045 5527618.92 7 327908.15699999966 5527618.875 7 327908.15699999966 5527618.875 0 327905.10500000045 5527618.92 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327905.08299 5527617.404999999 0 327905.08299 5527617.404999999 7 327905.10500000045 5527618.92 7 327905.10500000045 5527618.92 0 327905.08299 5527617.404999999 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327903.13698999956 5527617.434 0 327903.13698999956 5527617.434 7 327905.08299 5527617.404999999 7 327905.08299 5527617.404999999 0 327903.13698999956 5527617.434 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>327903.1820100006 5527620.4350000005 7 327896.92998999916 5527620.528000001 7 327896.716 5527606.1899999995 7 327904.02800000086 5527606.081 7 327907.9790000003 5527606.880999999 7 327908.15699999966 5527618.875 7 327905.10500000045 5527618.92 7 327905.08299 5527617.404999999 7 327903.13698999956 5527617.434 7 327903.1820100006 5527620.4350000005 7</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:Building>
|
||||
</core:cityObjectMember>
|
||||
<core:cityObjectMember>
|
||||
<bldg:Building gml:id="BLD101974">
|
||||
<gen:doubleAttribute name="Kelowna_id">
|
||||
<gen:value>182978</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:doubleAttribute name="Population">
|
||||
<gen:value>47</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:stringAttribute name="Building_Type">
|
||||
<gen:value>MURB</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<gen:doubleAttribute name="footprint_area">
|
||||
<gen:value>646.8</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:stringAttribute name="footprint_area_unit">
|
||||
<gen:value>m2</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<gen:doubleAttribute name="gross_floor_area">
|
||||
<gen:value>1940</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:stringAttribute name="gross_floor_area_unit">
|
||||
<gen:value>m2</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<gen:stringAttribute name="citygml_function{0}">
|
||||
<gen:value>residential</gen:value>
|
||||
</gen:stringAttribute>
|
||||
<gen:doubleAttribute name="furnace_age_base">
|
||||
<gen:value>1974</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<gen:doubleAttribute name="HWT_age_base">
|
||||
<gen:value>1974</gen:value>
|
||||
</gen:doubleAttribute>
|
||||
<bldg:function>residential</bldg:function>
|
||||
<bldg:yearOfConstruction>1974</bldg:yearOfConstruction>
|
||||
<bldg:roofType>flat</bldg:roofType>
|
||||
<bldg:measuredHeight>8.5</bldg:measuredHeight>
|
||||
<bldg:storeysAboveGround>3</bldg:storeysAboveGround>
|
||||
<bldg:lod2MultiSurface>
|
||||
<gml:MultiSurface srsName="EPSG:32191" srsDimension="3">
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328066.44198999926 5528221.52698 0 328066.44198999926 5528221.52698 8.5 328066.37298999913 5528218.87403 8.5 328066.37298999913 5528218.87403 0 328066.44198999926 5528221.52698 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328062.64898999967 5528221.625979999 0 328062.64898999967 5528221.625979999 8.5 328066.44198999926 5528221.52698 8.5 328066.44198999926 5528221.52698 0 328062.64898999967 5528221.625979999 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328062.5769999996 5528218.872020001 0 328062.5769999996 5528218.872020001 8.5 328062.64898999967 5528221.625979999 8.5 328062.64898999967 5528221.625979999 0 328062.5769999996 5528218.872020001 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328054.4609999992 5528219.083009999 0 328054.4609999992 5528219.083009999 8.5 328062.5769999996 5528218.872020001 8.5 328062.5769999996 5528218.872020001 0 328054.4609999992 5528219.083009999 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328054.00298999995 5528198.384 0 328054.00298999995 5528198.384 8.5 328054.4609999992 5528219.083009999 8.5 328054.4609999992 5528219.083009999 0 328054.00298999995 5528198.384 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328054.8479900006 5528192.8129900005 0 328054.8479900006 5528192.8129900005 8.5 328054.00298999995 5528198.384 8.5 328054.00298999995 5528198.384 0 328054.8479900006 5528192.8129900005 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328053.9679899998 5528187.125 0 328053.9679899998 5528187.125 8.5 328054.8479900006 5528192.8129900005 8.5 328054.8479900006 5528192.8129900005 0 328053.9679899998 5528187.125 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328062.03800000064 5528186.91501 0 328062.03800000064 5528186.91501 8.5 328053.9679899998 5528187.125 8.5 328053.9679899998 5528187.125 0 328062.03800000064 5528186.91501 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328061.9790100008 5528184.657989999 0 328061.9790100008 5528184.657989999 8.5 328062.03800000064 5528186.91501 8.5 328062.03800000064 5528186.91501 0 328061.9790100008 5528184.657989999 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328065.91500999965 5528184.55601 0 328065.91500999965 5528184.55601 8.5 328061.9790100008 5528184.657989999 8.5 328061.9790100008 5528184.657989999 0 328065.91500999965 5528184.55601 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328065.9790100008 5528187.00299 0 328065.9790100008 5528187.00299 8.5 328065.91500999965 5528184.55601 8.5 328065.91500999965 5528184.55601 0 328065.9790100008 5528187.00299 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328074.1480100006 5528186.79001 0 328074.1480100006 5528186.79001 8.5 328065.9790100008 5528187.00299 8.5 328065.9790100008 5528187.00299 0 328074.1480100006 5528186.79001 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328073.75799999945 5528197.550000001 0 328073.75799999945 5528197.550000001 8.5 328074.1480100006 5528186.79001 8.5 328074.1480100006 5528186.79001 0 328073.75799999945 5528197.550000001 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328074.43600999936 5528201.869999999 0 328074.43600999936 5528201.869999999 8.5 328073.75799999945 5528197.550000001 8.5 328073.75799999945 5528197.550000001 0 328074.43600999936 5528201.869999999 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328074.7179899998 5528218.65601 0 328074.7179899998 5528218.65601 8.5 328074.43600999936 5528201.869999999 8.5 328074.43600999936 5528201.869999999 0 328074.7179899998 5528218.65601 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328066.37298999913 5528218.87403 0 328066.37298999913 5528218.87403 8.5 328074.7179899998 5528218.65601 8.5 328074.7179899998 5528218.65601 0 328066.37298999913 5528218.87403 0</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon>
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>328066.44198999926 5528221.52698 8.5 328062.64898999967 5528221.625979999 8.5 328062.5769999996 5528218.872020001 8.5 328054.4609999992 5528219.083009999 8.5 328054.00298999995 5528198.384 8.5 328054.8479900006 5528192.8129900005 8.5 328053.9679899998 5528187.125 8.5 328062.03800000064 5528186.91501 8.5 328061.9790100008 5528184.657989999 8.5 328065.91500999965 5528184.55601 8.5 328065.9790100008 5528187.00299 8.5 328074.1480100006 5528186.79001 8.5 328073.75799999945 5528197.550000001 8.5 328074.43600999936 5528201.869999999 8.5 328074.7179899998 5528218.65601 8.5 328066.37298999913 5528218.87403 8.5 328066.44198999926 5528221.52698 8.5</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
</gml:MultiSurface>
|
||||
</bldg:lod2MultiSurface>
|
||||
</bldg:Building>
|
||||
</core:cityObjectMember>
|
||||
</core:CityModel>
|
|
@ -795,20 +795,6 @@
|
|||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_a52ecdbc-9a33-4d69-9306-fe6edcbb7d3d">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing gml:id="UUID_e504f144-5baf-4dd9-bd7d-503297a02635">
|
||||
<gml:posList>296846.760109 5041420.154931 125.439000 296846.760109 5041420.154931 125.439074 </gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
<gml:interior>
|
||||
<gml:LinearRing gml:id="UUID_7e25aba2-fe9c-41ee-a234-7bcc1ba2e044">
|
||||
<gml:posList>296845.859131 5041420.726167 125.439000 296846.760109 5041420.154931 125.439000 296845.859131 5041420.726167 125.439000 </gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:interior>
|
||||
</gml:Polygon>
|
||||
</gml:surfaceMember>
|
||||
<gml:surfaceMember>
|
||||
<gml:Polygon gml:id="UUID_6ec30c7f-23be-4e65-a30f-cab03eea2be5">
|
||||
<gml:exterior>
|
||||
|
@ -3434,6 +3420,8 @@
|
|||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<yearOfConstruction>2050</yearOfConstruction>
|
||||
<function>W4</function>
|
||||
</bldg:Building>
|
||||
</cityObjectMember>
|
||||
|
||||
|
@ -10207,6 +10195,8 @@
|
|||
</bldg:lod2MultiSurface>
|
||||
</bldg:RoofSurface>
|
||||
</bldg:boundedBy>
|
||||
<yearOfConstruction>2050</yearOfConstruction>
|
||||
<function>W4</function>
|
||||
</bldg:Building>
|
||||
</cityObjectMember>
|
||||
<gml:boundedBy>
|
||||
|
|
Loading…
Reference in New Issue
Block a user