作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用 shapely 时,我遇到了一个奇怪的问题。有 2 个点 p1 和 p2,第一个属于多边形,第二个不属于。当我试图找到包含这 2 个点的 LineString 与多边形边界线的端点之间的交点时,我收到消息说没有找到交点。我想知道,这怎么可能?
from shapely.geometry import Polygon as SPolygon, Point, LineString
p1 = Point(5.414213562373095, 2.585786437626905)
p2 = Point(15.17279752753168, -7.172797527531679)
l = LineString([p1, p2])
l1 = LineString([(2, 2), (2, 6)])
l2 = LineString([(2, 6), (6, 6)])
l3 = LineString([(6, 6), (6, 2)])
l4 = LineString([(6, 2), (2, 2)])
sp = SPolygon([(2, 2), (2, 6), (6, 6), (6, 2)])
print "Polygon contains p1:", sp.contains(p1)
print "Polygon contains p2:", sp.contains(p2)
for i, line in enumerate((l1, l2, l3, l4)):
res = l.intersects(line)
print "Line {0} intersects l1: {1}".format(i, res)
这里是输出:
Polygon contains p1: True
Polygon contains p2: False
Line 0 intersects l1: False
Line 1 intersects l1: False
Line 2 intersects l1: False
Line 3 intersects l1: False
最佳答案
我将 l.intersects(line)
更改为 l.intersection(line)
并且我在
LINESTRING (6 6, 6 2) at Point (6, 2)
不确定为什么 .instersects()
表现不同。
然后我四舍五入p1和p2
p1 = Point(round(5.414213562373095, 2), round(2.585786437626905, 2))
p2 = Point(round(15.17279752753168, 2), round(-7.172797527531679, 2))
我在
有 2 个路口LINESTRING (6 6, 6 2) at POINT (6 2)
LINESTRING (6 2, 2 2) at POINT (6 2)
此修复也适用于 .intersects()
(2 个正确)
Shapely 对浮点精度有点敏感,我通常可以通过舍入来解决问题。尽管这对您来说可能无法接受。
关于python - 匀称的 LineString 交集是否错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55805121/
我已经保存了一些 Shapely Polygons 的字符串表示: 'POLYGON ((51.0 3.0, 51.3 3.61, 51.3 3.0, 51.0 3.0))' 是否有一些快速的方法可以
我试图找出两个多边形是否相互交叉。 “交叉”是指允许它们的外部相互接触,但它们的内部不能: 只允许下面两个最右边的解决方案: 我试过使用形状相交或交叉(以及其他一些),但找不到有效的内置函数(它们通常
我只是想使用演示代码。我在 Jupyter Notebook 中运行以下命令: 从 shapely.geometry 导入形状 这给了我以下内容: OSError
我是一名优秀的程序员,十分优秀!