Lagi

Hamparan poligon dengan Shapely

Hamparan poligon dengan Shapely


Saya mencoba menangkap semua poligon yang tidak tumpang tindih yang ditunjukkan di bawah ini menggunakan Shapely (diberikan poligon A, B & C). Selain itu, saya berharap untuk melakukannya tanpa iterasi, pengujian untuk intersect dll. Jawaban yang diterima untuk pertanyaan ini mengungkapkan metode PostGIS tetapi tampaknya 'union' memiliki arti yang berbeda bagi orang yang berbeda.


Anda perlu mengulangi pada tingkat tertentu. (Memperbarui: Saya telah mengedit untuk menghapus semua loop "untuk", kecuali untuk satu pemahaman daftar)

# impor yang digunakan di seluruh contoh ini dari shapely.geometry import Titik dari shapely.ops impor cascaded_union dari itertools impor kombinasi # Berikut adalah bentuk input Anda (lingkaran A, B, C) A = Point(3, 6).buffer(4) B = Point(6, 2).buffer(4) C = Point(1, 2).buffer(4) # daftar bentuk sehingga mereka adalah bentuk yang dapat diubah = [A, B, C]

Pertama, Anda memerlukan penyatuan semua persimpangan (gunakan penyatuan bertingkat), menggunakan pasangan kombinasi dari setiap bentuk. Kemudian Anda menghapus (melaluiperbedaan) persimpangan dari penyatuan semua bentuk.

# Semua persimpangan inter = cascaded_union([pair[0].intersection(pair[1]) untuk pasangan dalam kombinasi(bentuk, 2)]) # Hapus dari gabungan semua bentuk nonoverlap = cascaded_union(bentuk).difference(inter)

Inilah apatidak tumpang tindihterlihat seperti (melalui JTS Test Builder):


Setelah beberapa tahun tampaknya ada solusi yang lebih baik melaluirupawan:

# impor yang digunakan dalam contoh ini dari shapely.geometry import Point from shapely.ops import polygonize, unary_union # Berikut adalah bentuk input Anda (lingkaran A, B, C) A = Point(3, 6).buffer(4) B = Point (6, 2).buffer(4) C = Point(1, 2).buffer(4)… # membuat daftar bentuk sehingga bentuknya dapat diubah = [A, B, C,… ] # menghasilkan daftar overlay(poligonisasi (unary_union(daftar(x.eksterior untuk x dalam bentuk))))

Ini mendukung panjang geometri apa pun, satu-satunya masalah adalah tentang waktu perhitungan, dan tidak mendukung poligon berlubang.


Tonton videonya: clip layer by polygon in ArcGIS