Mengubah MultiPolygon ke Polygon: Teknik tidak selalu berhasil


10

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: masukkan deskripsi gambar di sini


MultiPolygon adalah daftar Poligon sederhana, oleh karena itu daftar tidak memiliki "eksterior", tetapi setiap Poligon dalam daftar memiliki "eksterior". Jika Anda ingin Polygons menggunakan for for ([p.exterior.xy for p di Multi)]
gen

Oke, saya mengerti, tetapi apa yang bisa saya lakukan untuk mendapatkan koordinat eksterior MultiPolygon ? Dalam pendekatan saya, saya sedang mencoba penyatuan poligon tunggal, tetapi ini tampaknya tidak bekerja di sini ....
senegaranya

Mungkinkah API berubah bentuk dalam waktu yang berarti? Saya tidak melihat atribut geometrydalam Polygon, tetapi geom_type?
K.-Michael Aye

Jawaban:


14

Anda perlu memahami predikat biner Shapely:

1) Jika kedua poligon memotong hasil dari unionatau unary_union(berwarna merah) adalah Polygon maka Anda dapat menghitung bagian luarnya.

masukkan deskripsi gambar di sinimasukkan deskripsi gambar di sini

2) Jika dua poligon terputus, hasilnya diperlukan MultiPolygon (merah dengan dua poligon)

masukkan deskripsi gambar di sinimasukkan deskripsi gambar di sini

Dan jika Anda bekerja dengan Shapefile, tanpa topologi, ini mungkin terjadi

Sebuah solusi adalah dengan menghitung Concave Hull tetapi sebenarnya bukan gabungan.

masukkan deskripsi gambar di sini


Oke, memang, saya menemukan bahwa ini adalah kasus - dan logika! Terima kasih banyak!
senegaranya

1
bagaimana Anda menghitung lambung cekung?
Dima Lituiev
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.