Python ve QGIS 2.0 kullanıyorum. Bir çokgen özelliği ile bir klasörde rasters klip çalışıyorum. "PyQGIS" i (ilk diyelim) kullanarak benim için ilk kez, daha önce kemirmeye alışkındım. Neyse, benim basit senaryomun çalışmasını alamıyorum, herhangi bir öneri çok takdir edilecektir!
import qgis.core, qgis,utils
QgsApplication.setPrefixPath("C:/OSGeo4W64/apps/qgis", True)
QgsApplication.initQgis()
CLIP= "C:/Users/unim/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/study_area_foscagno.shp"
INPUT_FOLDER="C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/LE71930282000259EDC00"
OUTPUT= "C:/Users/unim/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/foscagno_pyqgis/"
for RASTER in INPUT_FOLDER.tif
do
echo "Processing $RASTER"
gdalwarp -q -cutline CLIP -crop_to_cutline -of GTiff RASTER OUTPUT+ "clip_"+ RASTER
done
QgsApplication.exitQgis()
Aşağıda, senaryoyu işe yaramamaktan beri yaptığım gelişmeler var, ancak sanırım yaklaşıyorum ...
import qgis.core, qgis.utils, os, fnmatch
from osgeo import gdal
CLIP= "C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/study_area_foscagno.shp"
INPUT_FOLDER= "C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/LE71930282000259EDC00/DNs2Reflectance_LE71930282000259EDC00"
OUTPUT= "C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/Cloud_mask_AltaValtellina/clip_2_foscagno"
def findRasters (path, filter):
for root, dirs, files in os.walk(path):
for file in fnmatch.filter(files, filter):
yield os.path.join (root, file)
for raster in findRasters (INPUT_FOLDER, '*.tif'):
print (raster)
outRaster = OUTPUT + '/clip_' + raster
cmd = 'gdalwarp -dstnodata 0 -q -cutline CLIP -crop_to_cutline %s %s' % (raster, outRaster)
os.system (cmd)
Ben "gdal" komut yanlış bir şey olabilir düşünüyorum, "baskı" fonksiyonu düzgün işini yapıyor, ama hiçbir dosya çıktı yazılır, ne de herhangi bir hata alırsınız. Bu arada, gdal kodlama hakkında kolay bir dokümantasyona düşmek zordu ...
CLIP
Olarak cmd
ifade sorundur. Dizeye bir değişken koyarsanız, değişken okunmaz. Bunun yerine, dizeyi değişkenle birleştirirsiniz.
print(cmd)
yerinde kontrol edin os.system(cmd)
. Kişisel outRaster
değişken doğru değil.