Konversi raster ke smooth kontur poligon di QGIS

14

Saya memiliki keberhasilan terbatas membuat poligon kontur halus dari lapisan raster.

Saya telah membuat garis kontur dan polyline batas dan kemudian menggunakan QGIS Union. Lalu saya menggunakan QGIS Polygonize. Kemudian gunakan statistik zona ke raster asli untuk mendapatkan nilai pada poligon.

Metode ke-2 yang saya coba adalah mengubah raster menjadi poligon. Kemudian buat kolom atribut baru dibulatkan ke kontur yang saya inginkan. Lalu saya membubarkan garis di antara nilai yang sama. Kemudian gunakan v.generalisasi. Metode ini sedikit lebih cepat, tetapi akan meninggalkan beberapa poligon bergerigi / tidak terhapus.

masukkan deskripsi gambar di sini

Apakah ada metode yang lebih mudah yang benar-benar berfungsi sepanjang waktu. Sepertinya harus ada perintah sederhana yang melakukan seluruh proses.

Rx_
sumber
2
Mengapa Anda menggunakan Polygonize? input raster Anda terus menerus (seperti DEM titik mengambang)? QGIS memiliki alat kontur, yang merupakan jalan pintas ke GDAL_Contour .. qgistutorials.com/en/docs/working_with_terrain.html Apakah Anda mencoba untuk mendapatkan area kontur atau hipsometrik?
Michael Stimson
File input adalah tif dan file output yang diperlukan adalah file bentuk dengan hanya poligon pada kenaikan tertentu. Saya telah menemukan banyak alat untuk membuat polyline, tetapi tidak untuk poligon.
Rx_
Cukup adil, Anda mencoba mendapatkan area hipsometrik. Saya menggunakan (kebanyakan) Esri yang memiliki opsi untuk menyederhanakan poligon yang dibuat oleh raster ke poligon, tetapi itu tidak akan membantu di sini. Bagaimana kelihatannya jika Anda membuat kontur dari DEM, tambahkan kotak pembatas lalu poligon? Anda kemudian dapat membuat titik label, memotong / sampel nilai dan label poligon dengan atribut ... mungkin Anda mungkin mendapatkan beberapa poligon nilai yang sama yang dapat dibubarkan tetapi masalah yang lebih besar melonjak lebih dari satu interval. Saya memiliki kode untuk mengaitkan hypso dari kontur tetapi berfungsi pada cakupan ArcInfo
Michael Stimson
Apa yang Anda gambarkan adalah apa yang saya pikir saya lakukan dalam metode pertama saya. Itu rumit. Perlu memastikan setiap file memiliki atribut id dan kemudian menghapus poligon yang tidak mengandung area di atas nol setelah dipoligonisasi. Saya gagal mendapatkan label garis yang konsisten dan konsisten untuk ditransfer ke poligon. Metode kedua sangat dekat dengan apa yang saya inginkan, tetapi v.generalisasi tampaknya tidak bekerja 100% dari waktu. Saya berharap ESRI menyederhanakan poligon adalah pilihan di QGIS seperti yang Anda tunjukkan.
Rx_

Jawaban:

12

Saya mengalami masalah yang sama dengan yang Anda alami di metode kedua. Saya mengekspor Raster ke Vektor dan mencoba dan menggunakan v.generalise dan saya mendapatkan poligon yang paling halus dengan batas 'langkah' sesekali yang tampaknya tidak terpengaruh oleh algoritma.

Saya menemukan proses yang bekerja untuk tugas saya, tidak yakin apakah ini cara terbaik tetapi saya pikir saya akan membagikannya jika itu membantu Anda.

Yang saya mulai adalah grid ascii dari BoM yang terlihat seperti ini: masukkan deskripsi gambar di sini

Apa yang saya inginkan mirip dengan apa yang diproduksi BoM seperti ini: masukkan deskripsi gambar di sini

Saya dapat mencapai hasil (yang saya senang) dengan menggunakan langkah-langkah berikut.

  • Muat kisi (dalam kasus saya Kisi ASCII dari BoM) ke QGIS.
  • Direkam ulang menjadi kelas diskrit. (Memproses Toolbox> Rumput> Raster> r.recode)
  • Jalankan filter mayoritas untuk 'membersihkan'. (Memproses Toolbox> SAGA> Filter Raster> Filter Mayoritas)
  • Membuat kontur dari grid yang difilter pada interval 1, dan menyimpannya dalam atribut 'kelas' (karena kelas saya 1,2,3,4, dll). (Menu 'Raster'> Ekstraksi> Kontur)
  • Kontur output agak digeneralisasi, tetapi saya menggunakan v.generalisasi dengan algoritma 'ular' untuk memuluskannya (Memproses Toolbox> Rumput> Vektor> v.generalisasi)
  • Saya kemudian mengkonversi garis menjadi poligon. (Pemrosesan Toolbox> QGIS geoalgorithms> Vector Geometry Tools> Lines to Polygons)
  • Akhirnya saya harus mengubah satu bagian poligon menjadi beberapa bagian, sehingga semua poligon menarik dengan baik. (Memproses Kotak Alat> geoalgoritma QGIS> Alat Geometri Vektor> Singleparts ke Mulitpart).

Setelah menata keluaran saya di bawah ini: masukkan deskripsi gambar di sini

Saya juga akan tertarik mendengar jika seseorang tahu cara yang lebih sederhana. Awalnya saya berpikir mirip dengan @Rx_ bahwa saya hanya bisa mengubah raster saya ke vektor kemudian menggeneralisasi dan saya akan selesai. Apa yang harus saya lakukan jauh lebih lama.

Andrew Jeffrey
sumber
3

Saya suka jawabannya di sini tetapi saya tidak percaya bahwa QGIS masih tidak memiliki cara yang cepat dan mudah untuk melakukan ini. MapInfo dapat menghasilkan kontur sebagai poligon atau garis dengan interval apa pun yang dapat Anda tentukan.

Sepertinya tugas dasar seperti itu dan juga penting untuk mendapatkan luasan. Jika ada yang memiliki cara yang diperbarui atau lebih cepat untuk melakukan ini, silakan bagikan!

MapInfoNewbie
sumber
1

Cara yang lebih langsung adalah menggunakan gdal_countoursecara langsung (sebagai program baris perintah) dalam "mode poligon" (yaitu, dengan -popsi).

Contoh:

gdal_contour -p -amin min_val -amax max_val -i 1 input_raster.tif output_shape.shp

Dokumentasi: https://gdal.org/programs/gdal_contour.html

Opsi ini hanya tersedia dalam versi> = 2.4 (ini dapat diperiksa dengan gdalinfo --version). Jika Anda menggunakan Ubuntu 18.4, Anda mungkin harus menginstalnya dari UbuntuGIS

Paulo Vieira
sumber