Saya dapat memberikan solusi lengkap dalam pertanyaan berikut:
Bagaimana cara menghitung raster interpolasi dari konsol python di QGIS?
Saya akan memposting ulang jawabannya di sini juga, karena besarnya minat yang tampaknya menarik:
Menjawab:
Dokumentasi di pyqgis sangat tidak cukup jelas, tapi saya tahu bagaimana benar memanggil kelas interpolasi terkait ( QgsInterpolator
, QgsTINInterpolator
, QgsIDWInterpolator
, QgsGridFileWriter
) dari python. Saya akan menjelaskan setiap langkah naskah dengan sangat rinci:
Langkah 1:
Impor inti dan modul analisis dan dapatkan layer vektor yang diinginkan untuk interpolasi dengan memilihnya dengan mouseclick pada tab layer.
import qgis.core
import qgis.analysis
layer = qgis.utils.iface.activeLayer()
Langkah 2:
Siapkan kelas interpolasi dengan Parameter yang diperlukan. Parameter tepat untuk inisialisasi struct LayerData dapat ditemukan di dokumen QGIS API (searchterm: QgsInterpolator).
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
Harap perhatikan bahwa saya tidak menggunakan Koordinat z, saya mendapatkan bidang pertama yang tersedia (indeks = 0) sebagai atribut interpolasi, dan menggunakan POIN sebagai tipe input.
Langkah 3:
Pilih mesin interpolasi Anda. Di sini Anda dapat memilih antara metode TIN-Interpolasi ( QgsTINInterpolator
) dan IDW-Interpolasi ( QgsIDWInterpolator
). Saya mengambil QgsTINInterpolator
kode saya.
tin_interpolator = QgsTINInterpolator([layer_data])
Ingatlah bahwa Anda harus memberikan daftar python layer_data
ke mesin interpolasi! Ini juga memungkinkan Anda untuk menambahkan beberapa skenario layer_data.
Langkah 4:
Setup parameter yang diperlukan untuk ekspor interpolasi-output (lihat dokumentasi QgsGridFileWriter
). Itu termasuk informasi yang mirip dengan gui interpolasi (filepath, luas, resolusi, jumlah kolom dan baris).
export_path ="C:/SomeFolder/output.asc"
rect = layer.extent()
res = 10
ncol = int( ( rect.xMaximum() - rect.xMinimum() ) / res )
nrows = int( (rect.yMaximum() - rect.yMinimum() ) / res)
output = QgsGridFileWriter(tin_interpolator,export_path,rect,ncol, nrows,res,res)
output.writeFile(True)
iface.addRasterLayer(export_path, "interpolation_output")
Waspadai ekstensi file output-raster Anda karena QgsGridFileWriter
hanya menulis ASCII-grids ( .asc
). Data ditulis ke disk dengan memanggil writeFile()
metode. Setelah ekspor Anda dapat menambahkan file grid sebagai raster ke kanvas.
Skrip lengkap untuk referensi:
import qgis.analysis
import qgis.core
layer = qgis.utils.iface.activeLayer()
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
tin_interpolator = QgsTINInterpolator([layer_data])
export_path = "E:/GIS_Workbench/script_output/test.asc"
rect = layer.extent()
res = 10
ncol = int( ( rect.xMaximum() - rect.xMinimum() ) / res )
nrows = int( (rect.yMaximum() - rect.yMinimum() ) / res)
output = QgsGridFileWriter(tin_interpolator,export_path,rect,ncol,nrows,res,res)
output.writeFile(True)
Perlu diingat bahwa QGIS-API saat ini ditulis ulang ke versi 3.0 dan kelas interpolasi yang digunakan dipindahkan dari qgis.analysis
ke qgis.core
! Ini akan memiliki dampak besar pada fungsionalitas skrip ini sehingga harus ditulis ulang untuk versi 3.0!
from rasterinterpolation import rasterinterpolation
tetapi tidak yakin modul mana yang harus dipanggil (atau bagaimana cara memanggil).