Shapely判断Point是否在Polygon范围内时出现AssertionError如何解决
根因分析
- 你字典中存储的是WKT(Well-Known Text)格式的几何字符串,Shapely的
Polygon构造函数不直接接收该类字符串作为入参,你需要先将WKT字符串解析为Shapely可识别的几何对象,直接传入WKT字符串是触发本次断言错误的核心原因。 - 附加潜在问题:你调用函数时的入参顺序和函数定义不匹配,函数定义第一个参数是经度
long、第二个是纬度lat,但你的调用代码传入的是Lat在前Long在后,会导致后续点坐标匹配出错。
修复方案
首先引入Shapely的WKT解析工具,修改你的查询函数如下:
from shapely.wkt import loads as wkt_loads from shapely.geometry import Point def poly_lookup(long, lat, geom_dict): # 点对象只需要创建一次,放到循环外提升效率 point = Point(long, lat) for key, val in geom_dict.items(): # 用wkt_loads解析WKT字符串,直接得到Polygon对象 polygon = wkt_loads(val) if point.within(polygon): return key
调用时注意参数顺序,传入poly_lookup(Long, Lat, geom_dict)即可。
如果修改后仍然报错,可以单独打印出错的val值,排查WKT字符串本身是否存在格式问题:
- 多边形WKT首尾坐标是否完全一致(闭合要求)
- 坐标点数量是否至少3个
- 坐标格式、括号结构是否符合WKT规范
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

