Merge branch 'undefined' into 'master'
Updated code by Behnam See merge request Guille/libs!2
This commit is contained in:
commit
dcf23c239b
|
@ -5,13 +5,13 @@ Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@conc
|
|||
"""
|
||||
import numpy as np
|
||||
import xmltodict
|
||||
import time
|
||||
|
||||
from city_model_structure.city import City
|
||||
from city_model_structure.building import Building
|
||||
from city_model_structure.attributes.surface import Surface
|
||||
from helpers.geometry_helper import GeometryHelper
|
||||
from city_model_structure.attributes.polygon import Polygon
|
||||
from city_model_structure.attributes.thermal_zone import ThermalZone
|
||||
|
||||
|
||||
class CityGml:
|
||||
|
@ -70,26 +70,30 @@ class CityGml:
|
|||
City model structure enriched with the geometry information
|
||||
:return: City
|
||||
"""
|
||||
init = time.process_time_ns()
|
||||
if self._city is None:
|
||||
# todo: refactor this method to clearly choose the gml type
|
||||
self._city = City(self._lower_corner, self._upper_corner, self._srs_name)
|
||||
i = 0
|
||||
for o in self._gml['CityModel']['cityObjectMember']:
|
||||
gmlbuilding = o['Building']
|
||||
for build in gmlbuilding['consistsOfBuildingPart']:
|
||||
buildingpart = build['BuildingPart']
|
||||
i += 1
|
||||
lod = 0
|
||||
surfaces = []
|
||||
if 'lod1Solid' in o['Building']:
|
||||
if 'lod1Solid' in buildingpart:
|
||||
lod += 1
|
||||
surfaces = CityGml._lod1_solid(o)
|
||||
elif 'lod1MultiSurface' in o['Building']:
|
||||
elif 'lod1MultiSurface' in buildingpart:
|
||||
lod += 1
|
||||
surfaces = CityGml._lod1_multi_surface(o)
|
||||
elif 'lod2MultiSurface' in o['Building']:
|
||||
elif 'lod2MultiSurface' in buildingpart:
|
||||
# todo: check if this is a real case or a miss-formed citygml
|
||||
lod = 2
|
||||
surfaces = surfaces + CityGml._lod2_solid_multi_surface(o)
|
||||
else:
|
||||
for bound in o['Building']['boundedBy']:
|
||||
for bound in buildingpart['boundedBy']:
|
||||
surface_type = next(iter(bound))
|
||||
if 'lod2MultiSurface' in bound[surface_type]:
|
||||
lod = 2
|
||||
|
@ -105,13 +109,12 @@ class CityGml:
|
|||
terrains = self._terrains(o, lod_terrain_str)
|
||||
year_of_construction = None
|
||||
function = None
|
||||
if 'yearOfConstruction' in o['Building']:
|
||||
year_of_construction = o['Building']['yearOfConstruction']
|
||||
if 'yearOfConstruction' in buildingpart:
|
||||
year_of_construction = buildingpart['yearOfConstruction']
|
||||
if 'function' in o['Building']:
|
||||
function = o['Building']['function']
|
||||
building = Building(name, lod, surfaces, year_of_construction, function, self._lower_corner, terrains)
|
||||
self._city.add_city_object(building)
|
||||
|
||||
self._city.add_city_object(Building(name, lod, surfaces, terrains, year_of_construction, function,
|
||||
self._lower_corner))
|
||||
return self._city
|
||||
|
||||
def _terrains(self, city_object, lod_terrain_str):
|
||||
|
@ -147,8 +150,10 @@ class CityGml:
|
|||
|
||||
@staticmethod
|
||||
def _lod2_solid_multi_surface(o):
|
||||
for i in buildingpart['boundedBy']:
|
||||
surfacedata = i
|
||||
polygons = [Polygon(CityGml._remove_last_point(s['Polygon']['exterior']['LinearRing']['posList']))
|
||||
for s in o['Building']['lod2MultiSurface']['MultiSurface']['surfaceMember']]
|
||||
for s in surfacedata['OuterCeilingSurface']['lod2MultiSurface']['MultiSurface']['surfaceMember']]
|
||||
return [Surface(p,p) for p in polygons]
|
||||
|
||||
@staticmethod
|
||||
|
@ -176,7 +181,7 @@ class CityGml:
|
|||
if 'CompositeSurface' in s:
|
||||
surfaces = surfaces + CityGml._lod2_composite_surface(s)
|
||||
else:
|
||||
surfaces = surfaces + CityGml._lod2_multi_surface(s, GeometryHelper.gml_surface_to_libs(surface_type))
|
||||
surfaces = surfaces + CityGml._lod2_multi_surface(s, surface_type)
|
||||
return surfaces
|
||||
|
||||
@staticmethod
|
||||
|
|
Loading…
Reference in New Issue
Block a user