我正在使用 .shp 文件中的形状数据,并使用 geopandas 将这些数据转换为带有
geometry(multipolygon, 4326) NULL
类型列的 postgresql 表的多边形。我遇到的问题是我不知道如何删除数据的 SRID=4326
部分。
例如,
SRID=4326;MULTIPOLYGON(((-113.82162 31.50802........
,但我只需要MULTIPOLYGON(((-113.82162 31.50802........
。我对 GeoPandas 相当陌生,任何帮助将不胜感激。这是必要的代码。
gdf = gpd.read_file(shapefile_path).to_crs(epsg=4326)
gdf['geometry'] = gdf['geometry'].apply(lambda x: MultiPolygon([x]) if isinstance(x, Polygon) else x)
gdf['geometry'] = gdf['geometry'].apply(lambda x: WKTElement(x.wkt, srid=4326))
gdf.to_sql(table_name, engine, schema='shapes', if_exists='append', index=False, method='multi', dtype={'geometry': Geometry('MULTIPOLYGON', srid=4326)})
如果我理解正确的话,您的 shapefile 中有一个列,其中包含要转换为
geopandas.GeoDataFrame
丢失 SRID=4326
部分的 WKT 数据。
类似的东西可以做到这一点(添加虚拟数据来操作):
import geopandas as gpd
from shapely import wkt
points = [{'WKT': "SRID=4326;MULTIPOLYGON(((2.35 48.85, 2.36 48.85, 2.36 48.86, 2.35 48.86, 2.35 48.85)), ((2.37 48.87, 2.38 48.87, 2.38 48.88, 2.37 48.88, 2.37 48.87)))"}]
gdf = gpd.GeoDataFrame(points)
gdf['WKT'] = gdf['WKT'].apply(lambda x: x.replace('SRID=4326;', ''))
gdf['WKT'] = gdf['WKT'].apply(wkt.loads)
gdf = gdf.set_geometry('WKT').set_crs('epsg:4326')