在 geopandas 中转换(和保存)几何类型

converting (and saving) geometry type in geopandas

我有一个包含线性环的 GeoDataFrame,我想(有条件地)将其转换为多边形。听起来很简单:

from shapely.geometry import Polygon

def update_geom(row):
    if (row.aoi_type=='blocks') or (row.aoi_type=='locale'):
        return Polygon(row.geometry)
    else:
        return row.geometry

gdf['geometry']=gdf.apply(update_geom,axis=1)

这看起来效果很好 - 如果我检查 GeoDataFrame,我可以看到 LINESTRING(...) => POLYGON(...),并且 gdf.sample().iloc[0].geometry 正确地将形状绘制为笔记本中的多边形。

但这就是奇怪的地方。当我这样做时...

gdf.to_file('filename',index=False)
updated_gdf=gpd.read_file('filename')

updated_gdf 又回到了 LINESTRING()

想法?修复?

谢谢!

如果您要保存到 shapefile(从您的代码看来),您将面临文件格式的限制。 SHP 仅支持一种几何类型。因此,虽然 GeoDataFrame 可以在一个几何列中混合使用 LineStrings 和 Polygons,但 shapefile 不行,并且只允许您保留一个。

您可以尝试另一种格式(如 GeoJSON)或在保存到(两个)shapefile 之前根据几何类型将 GeoDataFrame 拆分为两个。