经shapely.wkt.loads转换后的多边形是否与原多边形为同一对象
问题原因与解决方案
1. 为什么new in liste返回no
Python中in运算符的匹配逻辑:对于自定义类实例,默认优先做身份匹配(即判断两个对象是否指向同一块内存地址),部分类会重写__eq__方法实现值匹配,但你的场景存在两个导致匹配失败的原因:
- 你通过WKT序列化再反序列化得到的
new是全新的Polygon实例,和原列表liste中的第一个对象内存地址完全不同 - Shapely的
==虽然重写为几何值匹配,但WKT序列化过程默认会截断原始坐标的存储精度,导致反序列化后的几何值和原对象存在极细微的数值差异,也会导致值匹配失败
你可以用以下方式判断几何相等,替代in运算符:
# 精确几何匹配,可调整tolerance参数适配精度误差 print('yes' if any(new.equals_exact(geom, tolerance=1e-9) for geom in liste) else 'no')
2. object at 0x7f8f8f24a880的含义
这是Python对象的虚拟内存地址,代表该实例在当前运行进程的内存空间中的存储位置。每生成一个新的实例(哪怕几何值完全相同),都会分配独立的内存地址,所以你反序列化得到的新对象地址和原列表中的对象地址必然不同。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

