我认为这是可能的。示例:我在一个地理数据框中有多边形,有些多边形具有相同的属性数据,它们只是具有相同数据的单独的多边形,每个多边形在gdf中都有自己的行。
我想将这些多边形组合成一个多面体,以便它们在gdf中仅占据1行。 这两个多边形重叠,我不想将它们溶解在一起,我希望它们保留2个单独的实体。
有单个多边形,我认为即使它们是单数形式,也必须将它们转换为多多边形,因为最终它们将被导出以供GIS软件使用,每个数据集一种几何类型。
我已经达到.dissolve(by='ID')
,但如上所述,我不想更改多边形的几何形状。
建议?
答案 0 :(得分:1)
您可以改编Geopandas的dissolve
来生成MultiPolygon
而不是一元联合。我改编的原始代码为here。
import geopandas as gpd
from shapely.geometry import Polygon, MultiPolygon
def groupby_multipoly(df, by, aggfunc="first"):
data = df.drop(labels=df.geometry.name, axis=1)
aggregated_data = data.groupby(by=by).agg(aggfunc)
# Process spatial component
def merge_geometries(block):
return MultiPolygon(block.values)
g = df.groupby(by=by, group_keys=False)[df.geometry.name].agg(
merge_geometries
)
# Aggregate
aggregated_geometry = gpd.GeoDataFrame(g, geometry=df.geometry.name, crs=df.crs)
# Recombine
aggregated = aggregated_geometry.join(aggregated_data)
return aggregated
df = gpd.GeoDataFrame(
{"a": [0, 0, 1], "b": [1, 2, 3]},
geometry=[
Polygon([(0, 0), (1, 0), (1, 1)]),
Polygon([(1, 0), (1, 0), (1, 1)]),
Polygon([(0, 2), (1, 0), (1, 1)]),
],
)
grouped = groupby_multipoly(df, by='a')
grouped
geometry b
a
0 MULTIPOLYGON (((0.00000 0.00000, 1.00000 0.000... 1
1 MULTIPOLYGON (((0.00000 2.00000, 1.00000 0.000... 3
如果将MultiPolygon
中的merge_geometries
更改为GeometryCollection
,则应该能够将任何类型的几何图形合并为一行。但这可能不受某些文件格式的支持。