[英]Checking if LinearRing contains a point always returns False in Shapely
這是Shapely contains(point)的變體, 總是給出False ,而不是重復
我想確定某個圖形中的某個點是否由許多點創建,但是為了簡單起見,我進行了此測試,但失敗了。 我定義了一個2x2的正方形,第一個點應該在內部,第二個點應該在內部,但是兩個調用都返回False
import unittest
from shapely.geometry import LineString,Point,LinearRing
class TestTools(unittest.TestCase):
def test_isInside(self):
points = [
[0,0],
[2,0],
[2,2],
[0,2]
]
ring=LinearRing(points)
print(ring)
print(Point(1,2))
self.assertEqual(ring.contains(Point(1,1)),True)
self.assertEqual(ring.contains(Point(3,3)),False)
輸出是
LINEARRING (0 0, 2 0, 2 2, 0 2, 0 0)
POINT (1 2)
======================================================================
FAIL: test_isInside (__main__.TestTools)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_tools.py", line 17, in test_isInside
self.assertEqual(ring.contains(Point(1,1)),True)
AssertionError: False != True
所以很明顯我在做錯事(簡單?)。
根據Shapely文檔 ,幾何對象有三種基本類型:點,曲線和曲面。 LinearRing
是曲線類型的實現之一。
引用文檔:
曲線的內部集合由沿其長度的無限多個點組成(想象一個點在空間中拖動), 邊界集合由其兩個端點組成,而外部集合則由所有其他點組成。 曲線的拓撲尺寸為1。
這是關於object.contains(other)
方法的內容:
如果沒有其他點位於對象的外部並且其他內部的至少一個點位於對象的內部,則返回
True
。
因此,在您的情況下,點Point(1, 1)
, Point(3, 3)
不在曲線LinearRing([[0, 0], [2, 0], [2, 2], [0, 2]])
但在外部,在外部,因此您的測試返回False
。
為了檢查點是否被LinearRing
,在您的簡單情況下,您可以從這些環構造多邊形並執行相同的檢查:
>>> Polygon(ring).contains(Point(1, 1))
True
>>> Polygon(ring).contains(Point(3, 3))
False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.