Toolbox: Get Bounding Box Polygon and centroid of a point cloud in Python
August 15, 2022
Let’s assume that we have a set of points, for example:
And we would like to get their Bounding Box and its centroid. How do we achieve it? We can use shapely
and GeoPandas
packages for it!
from typing import Union import geopandas as gpd from shapely.geometry import Polygon def points_to_bounding_box(points: Union[gpd.GeoSeries, gpd.GeoDataFrame]): """ Function transform a set of points into a Polygon with bounding box. Parameters ---------- points : gpd.GeoSeries Returns ------- bounding_box : Polygon """ bounds = points.total_bounds x_min, y_min, x_max, y_max = bounds polygon_tuples = [ (x_min, y_min), (x_max, y_min), (x_max, y_max), (x_min, y_max) ] polygon = Polygon(polygon_tuples) return polygon poly = points_to_bounding_box(centroids) print(poly)
POLYGON ((1305267.3457557156 210560.55098878054, 2198938.029283345 210560.55098878054, 2198938.029283345 1163583.8925663661, 1305267.3457557156 1163583.8925663661, 1305267.3457557156 210560.55098878054))
If we want to get a centroid, then we can use the centroid
attribute of Polygon
structure:
print(poly.centroid)
POINT (1752102.6875195305 687072.2217775733)
Plotting all together can be a little bit tricky – we must change simple geometries into GeoSeries
objects, and then we can plot our output:
bb = gpd.GeoSeries(poly) bb.set_crs(crs=centroids.crs) # Here we must set CRS of our baseline set of points! cent = bb.centroid # We can generate centroid from GeoPandas GeoSeries object # Plot base = bb.plot(color='white', edgecolor='gray', figsize=(12, 10)) centroids.plot(ax=base, marker='o', color='red', markersize=10); cent.plot(ax=base, marker='x', color='green', markersize=20) plt.show()
Subscribe
Login
0 Comments
Oldest