匀称的交叉点与匀称的关系 - 不准确?

sal*_*sal 4 python geos shapely

我想知道是我想错了还是这是一个错误:

我有一个线串和一个多边形,我创建了线和多边形边界的交点

在此处输入图片说明

这些交点应该相交(至少接触)多边形的边界,对吗?

from shapely import geometry,wkt
line = geometry.LineString([(13.51039642756912, 52.598912814414675), (13.525173800277184, 52.60620240344557)])
poly = geometry.Polygon ([(13.52072838433517, 52.61735554606274), (13.52233276805985, 52.59511541819082), (13.51312087418833, 52.59394589806786),( 13.51526963068252, 52.60338701649216),( 13.51836560008325 ,52.6009395669487), (13.52072838433517, 52.61735554606274)])

ips = line.intersection(poly.boundary)
for i in ips:
    print i.touches(poly.boundary)  # should touch but it doesnt!!!!

>>>False
Run Code Online (Sandbox Code Playgroud)

Mik*_*e T 6

这不是错误,但这是一个常见问题。

如果没有精度模型,所有浮点计算都受到机器 epsilon 的限制。相交点是从每个几何体插入的,并且很少精确(除非您有直角)。所有像“触摸”这样的DE-9IM谓词目前都需要精确点头(除非我们有一个精确模型,这可能有一天会发生更新:使用JTS 拓扑套件进行测试,DE-9IM 谓词不使用精确模型,因此GEOS 克隆不太可能有任何不同的工作)。

更稳健的策略是测试两者之间的距离,如果它们相交,该距离应该小于机器 epsilon。例如:

EPS = 1e-15
for i in ips:
    print(i.distance(poly) < EPS)
Run Code Online (Sandbox Code Playgroud)