small style correction
This commit is contained in:
parent
fae577deaa
commit
7e5ead2363
|
@ -5,30 +5,30 @@ Copyright © 2022 Concordia CERC group
|
|||
Project Coder: Milad Aghamohamadnia --- milad.aghamohamadnia@concordia.ca
|
||||
"""
|
||||
|
||||
import trimesh.exchange.load
|
||||
from trimesh import Scene
|
||||
import trimesh.geometry
|
||||
from shapely.geometry import Polygon as ShapelyPoly
|
||||
from shapely.geometry import Point
|
||||
import trimesh
|
||||
from pyproj import CRS
|
||||
from city_model_structure.city import City
|
||||
import trimesh.exchange.load
|
||||
import trimesh.geometry
|
||||
from shapely.geometry import Point
|
||||
from shapely.geometry import Polygon as ShapelyPoly
|
||||
from trimesh import Scene
|
||||
|
||||
from city_model_structure.attributes.polygon import Polygon
|
||||
from city_model_structure.building import Building
|
||||
from city_model_structure.building_demand.surface import Surface
|
||||
from city_model_structure.attributes.polygon import Polygon
|
||||
import numpy as np
|
||||
from city_model_structure.city import City
|
||||
|
||||
import helpers.constants as cte
|
||||
|
||||
|
||||
class GPandas:
|
||||
"""
|
||||
GeoPandas class
|
||||
"""
|
||||
|
||||
def __init__(self, gdataframe, srs_name='EPSG:26911'):
|
||||
"""_summary_
|
||||
|
||||
Arguments:
|
||||
gdataframe {Geopandas.Dataframe} -- input geometry data in geopandas table
|
||||
|
||||
Keyword Arguments:
|
||||
srs_name {str} -- coordinate system of coordinate system (default: {'EPSG:26911'})
|
||||
"""
|
||||
|
@ -36,9 +36,9 @@ class GPandas:
|
|||
self._city = None
|
||||
self._scene = gdataframe
|
||||
self._scene = self._scene.to_crs(self._srs_name)
|
||||
minx, miny, maxx, maxy = self._scene.total_bounds
|
||||
self._lower_corner = [minx, miny, 0]
|
||||
self._upper_corner = [maxx, maxy, 0]
|
||||
min_x, min_y, max_x, max_y = self._scene.total_bounds
|
||||
self._lower_corner = [min_x, min_y, 0]
|
||||
self._upper_corner = [max_x, max_y, 0]
|
||||
|
||||
@property
|
||||
def scene(self) -> Scene:
|
||||
|
@ -55,7 +55,6 @@ class GPandas:
|
|||
if self._city is None:
|
||||
self._city = City(self._lower_corner, self._upper_corner, self._srs_name)
|
||||
for ix, bldg in self._scene.iterrows():
|
||||
polygon = bldg['geometry']
|
||||
geom = bldg.geom
|
||||
polygon = ShapelyPoly(geom['coordinates'][0])
|
||||
height = float(bldg['height_mean'])
|
||||
|
@ -66,10 +65,9 @@ class GPandas:
|
|||
name = str(ix)
|
||||
lod = 1
|
||||
if year_of_construction > 2000:
|
||||
function = 'residential'
|
||||
function = cte.RESIDENTIAL
|
||||
else:
|
||||
function = 'industry'
|
||||
average_storey_height = 3
|
||||
function = cte.INDUSTRY
|
||||
|
||||
surfaces = []
|
||||
face_normal = building_mesh.face_normals
|
||||
|
@ -79,7 +77,7 @@ class GPandas:
|
|||
points.append(building_mesh.vertices[vertex_index])
|
||||
solid_polygon = Polygon(points)
|
||||
perimeter_polygon = solid_polygon
|
||||
s_type = 'Ground' if face_normal[ix][2]==-1 else ('Roof' if face_normal[ix][2]==1 else 'Wall')
|
||||
s_type = cte.GROUND if face_normal[ix][2] == -1 else (cte.ROOF if face_normal[ix][2] == 1 else cte.WALL)
|
||||
surface = Surface(solid_polygon, perimeter_polygon, surface_type=s_type)
|
||||
surfaces.append(surface)
|
||||
building = Building(name, lod, surfaces, year_of_construction, function, self._lower_corner, terrains=None)
|
||||
|
@ -87,10 +85,9 @@ class GPandas:
|
|||
return self._city
|
||||
|
||||
@staticmethod
|
||||
def resize_polygon(poly, factor=0.10, expand=False):
|
||||
def resize_polygon(poly, factor=0.10, expand=False) -> ShapelyPoly:
|
||||
"""
|
||||
returns the shapely polygon which is smaller or bigger by passed factor.
|
||||
|
||||
Arguments:
|
||||
poly {shapely.geometry.Polygon} -- an input geometry in shapely polygon format
|
||||
|
||||
|
@ -106,7 +103,6 @@ class GPandas:
|
|||
x_center = 0.5 * min(xs) + 0.5 * max(xs)
|
||||
y_center = 0.5 * min(ys) + 0.5 * max(ys)
|
||||
min_corner = Point(min(xs), min(ys))
|
||||
max_corner = Point(max(xs), max(ys))
|
||||
center = Point(x_center, y_center)
|
||||
shrink_distance = center.distance(min_corner) * factor
|
||||
|
||||
|
@ -115,4 +111,3 @@ class GPandas:
|
|||
else:
|
||||
poly_resized = poly.buffer(-shrink_distance) # shrink
|
||||
return poly_resized
|
||||
|
||||
|
|
|
@ -16,3 +16,4 @@ rhino3dm==7.7.0
|
|||
scipy
|
||||
PyYAML
|
||||
pyecore==0.12.2
|
||||
shapely
|
|
@ -147,6 +147,18 @@ class TestGeometryFactory(TestCase):
|
|||
for building in city.buildings:
|
||||
self._check_surfaces(building)
|
||||
|
||||
def test_import_geopandas(self):
|
||||
"""
|
||||
Test geopandas import
|
||||
"""
|
||||
file = 'kelowna.obj'
|
||||
city = self._get_obj(file)
|
||||
self.assertIsNotNone(city, 'city is none')
|
||||
self.assertTrue(len(city.buildings) == 1)
|
||||
self._check_buildings(city)
|
||||
for building in city.buildings:
|
||||
self._check_surfaces(building)
|
||||
|
||||
# osm
|
||||
def test_subway(self):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue
Block a user