在Shapely中检查多边形是否为多重多边形

29

如何检查多边形实体是否确实是多重多边形?我尝试过:

if len(polygon) > 1:

但是却收到了错误:

TypeError: object of type 'Polygon' has no len()

我尝试过NillNone等,都没用。


你应该查看手册。你可以在这里阅读关于class MultiPolygon的内容:http://toblerity.org/shapely/manual.html#collections-of-polygons - Alessandro Trinca Tornidor
这仅适用于您的变量为多边形的情况。如果不是,则会出现错误。这就是我想检查我的变量是多边形还是多重多边形的原因。 - Yair
3个回答

56
使用object.geom_type字符串(详见一般属性和方法)。
例如:
if poly.geom_type == 'MultiPolygon':
    # do multipolygon things.
elif poly.geom_type == 'Polygon':
    # do polygon things.
else:
    # raise IOError('Shape is not a polygon.')

7

好的,这个方法对我有效:

print ('type = ', type(poly))

使用以下输出:

type =  <class 'shapely.geometry.polygon.Polygon'>

在多边形的情况下,使用以下方法:
type =  <class 'shapely.geometry.multipolygon.MultiPolygon'>

在多边形的情况下,进行以下操作。

要检查一个变量是多边形还是多边形集合,可以这样做:

if (isinstance(poly, shapely.geometry.multipolygon.MultiPolygon)):
    code...

值得注意的是,这并不会告诉您复合多边形有多少个环。一个复合多边形可能只有一个外环。但这对于您的使用情况可能没有影响。 - jpmc26
使用您的isinstance()代码,我得到了:NameError: name 'shapely' is not defined - jane
1
@jane 这意味着你没有导入 shapely(或者没有正确导入)。请在你的代码顶部添加 import shapely - Fee

0

你可以简单地做到这一点。

import shapely.geometry.multipolygon as sh

if isinstance(polygon, sh.MultiPolygon):
    print('yes I am')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接