在 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 拆分为两个。
我有一个包含线性环的 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 拆分为两个。