Dengan dua partisi bentuk yang berbeda (demi argumen, dua divisi administrasi negara yang berbeda), bagaimana saya bisa menemukan partisi baru yang cocok untuk kedua partisi tersebut, memungkinkan (dan mengoptimalkan) beberapa kesalahan?
Misalnya, mengabaikan kesalahan, saya ingin algoritma yang melakukan ini:
Mungkin membantu untuk mengungkapkan ini dalam ketentuan yang ditetapkan. Menggunakan penomoran berikut:
Saya dapat mengekspresikan partisi di atas sebagai:
A = {{1}, {2}, {3,4,7,8}, {5}, {6}, {9,10,13,14}, {11}, {12}, {15} , {16}}
B = {{1,2,5,6}, {3}, {4}, {7}, {8}, {9}, {10}, {13}, {14}, {11,15} , {12,16}}
A dot B = {{1,2,5,6}, {3,4,7,8}, {9,10,13,14}, {11,15}, {12,16}}
dan algoritma untuk menghasilkan A dot B tampak langsung (seperti, jika dua elemen berada dalam sebuah partisi bersama dalam A (B) menggabungkan partisi mereka di dalam B (A) - ulangi sampai A dan B sama dengan).
Tetapi sekarang bayangkan beberapa baris ini sedikit berbeda antara dua partisi, sehingga jawaban sempurna ini tidak mungkin, dan sebagai gantinya saya ingin subjek jawaban optimal untuk meminimalkan beberapa kriteria kesalahan.
Ambil contoh baru:
Di sini, di kolom kiri kita memiliki dua partisi tanpa garis yang sama (terlepas dari perbatasan luar itu sendiri). Satu-satunya solusi yang mungkin dari jenis di atas adalah yang sepele, kolom kanan. Tetapi jika kita mengijinkan solusi "fuzzy", maka kolom tengah mungkin diperbolehkan, dengan mengatakan 5% dari total area yang diperebutkan (yaitu dialokasikan untuk subarea yang berbeda di setiap partisi kasar). Jadi kita dapat menggambarkan kolom tengah sebagai mewakili "partisi umum paling kasar dengan <= 5% kesalahan".
Apakah jawaban yang sebenarnya adalah kemudian partisi di baris atas, kolom tengah atau baris tengah, kolom tengah - atau sesuatu di antaranya, kurang penting.
Jawaban:
Anda dapat melakukan ini dengan mengevaluasi perbedaan batas poligon dengan perbedaan simetris antara batas mereka, atau dinyatakan secara simbolis sebagai:
Ambil geometri a dan b , dinyatakan sebagai MultiLinestrings selama dua baris dan gambar berikutnya:
Perbedaan simetris, di mana bagian a dan b tidak berpotongan, adalah:
Dan akhirnya, evaluasi perbedaan antara a atau b dan perbedaan simetris:
Anda dapat mengimplementasikan logika ini dalam GEOS (Shapely, PostGIS, dll.), JTS, dan lainnya. Perhatikan bahwa jika geometri input adalah poligon, maka batas-batasnya perlu diekstraksi, dan hasilnya dapat dipoligonisasi. Misalnya, ditunjukkan dengan PostGIS, ambil dua MultiPolygons, dan dapatkan hasil MultiPolygon:
Perhatikan bahwa saya belum menguji metode ini secara luas, jadi anggap ini sebagai gagasan sebagai titik awal.
sumber
Algoritma bebas kesalahan.
Set pertama: Set kedua:
Gabungkan 2 set dan urutkan berdasarkan urutan berdasarkan area. Pilih baris dalam tabel (atas => bawah) hingga total area = total area (16 dalam kasus ini) tercapai:
Baris terpilih membuat jawaban Anda:
Kriteria akan menjadi perbedaan antara area akumulasi dan total aktual.
sumber