5

我想知道我的想法是否错误,或者这是一个错误:

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

在此处输入图像描述

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

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
4

1 回答 1

7

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

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

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

EPS = 1e-15
for i in ips:
    print(i.distance(poly) < EPS)
于 2015-11-24T17:26:30.687 回答