我正在尝试使用
df.to_file('result.geojson', driver="GeoJSON")
将以下包含列(几何、面积、质心和边界)的 GeoDataFrame 保存到 json 文件:
但是,我收到以下错误,因为我有质心和边界列。
TypeError: Cannot interpret '<geopandas.array.GeometryDtype object at 0x7fb7fff86940>'
作为数据类型。
当只有几何列和面积列时,这非常有效。
此外,当我尝试将其保存为 csv 文件,然后将其读回为 geopandas 文件时,我只能将几何图形转换为数据类型几何图形。但是,质心和边界显示为对象数据类型。如何将它们转换为几何数据类型?
import geopandas as gpd
import pandas as pd
import shapely.geometry
from pathlib import Path
gdf = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))
# derive columns in question...
gdf["boundary"] = gdf["geometry"].apply(lambda p: p.boundary )
gdf["centroid"] = gdf["geometry"].apply(lambda p: p.centroid )
gdf["area"] = gdf["geometry"].apply(lambda p: p.area )
# save as CSV shapely.wkt.dumps will be implicitly used
gdf.to_csv(Path.cwd().joinpath("SO_geom.csv"), index=False)
# load encoded dataframe
df = pd.read_csv(Path.cwd().joinpath("SO_geom.csv"))
# decode geometry columns as strings back into shapely objects
for c in ["geometry","boundary","centroid"]:
df[c] = df[c].apply(shapely.wkt.loads)
# finally reconstruct geodataframe
gdf = gpd.GeoDataFrame(df)
# show it has worked
gdf.plot()
gpd.GeoSeries(gdf["boundary"]).plot()
gpd.GeoSeries(gdf["centroid"]).plot()