如何解决Geopandas:将单个多边形转换为多多边形,并保持单个多边形拓扑?
我认为这是可能的。示例:我在一个地理数据框中有多边形,有些多边形具有相同的属性数据,它们只是具有相同数据的单独的多边形,每个多边形在gdf中都有自己的行。
我想将这些多边形组合成一个多面体,以便它们在gdf中仅占据1行。 这两个多边形重叠,我不想将它们溶解在一起,我希望它们保留2个单独的实体。
有单个多边形,我认为即使它们是单数形式,也必须将它们转换为多多边形,因为最终它们将被导出以供GIS软件使用,每个数据集一种几何类型。
我已经达到.dissolve(by='ID')
,但如上所述,我不想更改多边形的几何形状。
建议?
解决方法
您可以改编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,1],"b": [1,2,3]},geometry=[
Polygon([(0,0),(1,1)]),Polygon([(1,Polygon([(0,2),],)
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
,则应该能够将任何类型的几何图形合并为一行。但这可能不受某些文件格式的支持。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。