Untuk mendapatkan koordinat eksterior, saya perlu mengubah MultiPolygon menjadi Polygon. Saya melakukannya seperti ini:
if poly.geometry.type == 'Polygon':
x, y = poly.geometry.exterior.xy
elif poly.geometry.type == 'MultiPolygon':
allparts = [p.buffer(0) for p in poly.geometry]
poly.geometry = shapely.ops.cascaded_union(allparts)
x, y = poly.geometry.exterior.xy # here happens the error
Ini sangat sering berhasil, tetapi ada juga kasus di mana Polygon jelas tetap MultiPolygon karena kesalahan berikut masih muncul:
AttributeError: 'MultiPolygon' object has no attribute 'exterior'
Saya telah memeriksa, bagaimanapun, bahwa setiap bagian dari MultiPolygon adalah poligon dan bukan MultiPolygon itu sendiri:
>>>>[p.type for p in poly.geometry]
['Polygon', 'Polygon']
Adakah ide mengapa ini terjadi dan bagaimana cara memperbaikinya?
Mungkinkah itu lubang di poligon? Saya terlihat seperti ini:
polygon
shapely
multipart
singlepart
senegaranya
sumber
sumber
geometry
dalamPolygon
, tetapigeom_type
?Jawaban:
Anda perlu memahami predikat biner Shapely:
1) Jika kedua poligon memotong hasil dari
union
atauunary_union
(berwarna merah) adalah Polygon maka Anda dapat menghitung bagian luarnya.2) Jika dua poligon terputus, hasilnya diperlukan MultiPolygon (merah dengan dua poligon)
Dan jika Anda bekerja dengan Shapefile, tanpa topologi, ini mungkin terjadi
Sebuah solusi adalah dengan menghitung Concave Hull tetapi sebenarnya bukan gabungan.
sumber