Saya memiliki layer vektor poligon yang mewakili area yang tergenang banjir. Lapisan telah diproduksi sedemikian rupa sehingga beberapa area terdiri dari beberapa poligon menyentuh yang lebih kecil (lihat tangkapan layar di bawah, berlabel "data asli").
Saya ingin melarutkan poligon di mana mereka menyentuh. Jika saya menggunakan alat geoprocessing terlarut dalam fTools QGIS, yang menggunakan perpustakaan GEOS, saya mendapatkan beberapa hasil yang tidak terduga (lihat "larut dengan fGool QGIS"). Tampaknya GEOS tidak menggunakan ambang batas dalam menentukan apakah poligon bersentuhan, seperti yang disebutkan dalam masalah ini:
http://trac.osgeo.org/qgis/ticket/3126
http://trac.osgeo.org/qgis/ticket/3184
http://hub.qgis.org/issues/2806
Pendekatan yang sama di ArcGIS memberikan hasil yang diharapkan (lihat "larut dengan ArcGIS 10.1").
Rupanya ini adalah "fitur" GEOS, bukan bug. Apakah ada cara untuk memperbaiki data yang saya miliki untuk menghasilkan hasil yang diharapkan? Kehilangan presisi yang kecil (beberapa cm?) Dapat diterima untuk saya. Idealnya solusinya adalah sesuatu yang bisa saya tulis ke dalam plugin QGIS, sebagai langkah pra-pemrosesan.
Pertanyaan terkait (tanpa jawaban): Bagaimana cara menetapkan nilai toleransi alat Geoprocessing di QGIS?
Tautan ke sampel data sebagai shapefile: https://www.dropbox.com/s/c8ns7wwfv289ad0/sample.zip
Jawaban:
Dalam hal ini, sepertinya Anda perlu membantu alat larut bersama dengan memperbaiki topologi terlebih dahulu. Inilah cara Anda dapat melakukan ini dalam GRASS.
Saat Anda memuat shapefile, beginilah GRASS melihatnya:
Setiap tanda silang menandai area. Anda dapat melihat bahwa ada beberapa persilangan pada garis batas: Ini adalah poligon sliver yang disebabkan oleh sedikit offset antara garis batas.
Hapus poligon sliver yang dibentuk oleh celah antara poligon nyata:
Ambil garis batas:
Hancurkan garis batas di persimpangan baru:
Hapus garis batas sekarang duplikat:
Larutkan poligon
Et voilà:
sumber
Gunakan perintah GRASS GIS v.dissolve (dalam plugin Sextante -> Perintah GRASS -> Vektor)
Misalnya saya cepat mereproduksi Anda:
Hasilnya dengan v.dissolve:
Penjelasan
Masalahnya mudah dimengerti. Shapefile tidak memiliki topologi, jika dua area berbagi perbatasan bersama, perbatasan itu akan didigitalkan dua kali dan juga disimpan dalam rangkap dua.
Anda melihat ini dengan jelas ketika Anda mencoba mengedit shapefile:
GRASS GIS (sebagai ArcGIS) adalah suatu topologi gis. Ketika Anda mengimpor shapefile di GRASS, layer yang dihasilkan memiliki topologi: perbatasan umum antara dua area ada satu kali dan dibagi.
Untuk alasan ini, ketika Anda ingin membubarkan shapefile ( melarutkan dua batas ) Anda mungkin mengalami masalah (dalam QGIS, GvSIG, OpenJUMP, atau ArcView 3.x lama), lihat ArcUserI: Memahami Topologi dan Shapefile .
Dalam GRASS, v.dissolve dirancang untuk melarutkan batas umum antara area dengan nomor kategori yang sama
sumber
v.dissolve
memiliki parameter toleransi, yang mengatasi masalah OP.v.dissolve
tampaknya berfungsi, kecuali bahwa itu "mengisi" kotak kecil di tengah fitur. i.stack.imgur.com/AA59l.png