Merge branch 'master' into 'master'
Master See merge request Guille/libs!3
This commit is contained in:
commit
950310febf
|
@ -5,13 +5,13 @@ Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@conc
|
||||||
"""
|
"""
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import xmltodict
|
import xmltodict
|
||||||
|
import time
|
||||||
|
|
||||||
from city_model_structure.city import City
|
from city_model_structure.city import City
|
||||||
from city_model_structure.building import Building
|
from city_model_structure.building import Building
|
||||||
from city_model_structure.attributes.surface import Surface
|
from city_model_structure.attributes.surface import Surface
|
||||||
from helpers.geometry_helper import GeometryHelper
|
from helpers.geometry_helper import GeometryHelper
|
||||||
from city_model_structure.attributes.polygon import Polygon
|
from city_model_structure.attributes.polygon import Polygon
|
||||||
from city_model_structure.attributes.thermal_zone import ThermalZone
|
|
||||||
|
|
||||||
|
|
||||||
class CityGml:
|
class CityGml:
|
||||||
|
@ -70,10 +70,12 @@ class CityGml:
|
||||||
City model structure enriched with the geometry information
|
City model structure enriched with the geometry information
|
||||||
:return: City
|
:return: City
|
||||||
"""
|
"""
|
||||||
|
init = time.process_time_ns()
|
||||||
if self._city is None:
|
if self._city is None:
|
||||||
# todo: refactor this method to clearly choose the gml type
|
# todo: refactor this method to clearly choose the gml type
|
||||||
self._city = City(self._lower_corner, self._upper_corner, self._srs_name)
|
self._city = City(self._lower_corner, self._upper_corner, self._srs_name)
|
||||||
i = 0
|
i = 0
|
||||||
|
building_part = None
|
||||||
for o in self._gml['CityModel']['cityObjectMember']:
|
for o in self._gml['CityModel']['cityObjectMember']:
|
||||||
i += 1
|
i += 1
|
||||||
lod = 0
|
lod = 0
|
||||||
|
@ -98,20 +100,30 @@ class CityGml:
|
||||||
lod += 4
|
lod += 4
|
||||||
if 'lod4Solid' in o['Building']:
|
if 'lod4Solid' in o['Building']:
|
||||||
lod += 8
|
lod += 8
|
||||||
name = o['Building']['@id']
|
|
||||||
lod_terrain_str = 'lod' + str(lod) + 'TerrainIntersection'
|
lod_terrain_str = 'lod' + str(lod) + 'TerrainIntersection'
|
||||||
terrains = []
|
terrains = []
|
||||||
if lod_terrain_str in o['Building']:
|
if lod_terrain_str in o['Building']:
|
||||||
terrains = self._terrains(o, lod_terrain_str)
|
terrains = self._terrains(o, lod_terrain_str)
|
||||||
year_of_construction = None
|
|
||||||
function = None
|
function = None
|
||||||
|
year_of_construction = None
|
||||||
|
if 'consistsOfBuildingPart' in o['Building']:
|
||||||
|
if 'BuildingPart' in o['Building']['consistsOfBuildingPart']:
|
||||||
|
name = o['Building']['consistsOfBuildingPart']['BuildingPart']['name']
|
||||||
|
if 'yearOfConstruction' in o['Building']['consistsOfBuildingPart']['BuildingPart']:
|
||||||
|
year_of_construction = o['Building']['consistsOfBuildingPart']['BuildingPart']['yearOfConstruction']
|
||||||
|
if 'function' in o['Building']['consistsOfBuildingPart']['BuildingPart']:
|
||||||
|
function = o['Building']['consistsOfBuildingPart']['BuildingPart']['function']
|
||||||
|
|
||||||
|
else:
|
||||||
|
name = o['Building']['@id']
|
||||||
if 'yearOfConstruction' in o['Building']:
|
if 'yearOfConstruction' in o['Building']:
|
||||||
year_of_construction = o['Building']['yearOfConstruction']
|
year_of_construction = o['Building']['yearOfConstruction']
|
||||||
if 'function' in o['Building']:
|
if 'function' in o['Building']:
|
||||||
function = o['Building']['function']
|
function = o['Building']['function']
|
||||||
building = Building(name, lod, surfaces, year_of_construction, function, self._lower_corner, terrains)
|
self._city.add_city_object(Building(name, lod, surfaces, terrains, year_of_construction, function,
|
||||||
self._city.add_city_object(building)
|
self._lower_corner))
|
||||||
|
|
||||||
return self._city
|
return self._city
|
||||||
|
|
||||||
def _terrains(self, city_object, lod_terrain_str):
|
def _terrains(self, city_object, lod_terrain_str):
|
||||||
|
@ -147,6 +159,17 @@ class CityGml:
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _lod2_solid_multi_surface(o):
|
def _lod2_solid_multi_surface(o):
|
||||||
|
if 'boundedBy' in o['Building']['consistsOfBuildingPart']['BuildingPart']:
|
||||||
|
if 'RoofSurface' in o['Building']['consistsOfBuildingPart']['BuildingPart']['boundedBy']:
|
||||||
|
if o['Building']['consistsOfBuildingPart']['BuildingPart']['boundedBy']['RoofSurface']['lod2MultiSurface'] != 'None':
|
||||||
|
polygons = [Polygon(CityGml._remove_last_point(s['Polygon']['exterior']['LinearRing']['posList']))
|
||||||
|
for s in o['Building']['consistsOfBuildingPart']['BuildingPart']['boundedBy']['RoofSurface']['lod2MultiSurface']['MultiSurface']['surfaceMember']]
|
||||||
|
|
||||||
|
elif 'WallSurface' in o['Building']['consistsOfBuildingPart']['BuildingPart']['boundedBy']:
|
||||||
|
if o['Building']['consistsOfBuildingPart']['BuildingPart']['boundedBy']['WallSurface']['lod2MultiSurface'] != 'None':
|
||||||
|
polygons = [Polygon(CityGml._remove_last_point(s['Polygon']['exterior']['LinearRing']['posList']))
|
||||||
|
for s in o['Building']['consistsOfBuildingPart']['BuildingPart']['boundedBy']['WallSurface']['lod2MultiSurface']['MultiSurface']['surfaceMember']]
|
||||||
|
else:
|
||||||
polygons = [Polygon(CityGml._remove_last_point(s['Polygon']['exterior']['LinearRing']['posList']))
|
polygons = [Polygon(CityGml._remove_last_point(s['Polygon']['exterior']['LinearRing']['posList']))
|
||||||
for s in o['Building']['lod2MultiSurface']['MultiSurface']['surfaceMember']]
|
for s in o['Building']['lod2MultiSurface']['MultiSurface']['surfaceMember']]
|
||||||
return [Surface(p,p) for p in polygons]
|
return [Surface(p,p) for p in polygons]
|
||||||
|
@ -176,7 +199,7 @@ class CityGml:
|
||||||
if 'CompositeSurface' in s:
|
if 'CompositeSurface' in s:
|
||||||
surfaces = surfaces + CityGml._lod2_composite_surface(s)
|
surfaces = surfaces + CityGml._lod2_composite_surface(s)
|
||||||
else:
|
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
|
return surfaces
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
Loading…
Reference in New Issue
Block a user