不应该触摸的多边形

问题描述 投票:0回答:1

这里有一些Shapely代码,可创建三个正方形多边形p1p2p3p2紧靠p1的右侧,p3紧挨着的下方。

问题是Shapely告诉我p1p2没碰,而p1p3碰了。我看不到这里出了什么问题。

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认为p1p2没有相交或接触,而p1p3没有相交和接触。

python geometry shapely
1个回答
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 
© www.soinside.com 2019 - 2024. All rights reserved.