2016-08-25 25 views
5

Jak mogę sprawdzić, czy wielobok jest tak naprawdę wielopoziomem? Próbowałem:pyton zgrabny: sprawdź, czy wielokąt jest wielokątem

if len(polygon)>1: 

ale wtedy pojawia się błąd:

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

próbowałam Nill, None i innych, nic nie działało.

+0

Należy sprawdzić w instrukcji. Możesz przeczytać o 'klasie MultiPolygon' tutaj: http://toblerity.org/shapely/manual.html#collections-of-polygons –

+0

Działa to tylko jeśli twoja zmienna jest multipolygonem. Jeśli tak nie jest - dostaniesz ten błąd. Właśnie dlatego chcę sprawdzić, czy moja zmienna jest wielokątem czy multipolygonem. – Yair

Odpowiedz

4

Ok, to pracował dla mnie:

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

wyjść z:

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

w przypadku wielokąta, i:

type = <class 'shapely.geometry.multipolygon.MultiPolygon'> 

w przypadku multipolygon.

Aby sprawdzić, czy zmienna jest wielokąt lub multypolygon Zrobiłem to:

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

Warto zauważyć, że nie powie Ci, ile pierścieni ma multipoligon. Wielokąty mogą mieć tylko jeden zewnętrzny pierścień. To może nie mieć znaczenia dla twojego przypadku użycia. – jpmc26

3

Użyj ciąg object.geom_type (patrz general attributes and methods).

Na przykład:

if poly.geom_type == 'MultiPolygon': 
    # do multipolygon things. 
elif poly.geom_type == 'Polygon': 
    # do polygon things. 
else: 
    # raise IOError('Shape is not a polygon.')