Saya memiliki Shapefile besar dengan 200.000 poligon tetapi file tersebut terlalu besar untuk aplikasi yang akan menggunakannya. Saya ingin menggeneralisasi poligon ini dan membuat file yang jauh lebih kecil.
Saya telah mencoba melakukan ini di QGIS menggunakan alat "Simplify Geometries". Saya telah mencoba ini pada sebagian kecil Shapefile saya dan saya senang dengan hasilnya tetapi memiliki masalah kecil yang saya tidak tahu bagaimana menyelesaikannya. Saya telah menambahkan gambar untuk menunjukkan masalah.
Batas WHITE adalah batas sebelum penyederhanaan. Batas RED adalah setelah penyederhanaan. Area bermasalah dilingkari dengan warna oranye. Seperti yang Anda lihat "batas yang disederhanakan" berisi beberapa area yang setelah penyederhanaan tidak termasuk dalam salah satu poligon sebelumnya.
Bagaimana cara menyederhanakan Shapefile ini dan menjaga batas umum antara poligon sebagai satu baris dan menghilangkan area yang telah dibuat setelah penyederhanaan?
INFORMASI TAMBAHAN:
Setelah mengikuti instruksi yang disarankan
- Ubah poligon menjadi garis
- Sederhanakan garis
- Konversikan garis kembali ke poligon
Saya mendapatkan hasil sebagai berikut. Ini sedikit lebih baik dari sebelumnya tetapi saya masih mendapatkan area di luar poligon asli (lihat area putih pada gambar di bawah).
@Andrew menyarankan agar saya mengaitkan setiap baris dengan poligon yang berdekatan tetapi saya tidak tahu bagaimana melakukannya di QGIS.
Saya masih mencoba untuk menyelesaikan proses penyederhanaan poligon. Saya telah mengikuti instruksi yang disarankan dalam posting ini dan ketika saya pikir saya mendapat hasil yang dapat diterima satu masalah lagi muncul. Di bawah ini adalah ringkasan dari apa yang saya lakukan dengan gambar hasil. Semua langkah telah dilakukan menggunakan toolbox PENGOLAHAN di QGIS.
- Pertama, saya mengonversi poligon menjadi garis
- Kedua, saya membersihkan baris menggunakan v.clean dengan opsi break. Ini menghasilkan LAPTOR VEKTOR BERSIH dan LAPANGAN KESALAHAN. Layer Kesalahan (titik-titik hijau pada gambar yang disediakan) memiliki titik hijau di setiap persimpangan garis. Aku tidak tahu apa artinya ini.
- Ketiga, saya menyederhanakan garis menggunakan alat "SIMPLIFY GEOMETRY" (menghasilkan garis merah pada gambar). Membandingkan garis merah yang disederhanakan dan garis oranye asli Saya senang dengan hasilnya.
- Keempat, saya ingin mengubah garis kembali ke poligon menggunakan alat "Polygonize" di "PROCESSING" dan mendapatkan hasil yang tidak saya harapkan (gambar kedua dengan poligon warna zaitun gelap yang diarsir). Ini terlihat seperti persimpangan lapisan kesalahan yang terhubung dengan polygonizer dan membuat kumpulan poligon yang sama sekali berbeda dengan mengabaikan garis yang disederhanakan.
Bisakah seseorang menjelaskan apa yang salah di sini?
Mengapa garis yang disederhanakan merah tidak dikonversi dengan benar ke poligon yang disederhanakan?
Seperti yang Anda lihat, saya bukan ahli GIS tetapi perlu melakukan ini sendiri. Saya tidak tahu apakah saya terlalu jauh dari solusi, tetapi saya merasa frustasi karena saya dapat melihat garis yang disederhanakan yang menurut saya dapat diterima untuk apa yang ingin saya lakukan tetapi tidak dapat mengubahnya menjadi poligon.
Berikut adalah dua gambar dengan hasil dua langkah terakhir dari proses:
v.generalize
adalah pilihan hebat lainnya. Semoga ini membantu.Jawaban:
Saya mendapat hasil yang cukup bagus menggunakan GRASS v.generalisasi dari Processing Toolbox menggunakan nilai default:
Beberapa garis tetap tidak tersentuh.
sumber
Saya mengalami masalah dengan Qgis2.16, tetapi tidak bisa mendapatkan GRASS untuk memberikan hasil yang benar secara topologi seperti @AndreJ.
Solusi yang bagus adalah mengubah toleransi snap v.in.ogr di parameter lanjutan alat v.generalize.simplify . Standarnya adalah -1, yang mencegah gertakan dalam GRASS.
Dengan meletakkan nilai kecil di sini (seperti 1e-05 m), gertakan diaktifkan dan GRASS mengenali batas bersama poligon. Penyederhanaan kemudian memberikan lapisan yang benar secara topologi, tanpa lubang.
Catatan: Dengan mengatur toleransi snap ke nilai yang lebih tinggi, bahkan dimungkinkan untuk mengubah poligon sehingga yang sangat tipis dapat dihapus jika Anda mau. Ikuti operasi itu dengan v.clean menggunakan rmarea dan ambang batas yang cukup besar untuk menghapus sisa-sisa kecil, dan selesai!
sumber
pertama-tama ubah poligon Anda menjadi garis
gunakan v.clean untuk membersihkan topologi Anda (dengan opsi "break")
maka Anda menyederhanakan garis Anda
Akhirnya Anda mengubah garis Anda kembali ke poligon. (Menggunakan poligon)
EDIT: Untuk mendapatkan atribut poligon Anda, cara terbaik, jika Anda tidak memiliki multipart poligon dalam dataset asli , adalah untuk mendapatkan centroid yang lama dan dari poligon yang disederhanakan dan bergabung dengan mereka berdasarkan lokasi terdekat (centroid harus tidak banyak bergerak jika Anda hanya sedikit mengubah batas Anda)
sumber
Anda dapat menyelesaikan masalah dengan model Pemrosesan (ex SEXTANTE) seperti ini:
Versi skrip:
Catatan: satu-satunya kendala adalah bahwa bidang umum harus
ID
diJoin attributes table
, karena merupakan satu-satunya bidang output dariLines to polygons
. Itu sebabnya bidang yang umum bukan input variabel dari model. Jadi suatuID
bidang harus tersedia di lapisan poligon input.sumber