[英]Export a computed raster layer in QGIS by python module
我在 QGIS 中使用 SAGA GIS 和 python 模塊來計算一組數字高程模型 (DEM) 的地形 Position 指數 (TPI),我需要將每個計算出的 TPI 導出到一個單獨的柵格文件中。 我該怎么做? 請參閱下面我編寫的代碼:
base_dir = 'D:/Selected DEMs'
fnames = [os.path.join(base_dir, fname) for fname in os.listdir(base_dir)]
dfs_names = (os.listdir(base_dir))
for i in range(len (fnames)):
print (i)
tpi = processing.run("saga:topographicpositionindextpi", {'DEM':fnames[i],'TPI':'TEMPORARY_OUTPUT','STANDARD':False,'DW_WEIGHTING':0,'DW_IDW_POWER':2,'DW_BANDWIDTH':75})
我找到了答案。 QGIS 以 SAGA GIS 格式 (sdat) 將計算出的 TPI 保存在一個臨時文件夾中。 計算出的柵格采用字典格式,如下所示:
dict_items([('TPI', 'C:/Users/.../.../TPI.sdat')])).
因此,首先需要從 dict 中讀取 TPI.sdat,然后使用 rasterio 將其導出到 Geotiff,如下所示:
import rasterio as rio
base_dir = 'D:/Selected DEMs'
fnames = [os.path.join(base_dir, fname) for fname in os.listdir(base_dir)]
dfs_names = (os.listdir(base_dir))
for i in range(len (fnames)):
print (i)
tpi = processing.run("saga:topographicpositionindextpi", {'DEM':fnames[i],'TPI':'TEMPORARY_OUTPUT','STANDARD':False,'DW_WEIGHTING':0,'DW_IDW_POWER':2,'DW_BANDWIDTH':75})
tpi.items()
tpi['TPI']
TPI_sdat_format = rio.open(tpi['TPI'])
TPI_sdat_format_meta = TPI_sdat_format.profile
TPI_sdat_format_meta['driver'] = 'GTiff'
TPI_data=TPI_sdat_format.read(1)
with rio.open('D:/TPI_%s.tif'%i, 'w', **TPI_sdat_format_meta) as dst:
dst.write(TPI_data, 1)
因為使用了 QGIS,所以我會使用 QGIS 中可用的模塊。 首先,文件被寫為 .sdat,然后作為柵格層加載回 QGIS。 然后柵格可以寫成一個.tif文件
from qgis.core import *
import os
base_dir = 'D:/Selected DEMs'
out_dir = 'D:/Precessed_DEMs'
fnames = os.listdir(base_dir)
EPSG = 'EPSG:25832' # example crs or set from layer r
for i in fnames:
print (i)
out_filename = os.path.join(out_dir,os.path.splitext(i)[0] + '.sdat')
tpi = processing.run("saga:topographicpositionindextpi",{'DEM':i,'TPI':out_filename ,'STANDARD':False,'DW_WEIGHTING':0,'DW_IDW_POWER':2,'DW_BANDWIDTH':75})
rlayer = QgsRasterLayer(os.path.join(folder_preproc, os.path.splitext(i)[0]+".sdat"),os.path.splitext(i)[0])
pipe = QgsRasterPipe()
pipe.set(rlayer.dataProvider().clone())
file_writer = QgsRasterFileWriter(os.path.join(folder_preproc, os.path.splitext(i)[0]+".tif"))
file_writer.writeRaster(pipe, rlayer.width(),rlayer.height(), rlayer.extent(), QgsCoordinateReferenceSystem(EPSG))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.