Source code for trajectory_supervisor.helper_funcs.src.shapely_conversions

import numpy as np
import shapely.geometry


[docs]def extract_polygon_outline(shapely_geometry: shapely.geometry) -> np.ndarray: """ Extract the key outline coordinates of a shapely shape (including multi-shapes like MultiPolygon). The following types ares supported: * Polygon: The outline of the polygon is returned * MultiPolygon: The outline of the largest polygon is returned * GeometryCollection: The largest polygon in the set is returned, if no polygon is present 'None' is returned * LineString: 'None' is returned, since the shape is a line and does not host volume information For any other type, an error is raised. :param shapely_geometry: shapely-geometry of interest :returns: * **polygon_outline** - outline coordinates in form of a numpy array with columns x, y :Authors: * Tim Stahl <tim.stahl@tum.de> :Created on: 09.10.2020 """ polygon_outline = None if shapely_geometry.geom_type == 'Polygon': if not shapely_geometry.is_empty: polygon_outline = shapely_geometry.exterior.coords.xy elif shapely_geometry.geom_type == 'MultiPolygon': # extract largest polygon polygon_outline = max(shapely_geometry, key=lambda a: a.area).exterior.coords.xy elif shapely_geometry.geom_type == 'GeometryCollection': # extract polygons polygons = [] for geometry in shapely_geometry.geoms: if geometry.geom_type == 'Polygon' and not shapely_geometry.is_empty: polygons.append(geometry) # extract largest polygon if polygons: polygon_outline = max(polygons, key=lambda a: a.area).exterior.coords.xy elif shapely_geometry.geom_type == 'LineString': # if just line left, skip pass else: raise ValueError("Faced unsupported shape '" + str(shapely_geometry.geom_type) + "'!") # convert to numpy array if polygon_outline is not None: polygon_outline = np.column_stack((polygon_outline[0], polygon_outline[1])) return polygon_outline