Aşağıdaki soruda tam bir çözüm sunabildim:
QGIS'deki python konsolundan bir enterpolasyon raster nasıl hesaplanır?
Buradaki yanıtı da tekrarlayacağım, çünkü büyük ilgi çektiği görülüyor:
Cevap:
Pyqgis üzerinde dokümantasyon çok kendini açıklayıcı değil, ama ben (düzgün ilişkili enterpolasyon sınıfları çağırmak için nasıl düşündüm QgsInterpolator
, QgsTINInterpolator
, QgsIDWInterpolator
, QgsGridFileWriter
piton itibaren). Senaryo her adımını ayrıntılı olarak açıklayacağım:
Aşama 1:
Çekirdek ve analiz modülünü içe aktarın ve katman sekmesinde bir fare tıklaması ile seçerek enterpolasyon için istenen vektör katmanını alın.
import qgis.core
import qgis.analysis
layer = qgis.utils.iface.activeLayer()
Adım 2:
İnterpolasyon sınıflarını gerekli Parametrelerle hazırlayın. LayerData yapısının başlatılması için kesin parametreler QGIS API belgelerinde (searchterm: QgsInterpolator) bulunabilir.
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
Z Koordinatını kullanmadığımı, enterpolasyon özniteliği olarak ilk kullanılabilir alanı (index = 0) aldığımı ve girdi türü olarak POINTS kullandığımı lütfen unutmayın.
Aşama 3:
İnterpolasyon motorunuzu seçin. Burada TIN-İnterpolasyon yöntemi ( QgsTINInterpolator
) ve IDW-İnterpolasyon ( QgsIDWInterpolator
) arasında seçim yapabilirsiniz . Çektiğim QgsTINInterpolator
benim kodunda.
tin_interpolator = QgsTINInterpolator([layer_data])
layer_data
İnterpolasyon motoruna bir python listesi iletmeniz gerektiğini unutmayın ! Bu aynı zamanda birden fazla layer_data senaryosu eklemenize izin verir.
4. Adım:
Enterpolasyon-çıktısının dışa aktarımı için gerekli parametreleri ayarlayın (belgelerine bakın QgsGridFileWriter
). Bunlar, enterpolasyon gui (dosyayolu, kapsam, çözünürlük, sütun ve satır sayısı) ile benzer bilgileri içerir.
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")
QgsGridFileWriter
Yalnızca ASCII ızgaraları ( .asc
) yazarken , çıkış rasterinizin dosya uzantısının farkında olun . Veriler writeFile()
yöntemi çağırarak diske yazılır . Dışa aktardıktan sonra ızgara dosyasını tuvale raster olarak ekleyebilirsiniz.
Referans için tam komut dosyası:
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)
QGIS-API sürüm 3.0 yeniden yazılarak ve kullanılan enterpolasyon-sınıfları taşınır unutmayın qgis.analysis
için qgis.core
! Bunun, 3.0 sürümü için yeniden yazılması için bu komut dosyasının işlevselliği üzerinde büyük bir etkisi olacaktır!
from rasterinterpolation import rasterinterpolation
hangi modülü çağıracağımı (ya da nasıl arayacağınızı) emin değilim.