first dissolve https://geopandas.org/en/stable/docs/reference/api/geopandas.GeoDataFrame.dissolve.html#geopandas.GeoDataFrame.dissolveGeoDataFrame 获取单个shapely.geometry.MultiPoint https://shapely.readthedocs.io/en/stable/manual.html#MultiPoint对象,然后找到质心:
In [8]: xyz.dissolve().centroid
Out[8]:
0 POINT (2756876.613 248561.582)
dtype: geometry
来自geopandas 文档 https://geopandas.org/en/stable/docs/user_guide/aggregation_with_dissolve.html:
solve() 可以被认为做了三件事:
- 它将给定组中的所有几何图形分解为单个几何特征(使用 unary_union 方法),并且
- 它使用 groupby.aggregate 将所有数据行聚合到一个组中,并且
- 它结合了这两个结果。
请注意,如果您的行具有重复的几何图形,则使用此方法计算的质心将不会适当地对重复项进行加权,因为溶解将在计算质心之前首先删除重复记录:
In [9]: gdf = gpd.GeoDataFrame({}, geometry=[
...: shapely.geometry.Point(0, 0),
...: shapely.geometry.Point(1, 1),
...: shapely.geometry.Point(1, 1),
...: ])
In [10]: gdf.dissolve().centroid
Out[10]:
0 POINT (0.50000 0.50000)
dtype: geometry
要准确计算包含重复项的点集合的质心,请创建一个shapely.geometry.MultiPoint
直接收藏:
In [11]: mp = shapely.geometry.MultiPoint(gdf.geometry)
In [12]: mp.centroid.xy
Out[12]: (array('d', [0.6666666666666666]), array('d', [0.6666666666666666]))