2015-05-23 68 views
4

文檔字符串說:Python,Shapely:Polygon.contains和Polygon.within有什麼區別?

Polygon.contains返回true如果幾何包含其他,否則返回False

Polygon.within返回true幾何中的其他,否則返回False

他們如何不同?

+0

除了下面的答案,還要記住,根據您目前正在做的事情,從一個或另一個幾何體進行檢查有時會更方便。例如如果和a一起工作,那麼你會打電話給一個,而如果你和b一起工作,那麼你會稱之爲反過來。 – shongololo

回答

9

它們是相反的關係:A包含BBA內。

>>> A.contains(B) 
    True 
    >>> B.within(A) 
    True 

    +----------------------------------+ 
    |         | 
    |   +----------+    | 
    |   |   |    | 
    |   |   |    | 
    |   |   |    | 
    |   |   |    | 
    |   |   |    | 
    |   | B  |    | 
    |   |   |    | 
    |   +----------+    | 
    |         | 
    |         | 
    | A        | 
    |         | 
    +----------------------------------+ 
+0

如果A重疊B會發生什麼? 爲什麼有兩個功能?是不是一個足夠? – Sounak

+0

我認爲這兩者都不是真的,因爲這兩個形狀都不在其他範圍內。如果你的意思是A和B本質上是相同的形狀,那麼兩者都是錯誤的。從['contains'](http://toblerity.org/shapely/manual.html#object.contains)(重點是mine)手冊:「如果對象的內部包含另一個對象的邊界和內部,則返回True, *「他們的界限根本不觸及*」 – chepner

+0

一個就足夠了 - 你可以簡單地定義'within(self,obj)'return obj.contains(self)' - 但它可能更易於使用一個或另一個,取決於上下文。 – chepner