max_x, max_y, max_z (and min) changed to envelope_upper_corner (and lower)
This commit is contained in:
parent
48dfbb8c1f
commit
bf0cda131e
|
@ -23,26 +23,19 @@ class Surface:
|
||||||
self._name = name
|
self._name = name
|
||||||
self._swr = swr
|
self._swr = swr
|
||||||
self._points = None
|
self._points = None
|
||||||
self._points_list = None
|
|
||||||
self._holes_points = None
|
self._holes_points = None
|
||||||
self._holes_points_list = None
|
|
||||||
self._perimeter_points = None
|
self._perimeter_points = None
|
||||||
self._perimeter_points_list = None
|
|
||||||
self._azimuth = None
|
self._azimuth = None
|
||||||
self._inclination = None
|
self._inclination = None
|
||||||
self._area_above_ground = None
|
self._area_above_ground = None
|
||||||
self._area_below_ground = None
|
self._area_below_ground = None
|
||||||
self._parent = None
|
self._parent = None
|
||||||
self._min_x = None
|
self._envelope_lower_corner = None
|
||||||
self._min_y = None
|
self._envelope_upper_corner = None
|
||||||
self._min_z = None
|
|
||||||
self._max_x = None
|
|
||||||
self._max_y = None
|
|
||||||
self._max_z = None
|
|
||||||
self._shared_surfaces = []
|
self._shared_surfaces = []
|
||||||
self._global_irradiance = dict()
|
self._global_irradiance = dict()
|
||||||
self._perimeter_polygon = None
|
self._perimeter_polygon = None
|
||||||
self._hole_polygons = None
|
self._holes_polygons = None
|
||||||
self._solid_polygons = None
|
self._solid_polygons = None
|
||||||
|
|
||||||
def parent(self, parent, surface_id):
|
def parent(self, parent, surface_id):
|
||||||
|
@ -138,42 +131,6 @@ class Surface:
|
||||||
self._perimeter_points = pv
|
self._perimeter_points = pv
|
||||||
return self._perimeter_points
|
return self._perimeter_points
|
||||||
|
|
||||||
@property
|
|
||||||
def points_list(self) -> np.ndarray:
|
|
||||||
"""
|
|
||||||
Solid surface point coordinates list [x, y, z, x, y, z,...]
|
|
||||||
:return: np.ndarray
|
|
||||||
"""
|
|
||||||
if self._points_list is None:
|
|
||||||
s = self.points
|
|
||||||
self._points_list = np.reshape(s, len(s) * 3)
|
|
||||||
return self._points_list
|
|
||||||
|
|
||||||
@property
|
|
||||||
def holes_points_list(self) -> np.ndarray:
|
|
||||||
"""
|
|
||||||
Holes surfaces point coordinates list [x, y, z, x, y, z,...]
|
|
||||||
:return: np.ndarray
|
|
||||||
"""
|
|
||||||
if self._holes_coordinates is not None:
|
|
||||||
self._holes_points_list = np.array([])
|
|
||||||
for hole_points in self.holes_points:
|
|
||||||
s = hole_points
|
|
||||||
hole_points_list = np.reshape(s, len(s) * 3)
|
|
||||||
np.add(self._holes_points_list, hole_points_list)
|
|
||||||
return self._holes_points_list
|
|
||||||
|
|
||||||
@property
|
|
||||||
def perimeter_points_list(self) -> np.ndarray:
|
|
||||||
"""
|
|
||||||
Solid surface point coordinates list [x, y, z, x, y, z,...]
|
|
||||||
:return: np.ndarray
|
|
||||||
"""
|
|
||||||
if self._perimeter_points_list is None:
|
|
||||||
s = self.perimeter_points
|
|
||||||
self._perimeter_points_list = np.reshape(s, len(s) * 3)
|
|
||||||
return self._perimeter_points_list
|
|
||||||
|
|
||||||
def _max_coord(self, axis):
|
def _max_coord(self, axis):
|
||||||
if axis == 'x':
|
if axis == 'x':
|
||||||
axis = 0
|
axis = 0
|
||||||
|
@ -205,64 +162,16 @@ class Surface:
|
||||||
return min_coordinate
|
return min_coordinate
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def max_x(self):
|
def envelope_lower_corner(self):
|
||||||
"""
|
if self._envelope_lower_corner is None:
|
||||||
Surface maximal x value
|
self._envelope_lower_corner = [self._min_coord('x'), self._min_coord('y'), self._min_coord('z')]
|
||||||
:return: float
|
return self._envelope_lower_corner
|
||||||
"""
|
|
||||||
if self._max_x is None:
|
|
||||||
self._max_x = self._max_coord('x')
|
|
||||||
return self._max_x
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def max_y(self):
|
def envelope_upper_corner(self):
|
||||||
"""
|
if self._envelope_upper_corner is None:
|
||||||
Surface maximal y value
|
self._envelope_upper_corner = [self._max_coord('x'), self._max_coord('y'), self._max_coord('z')]
|
||||||
:return: float
|
return self._envelope_upper_corner
|
||||||
"""
|
|
||||||
if self._max_y is None:
|
|
||||||
self._max_y = self._max_coord('y')
|
|
||||||
return self._max_y
|
|
||||||
|
|
||||||
@property
|
|
||||||
def max_z(self):
|
|
||||||
"""
|
|
||||||
Surface maximal z value
|
|
||||||
:return: float
|
|
||||||
"""
|
|
||||||
if self._max_z is None:
|
|
||||||
self._max_z = self._max_coord('z')
|
|
||||||
return self._max_z
|
|
||||||
|
|
||||||
@property
|
|
||||||
def min_x(self):
|
|
||||||
"""
|
|
||||||
Surface minimal x value
|
|
||||||
:return: float
|
|
||||||
"""
|
|
||||||
if self._min_x is None:
|
|
||||||
self._min_x = self._min_coord('x')
|
|
||||||
return self._min_x
|
|
||||||
|
|
||||||
@property
|
|
||||||
def min_y(self):
|
|
||||||
"""
|
|
||||||
Surface minimal y value
|
|
||||||
:return: float
|
|
||||||
"""
|
|
||||||
if self._min_y is None:
|
|
||||||
self._min_y = self._min_coord('y')
|
|
||||||
return self._min_y
|
|
||||||
|
|
||||||
@property
|
|
||||||
def min_z(self):
|
|
||||||
"""
|
|
||||||
Surface minimal z value
|
|
||||||
:return: float
|
|
||||||
"""
|
|
||||||
if self._min_z is None:
|
|
||||||
self._min_z = self._min_coord('z')
|
|
||||||
return self._min_z
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def area_above_ground(self):
|
def area_above_ground(self):
|
||||||
|
@ -378,7 +287,7 @@ class Surface:
|
||||||
return self._solid_polygons
|
return self._solid_polygons
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def hole_polygons(self) -> [Polygon]:
|
def holes_polygons(self) -> [Polygon]:
|
||||||
"""
|
"""
|
||||||
hole surfaces, a list of hole polygons found in the surface
|
hole surfaces, a list of hole polygons found in the surface
|
||||||
:return: None, [] or [Polygon]
|
:return: None, [] or [Polygon]
|
||||||
|
@ -386,11 +295,11 @@ class Surface:
|
||||||
[] -> no holes in the surface
|
[] -> no holes in the surface
|
||||||
[Polygon] -> one or more holes in the surface
|
[Polygon] -> one or more holes in the surface
|
||||||
"""
|
"""
|
||||||
if self._hole_polygons is None:
|
if self._holes_polygons is None:
|
||||||
if self.holes_points is None:
|
if self.holes_points is None:
|
||||||
self._hole_polygons = None
|
self._holes_polygons = None
|
||||||
else:
|
else:
|
||||||
self._hole_polygons = []
|
self._holes_polygons = []
|
||||||
for hole_points in self.holes_points:
|
for hole_points in self.holes_points:
|
||||||
self._hole_polygons.append(Polygon(hole_points))
|
self._holes_polygons.append(Polygon(hole_points))
|
||||||
return self._hole_polygons
|
return self._holes_polygons
|
||||||
|
|
|
@ -53,9 +53,9 @@ class Building(CityObject):
|
||||||
for t_zones in self._thermal_zones:
|
for t_zones in self._thermal_zones:
|
||||||
t_zones.bounded = [ThermalBoundary(s, [t_zones]) for s in t_zones.surfaces]
|
t_zones.bounded = [ThermalBoundary(s, [t_zones]) for s in t_zones.surfaces]
|
||||||
for surface in self.surfaces:
|
for surface in self.surfaces:
|
||||||
self._min_x = min(self._min_x, surface.min_x)
|
self._min_x = min(self._min_x, surface.envelope_lower_corner[0])
|
||||||
self._min_y = min(self._min_y, surface.min_y)
|
self._min_y = min(self._min_y, surface.envelope_lower_corner[1])
|
||||||
self._min_z = min(self._min_z, surface.min_z)
|
self._min_z = min(self._min_z, surface.envelope_lower_corner[2])
|
||||||
if surface.type == 'Ground':
|
if surface.type == 'Ground':
|
||||||
self._grounds.append(surface)
|
self._grounds.append(surface)
|
||||||
elif surface.type == 'Wall':
|
elif surface.type == 'Wall':
|
||||||
|
|
|
@ -67,8 +67,8 @@ class CityObject:
|
||||||
polygons = []
|
polygons = []
|
||||||
for surface in self.surfaces:
|
for surface in self.surfaces:
|
||||||
polygons.append(surface.solid_polygon)
|
polygons.append(surface.solid_polygon)
|
||||||
if surface.hole_polygons is not None:
|
if surface.holes_polygons is not None:
|
||||||
for hole_polygon in surface.hole_polygons:
|
for hole_polygon in surface.holes_polygons:
|
||||||
polygons.append(hole_polygon)
|
polygons.append(hole_polygon)
|
||||||
self._detailed_polyhedron = Polyhedron(polygons)
|
self._detailed_polyhedron = Polyhedron(polygons)
|
||||||
return self._detailed_polyhedron
|
return self._detailed_polyhedron
|
||||||
|
|
|
@ -210,8 +210,10 @@ class EnergyAde:
|
||||||
'gml:boundedBy': {
|
'gml:boundedBy': {
|
||||||
'gml:Envelope': {
|
'gml:Envelope': {
|
||||||
'@srsName': city.srs_name,
|
'@srsName': city.srs_name,
|
||||||
'gml:lowerCorner': f'{surface.min_x} {surface.min_y} {surface.min_z}',
|
'gml:lowerCorner': f'{surface.envelope_lower_corner[0]} {surface.envelope_lower_corner[1]}'
|
||||||
'gml:upperCorner': f'{surface.max_x} {surface.max_y} {surface.max_z}'
|
f' {surface.envelope_lower_corner[2]}',
|
||||||
|
'gml:upperCorner': f'{surface.envelope_upper_corner[0]} {surface.envelope_upper_corner[1]}'
|
||||||
|
f' {surface.envelope_upper_corner[2]}'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'bldg:lod2MultiSurface': {
|
'bldg:lod2MultiSurface': {
|
||||||
|
@ -228,7 +230,8 @@ class EnergyAde:
|
||||||
'gml:posList': {
|
'gml:posList': {
|
||||||
'@srsDimension': '3',
|
'@srsDimension': '3',
|
||||||
'@count': len(surface.points) + 1,
|
'@count': len(surface.points) + 1,
|
||||||
'#text': f'{" ".join(map(str, surface.points_list))} {" ".join(map(str, surface.points[0]))}'
|
'#text': f'{" ".join(map(str, surface.solid_polygon.points_list))} '
|
||||||
|
f'{" ".join(map(str, surface.points[0]))}'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -340,7 +343,7 @@ class EnergyAde:
|
||||||
'gml:posList': {
|
'gml:posList': {
|
||||||
'@srsDimension': '3',
|
'@srsDimension': '3',
|
||||||
'@count': len(thermal_boundary.surface.points) + 1,
|
'@count': len(thermal_boundary.surface.points) + 1,
|
||||||
'#text': f'{" ".join(map(str, thermal_boundary.surface.points_list))} '
|
'#text': f'{" ".join(map(str, thermal_boundary.surface.solid_polygon.points_list))} '
|
||||||
f'{" ".join(map(str, thermal_boundary.surface.points[0]))}'
|
f'{" ".join(map(str, thermal_boundary.surface.points[0]))}'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,12 +120,11 @@ class TestGeometryFactory(TestCase):
|
||||||
self.assertIsNotNone(surface.perimeter_points_list, 'surface perimeter_points_list is none')
|
self.assertIsNotNone(surface.perimeter_points_list, 'surface perimeter_points_list is none')
|
||||||
self.assertIsNotNone(surface.global_irradiance, 'monthly irradiance is none')
|
self.assertIsNotNone(surface.global_irradiance, 'monthly irradiance is none')
|
||||||
self.assertIsNone(surface.swr, 'surface swr is not none')
|
self.assertIsNone(surface.swr, 'surface swr is not none')
|
||||||
self.assertIsNotNone(surface.min_x, 'surface min_x is none')
|
self.assertIsNotNone(surface.envelope_lower_corner, 'surface envelope_lower_corner is none')
|
||||||
self.assertIsNotNone(surface.min_y, 'surface min_y is none')
|
self.assertIsNotNone(surface.envelope_upper_corner, 'surface envelope_upper_corner is none')
|
||||||
self.assertIsNotNone(surface.min_z, 'surface min_z is none')
|
|
||||||
self.assertIsNotNone(surface.area_above_ground, 'surface area_above_ground is none')
|
self.assertIsNotNone(surface.area_above_ground, 'surface area_above_ground is none')
|
||||||
self.assertIsNotNone(surface.perimeter_polygon, 'surface perimeter_polygon is none')
|
self.assertIsNotNone(surface.perimeter_polygon, 'surface perimeter_polygon is none')
|
||||||
self.assertIsNone(surface.hole_polygons, 'surface hole_polygons is not none')
|
self.assertIsNone(surface.holes_polygons, 'surface hole_polygons is not none')
|
||||||
self.assertIsNotNone(surface.solid_polygon, 'surface solid_polygon is none')
|
self.assertIsNotNone(surface.solid_polygon, 'surface solid_polygon is none')
|
||||||
|
|
||||||
def test_citygml_thermal_zone(self):
|
def test_citygml_thermal_zone(self):
|
||||||
|
@ -235,10 +234,10 @@ class TestGeometryFactory(TestCase):
|
||||||
print(surface.holes_points)
|
print(surface.holes_points)
|
||||||
print('perimeter:', surface.perimeter_points)
|
print('perimeter:', surface.perimeter_points)
|
||||||
for i in range(0, len(holes_coordinates)):
|
for i in range(0, len(holes_coordinates)):
|
||||||
print(surface.hole_polygons[i].area)
|
print(surface.holes_polygons[i].area)
|
||||||
print('perimeter:', surface.perimeter_polygon.area)
|
print('perimeter:', surface.perimeter_polygon.area)
|
||||||
print('solid:', surface.solid_polygon.area)
|
print('solid:', surface.solid_polygon.area)
|
||||||
for i in range(0, len(holes_coordinates)):
|
for i in range(0, len(holes_coordinates)):
|
||||||
print(surface.hole_polygons[i].normal)
|
print(surface.holes_polygons[i].normal)
|
||||||
print('perimeter:', surface.perimeter_polygon.normal)
|
print('perimeter:', surface.perimeter_polygon.normal)
|
||||||
print('solid:', surface.solid_polygon.normal)
|
print('solid:', surface.solid_polygon.normal)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user