Bagaimana cara mengisi lubang di poligon secara otomatis?

12

Apakah ada opsi dalam QGIS untuk mengisi lubang dalam poligon secara otomatis dengan mengatur parameter misalnya area maksimum, jarak antar garis batas? Saya ingin menghapus / mengisi lubang yang sangat "tipis" / kecil.

J-Man
sumber
1
Apakah Anda tertarik dengan lubang (cincin di dalam poligon) atau mengurangi celah di antara poligon yang terpisah?
Simbamangu
Apakah ini harus menjadi solusi berbasis QGIS? Saya telah membuat blog sebelumnya tentang cara menyelesaikan ini menggunakan spasial SQL di PostGIS ( geospatial.commons.gc.cuny.edu/2013/11/04/… ). Jika Anda tidak menjalankan PostGIS, saya mungkin bisa mengadaptasi ini untuk Anda ke SpatiaLite, yang, jika Anda menggunakan QGIS, Anda mungkin sudah memiliki SpatiaLite di toolchain Anda.
Lee Hachadoorian

Jawaban:

11

Menggunakan QGIS 2.10.1-Pisa dengan Memproses versi 2.10.2, ada beberapa alat yang tersedia dari Processing Toolbox :

  • Isi lubang alat yang bisa Anda tentukan area maksimal .
  • Hapus alat lubang yang akan diterapkan ke seluruh lapisan input.

Semoga ini membantu!

Yusuf
sumber
1
Hanya untuk memeriksa, parameter area maks, yaitu ukuran maksimum lubang yang harus diisi? Jadi dalam proyek UTM meter, jika maksnya 10.000, itu berarti lubang terbesar yang akan diisi adalah satu hektar dan lebih besar dari itu akan tersisa?
BillW
1
@ BillW - Ya, saya percaya itulah yang dilakukannya :)
Joseph
11

Saya menghadapi masalah yang sama dengan Anda dengan shapefile ini, memiliki banyak celah di antara poligon.

File asli dengan celah

Untuk menyelesaikan masalah, Anda dapat menggunakan sedikit modifikasi metode tshiffle:

  1. Pertama, lakukan perbedaan antara file Anda dan poligon yang mencakup keseluruhannya.

Extent_polygon

Difference_tool

Tindakan ini akan membuat shapefile baru yang hanya terdiri dari satu poligon, jadi Anda harus meledakkannya menjadi satu bagian. Untuk itu, Anda bisa menggunakan Vector / Geometry Tools / Multipart ke alat singleparts.

Difference_result

Multi_to_single

Setelah itu, hapus entitas eksternal. Sekarang Anda memiliki, dalam bentuk baru, beberapa poligon yang menutupi celah cakupan asli Anda.

gaps_covered

  1. Lakukan penyatuan antara data awal dan bagian tunggal. Gunakan alat SAGA, karena opsi QGIS default membuat duplikat ke dalam database.

Persatuan

  1. Semua celah sekarang akan muncul sebagai catatan kosong dalam database (misalnya 72 baris). Urutkan tabel Anda menggunakan bidang area dan ambil nilai dari poligon terkecil dalam file asli. Untuk kasus ini, 0,13645 hektar.

basis data

  1. Terakhir, gunakan alat "Eliminate sliver polygons", dengan pengaturan yang ditunjukkan pada gambar.

masukkan deskripsi gambar di sini

  1. Hasil akhir tidak memiliki celah.

masukkan deskripsi gambar di sini

gtapko
sumber
Bisakah Anda menambahkan lebih banyak informasi mengenai pilihan parameter? Apa itu "nilai"? Halaman dokumentasi QGIS sangat singkat mengenai perinciannya. Balasan sangat elegan, disayangkan pengguna awal belum menerima jawaban apa pun!
user3386170
1
'Nilai' adalah besarnya yang Anda gunakan untuk perbandingan. Dalam contoh 'bidang' bidang yang digunakan ditetapkan dalam hektar, jadi 0,1 berarti: menghilangkan poligon lebih kecil atau sama dengan 0,1 hektar.
gtapko
gtapko, bisakah Anda memberikan detail lebih lanjut tentang fase 3? saya tidak dapat memahaminya, terima kasih
newGIS
4

Mungkin ada solusi yang lebih elegan di luar sana, tetapi ini selalu berhasil untuk saya.

1) Buat poligon "mengisi lubang". Untuk melakukan ini, gambar poligon raksasa lebih besar dari aslinya dan gunakan alat "perbedaan". Jika Anda menggambar poligon yang jauh lebih besar, Anda akan memiliki semua poligon "lubang-mengisi" plus satu poligon lebih besar yang mengelilingi bentuk aslinya. Hapus poligon besar itu, pertahankan poligon "mengisi lubang".

2) Gabungkan poligon "mengisi lubang" dengan shapefile asli. Jika Anda hanya ingin mengisi lubang yang sesuai dengan kriteria tertentu (yaitu di bawah X jumlah kilometer persegi) Anda dapat memfilter untuk itu di sini.

3) Larutkan poligon yang baru digabungkan pada bidang yang sama.

tshiffle
sumber
Tidak jelas tentang langkah 3, bagaimana seseorang akan menemukan bidang yang sama?
iRfAn
Pada langkah ini bidang yang umum dapat berupa apa saja, tujuannya adalah untuk melarutkan batas-batas di antara poligon. Anda bisa menggunakan bidang yang ada atau hanya menambahkannya.
tshiffle
4

Dengan python / rupawan, ini dapat mengisi poligon Anda:

import shapely
from shapely.geometry import Polygon
filled_shape = Polygon(shape_with_holes.exterior)
mszel
sumber
2

Saya telah melihat beberapa penjelasan mengikuti jalur yang sama dengan gtapko dan tshiffle, tetapi tidak ada yang berhasil untuk saya karena geometri yang tidak valid membuat alat perbedaan menjadi tidak berfungsi. Jadi, saya datang dengan solusi saya sendiri yang tidak 100% terotomatisasi, tetapi dapat dikelola. Mungkin seseorang sudah menemukan ini, tapi saya akan mengambil risiko:

1) Buat ID pada lapisan asli yang rusak

Membuat atribut ID itu sederhana, tetapi juga solusi saya, jadi saya akan membahasnya.

Pertama, Anda harus membuka tabel atribut Anda dan kemudian pergi ke Kalkulator Bidang , yang merupakan tombol yang cukup mirip sempoa. Di sana, Anda akan diberikan opsi untuk membuat bidang baru atau memperbarui yang sudah ada. Pada gambar di atas saya membuat yang baru bernama "ID". Rumusnya tepat di akhir gambar. (Maaf karena QGIS saya diatur dalam bahasa yang berbeda. Karena desain dan formula persis sama di seluruh versi bahasa, saya pikir itu tidak akan menghalangi kami di sini.)

2) Ubah poligon menjadi garis

Langkah ini terletak di bagian Vector> Geometry menu. Bentuk Anda yang dikonversi akan terlihat seperti ini:

Tepat setelah mengonversi poligon menjadi garis, Anda harus melakukan sebaliknya, yaitu ...

3) Ubah garis menjadi poligon

Pilihannya tepat di sebelah satu sama lain. Sekali lagi, jangan pedulikan kendala bahasa di sini.

4) Bersukacitalah Alasan Anda melakukan langkah 2 dan 3 adalah karena sekarang Anda yakin garis-garis itu akan dianggap sebagai poligon, yang berarti mereka sekarang memiliki garis mereka sendiri di Tabel Atribut. Jika Anda memeriksanya, akan terlihat seperti ini:

Yang pertama adalah SELALU seluruh poligon (percayalah, saya telah menghapus beberapa ratus baris hari ini ...) dan sisanya adalah garis longgar di tengah. Anda dapat mengaktifkan pengeditan dan bersiap untuk bertindak. Jika Anda memutuskan untuk mencoba ini, dua hal yang harus Anda ingat adalah: mengatur ID-bijaksana meja Anda , dengan cara ini Anda yakin Anda tidak kehilangan apa pun dan menggunakan shift untuk memilih kelompok data, seperti halnya program lain .

Aku sadar ini bukan creme de la creme dari QGIS pemecahan masalah, tetapi jika Anda menghadapi situasi di mana alat-alat yang tidak bekerja karena geometri valid baris ini membuat (Aku bahkan mencoba membubarkan oleh ID, tetapi tidak berhasil), maka ini mungkin jalan keluar.

Eric Lino
sumber
Bisakah Anda memperbarui gambar Anda? Tautan rusak!
Simbamangu
Hei. Maaf, tapi ternyata Photobucket membajak gambar saya, saya kehilangan akses ke sana. Saya sudah membuka tiket dan saya mencoba mendapatkan kembali akses. Saya akan menghubungi Anda kapan pun memungkinkan.
Eric Lino