从Shapefile生成多面WKT遇问题:仅输出首个多边形
解决多多边形Shapefile生成全量WKT的问题
你的代码只输出第一个多边形的原因很明确:gpd_multipolygon['geometry'][0]是直接取了GeoDataFrame里第一个索引位置的几何对象,自然只能拿到单个多边形。
下面给两种实用的解决方式:
方式1:逐个输出所有多边形的WKT
如果需要保留每个多边形的独立WKT(比如单独处理每个要素),可以遍历整个几何列:
from shapely import wkt import geopandas as gpd # 读取Shapefile gdf = gpd.read_file("shapefile.shp") # 遍历所有几何元素,生成WKT列表 all_polygon_wkt = [wkt.dumps(geom) for geom in gdf['geometry']] # 按需使用,比如打印每个结果 for i, wkt_str in enumerate(all_polygon_wkt): print(f"第{i+1}个多边形WKT:\n{wkt_str}\n")
方式2:合并为MultiPolygon输出WKT
如果需要把所有独立多边形打包成一个MultiPolygon对象再输出WKT(作为一个整体要素),可以用shapely的MultiPolygon类合并:
from shapely import wkt from shapely.geometry import MultiPolygon import geopandas as gpd # 读取Shapefile gdf = gpd.read_file("shapefile.shp") # 合并所有多边形为MultiPolygon combined_multipolygon = MultiPolygon(list(gdf['geometry'])) # 生成整体WKT multipolygon_wkt = wkt.dumps(combined_multipolygon) print("合并后的MultiPolygon WKT:\n", multipolygon_wkt)
注意:如果Shapefile里本身就有
MultiPolygon类型的要素,第二种方式会把所有要素(包括已有的MultiPolygon)进一步合并成一个更大的MultiPolygon,按需选择即可。
内容的提问来源于stack exchange,提问作者Larry
相关产品推荐
相关产品推荐

