【问题标题】:Shapely intersections vs shapely relationships - inexact?匀称的交叉点与匀称的关系 - 不准确?
【发布时间】:2015-11-24 01:02:33
【问题描述】:

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

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

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

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

【问题讨论】:

  • 既然您正在向控制台打印一些东西,您能否在您的问题中包含此输出?
  • 数字中的很多东西都是不精确的。但是,您真正想用这些信息做什么?您不能只假设交点非常接近边界 - 因为它们就是这样计算的?真的不需要检查,还是有?

标签: python shapely geos


【解决方案1】:

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

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

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

EPS = 1e-15
for i in ips:
    print(i.distance(poly) < EPS)

【讨论】:

  • 这种距离计算的计算强度如何?有朝一日,包括精确模型在内的“接触”实现会快得多吗?人们会使用什么算法呢? (只是出于好奇。)
  • 刚刚在 postgis 中检查了相同的内容(使用 GEOS 3.4.2):SELECT st_touches(st_geometryn(st_intersection(l,st_boundary(p)),1),st_boundary(p)) from ST_GeomFromText('LINESTRING(13.51039642756912 52.59891281441467, 13.52517380027718 52.60620240344557)',4326) l, ST_GeomFromText('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))',4326) p; 相同的结果
  • @Trilarion 我刚刚测试了精度模型是否适用于“触摸”(使用 JTS),但它并没有像我想象的那样工作。这种类型的谓词基于距离的度量实际上在大多数 GIS 软件的底层非常常见,并且它的计算密集度比“缓冲区”等其他操作要少得多。
猜你喜欢
  • 2013-01-05
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 2015-08-08
  • 2012-03-17
  • 2013-01-19
  • 2022-01-18
  • 2017-02-21
相关资源
最近更新 更多