作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下是一些 Shapely 代码,用于创建三个正方形多边形:p1
、p2
和 p3
。 p2
紧邻 p1
的右侧,p3
紧邻其下方。
问题是 Shapely 告诉我 p1
和 p2
不要接触,而 p1
和 p3
做。我看不出这里出了什么问题。
from shapely.geometry import Polygon
DELTA = 0.2
def polygonFromPoint(p):
return Polygon([(p[0]-DELTA*0.5, p[1]-DELTA*0.5),
(p[0]-DELTA*0.5, p[1]+DELTA*0.5),
(p[0]+DELTA*0.5, p[1]+DELTA*0.5),
(p[0]+DELTA*0.5, p[1]-DELTA*0.5)])
p1 = polygonFromPoint([-118.8,35.0])
p2 = polygonFromPoint([-118.6,35.0])
p3 = polygonFromPoint([-118.8,34.8])
print(p1)
print(p2)
print(p3)
print(p1.overlaps(p2), p1.intersects(p2), p1.crosses(p2), p1.contains(p2),
p1.disjoint(p2), p1.touches(p2))
print(p1.overlaps(p3), p1.intersects(p3), p1.crosses(p3), p1.contains(p3),
p1.disjoint(p3), p1.touches(p3))
运行此命令会产生以下输出:
POLYGON ((-118.9 34.9, -118.9 35.1, -118.7 35.1, -118.7 34.9, -118.9 34.9))
POLYGON ((-118.7 34.9, -118.7 35.1, -118.5 35.1, -118.5 34.9, -118.7 34.9))
POLYGON ((-118.9 34.7, -118.9 34.9, -118.7 34.9, -118.7 34.7, -118.9 34.7))
False False False False True False
False True False False False True
这表明 Shapely 认为 p1
和 p2
不相交或接触,而 p1
和 p3
相交并接触。
编辑:正如 Gilles-Philippe Paillé 和其他人所说,这是多边形坐标的精度问题。使用以下调整可以解决这种情况下的问题:
def polygonFromPoint(p):
return Polygon( [(round(p[0]-DELTA*0.5,1), round(p[1]-DELTA*0.5,1)),
(round(p[0]-DELTA*0.5,1), round(p[1]+DELTA*0.5,1)),
(round(p[0]+DELTA*0.5,1), round(p[1]+DELTA*0.5,1)),
(round(p[0]+DELTA*0.5,1), round(p[1]-DELTA*0.5,1))] )
最佳答案
即使多边形的字符串表示形式显示坐标相同,底层浮点表示形式也并不完全是打印的内容,并且可能包含一些不精确的内容。使用您的坐标和相同的计算,我得到:
DELTA = 0.5
a = -118.6 - 0.2 * DELTA
b = -118.8 + 0.2 * DELTA
print(a)
print(b)
print(a <= b)
a = 35.0 - 0.2 * DELTA
b = 34.8 + 0.2 * DELTA
print(a)
print(b)
print(a <= b)
给出以下输出:
-118.69999999999999
-118.7
False
34.9
34.9
True
关于python - 应该接触的匀称多边形却没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59936859/
我已经保存了一些 Shapely Polygons 的字符串表示: 'POLYGON ((51.0 3.0, 51.3 3.61, 51.3 3.0, 51.0 3.0))' 是否有一些快速的方法可以
我试图找出两个多边形是否相互交叉。 “交叉”是指允许它们的外部相互接触,但它们的内部不能: 只允许下面两个最右边的解决方案: 我试过使用形状相交或交叉(以及其他一些),但找不到有效的内置函数(它们通常
我只是想使用演示代码。我在 Jupyter Notebook 中运行以下命令: 从 shapely.geometry 导入形状 这给了我以下内容: OSError
我是一名优秀的程序员,十分优秀!