如何从WKT格式的MultiPolygon中获取坐标数据
提取WKT格式MultiPolygon点位坐标的可行方案
方法1:基于Python Shapely库实现(工程场景优先推荐)
- 首先安装依赖库:
pip install shapely - 完整实现代码如下:
from shapely.wkt import loads from shapely.geometry import MultiPolygon # 替换为你自己的MultiPolygon WKT数据列表 wkt_list = [ "MULTIPOLYGON(((0 0, 0 1, 1 1, 1 0, 0 0)), ((2 2, 2 3, 3 3, 3 2, 2 2)))", ] all_points = [] for wkt_item in wkt_list: # 解析WKT为几何对象 geom = loads(wkt_item) # 仅处理MultiPolygon类型的几何数据 if not isinstance(geom, MultiPolygon): continue # 遍历MultiPolygon下的每个子Polygon for poly in geom.geoms: # 提取外环所有坐标点 for coord in poly.exterior.coords: all_points.append(coord) # 提取所有内环(孔洞)的坐标点 for interior_ring in poly.interiors: for coord in interior_ring.coords: all_points.append(coord) # 如需对坐标去重可执行以下代码 # all_points = list(set(all_points)) print(all_points)
这个方案会自动适配所有合法的WKT格式,无需手动处理嵌套括号、格式兼容等问题,容错率更高。
方法2:无第三方依赖的手动解析方案
如果不方便安装外部库,且你手里的WKT格式高度规范,可以直接用字符串处理逻辑提取坐标:
# 替换为你自己的MultiPolygon WKT数据列表 wkt_list = [ "MULTIPOLYGON(((0 0, 0 1, 1 1, 1 0, 0 0)), ((2 2, 2 3, 3 3, 3 2, 2 2)))", ] all_points = [] for wkt_item in wkt_list: # 移除WKT头部标识和所有括号 clean_content = wkt_item.replace("MULTIPOLYGON", "").replace("(", "").replace(")", "").strip() # 分割得到所有坐标对 coord_pairs = clean_content.split(",") for pair in coord_pairs: pair = pair.strip() if not pair: continue # 拆分x、y坐标并转为浮点型 x, y = map(float, pair.split()) all_points.append((x, y)) print(all_points)
注意:该方案仅适合格式标准无特殊字符的WKT数据,遇到不规范格式容易出现解析错误。
内容的提问来源于stack exchange,提问作者Alberto Sanmartin Martinez
相关产品推荐
相关产品推荐

