1
給定一個GeopandasGeoDataFrame,我想提取GeoDataFrame的總邊界,由n
單位緩衝。確定一個GeoDataFrame的緩衝邊界
使用gdf.geometry.total_bounds
,我可以訪問整個DataFrame中組合幾何圖形的非緩衝邊界。我想到的一種方法是取這些邊界,將它們轉換爲Shapely多邊形,然後緩衝它。
給定一個GeopandasGeoDataFrame,我想提取GeoDataFrame的總邊界,由n
單位緩衝。確定一個GeoDataFrame的緩衝邊界
使用gdf.geometry.total_bounds
,我可以訪問整個DataFrame中組合幾何圖形的非緩衝邊界。我想到的一種方法是取這些邊界,將它們轉換爲Shapely多邊形,然後緩衝它。
我認爲你提到的方法(從總邊界創建一個多邊形,然後緩衝),確實是這樣做的最好方法。做轉換,你可以使用shapely.geometry.box
方便的功能:(但不知道這是否會永遠給完全相同的結果),你也可以先對象合併成一個使用cascaded_union
,緩衝
In [21]: s = geopandas.GeoSeries([Point(0,0), Point(0,5), Point(3,3)])
In [22]: s
Out[22]:
0 POINT (0 0)
1 POINT (0 5)
2 POINT (3 3)
dtype: object
In [23]: s.total_bounds
Out[23]: (0.0, 0.0, 3.0, 5.0)
In [24]: import shapely.geometry
In [25]: shapely.geometry.box(*s.total_bounds)
Out[25]: <shapely.geometry.polygon.Polygon at 0x7fac100d25f8>
In [26]: print(shapely.geometry.box(*s.total_bounds))
POLYGON ((3 0, 3 5, 0 5, 0 0, 3 0))
In [27]: shapely.geometry.box(*s.total_bounds).buffer(3)
Out[27]: <shapely.geometry.polygon.Polygon at 0x7fac10041a90>
In [28]: shapely.geometry.box(*s.total_bounds).buffer(3).bounds
Out[28]: (-3.0, -3.0, 6.0, 8.0)
或者是然後走出界限:
In [33]: s.cascaded_union
Out[33]: <shapely.geometry.multipoint.MultiPoint at 0x7fac100cd278>
In [34]: s.cascaded_union.buffer(3)
Out[34]: <shapely.geometry.polygon.Polygon at 0x7fac100cd048>
In [35]: s.cascaded_union.buffer(3).bounds
Out[35]: (-3.0, -3.0, 6.0, 8.0)
太棒了 - 謝謝!我沒有想過使用'shapely.geometry.box'方法。 – kuanb