Używam Pythona i QGIS 2.0. Próbuję przyciąć rastry do folderu według jednej funkcji wielokąta. To pierwszy raz, gdy używam (powiedzmy) „PyQGIS”, wcześniej byłem przyzwyczajony do gry. Tak czy inaczej, mój prosty skrypt nie działa, każda sugestia byłaby bardzo mile widziana!
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()
Poniżej znajdują się ulepszenia, które wprowadziłem od tej pory, ale nie uruchamiają skryptu, ale myślę, że mogę być coraz bliżej ...
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)
Myślę, że może być coś złego w poleceniu „gdal”, ponieważ funkcja „print” wykonuje swoje zadanie prawidłowo, ale żaden plik nie jest zapisywany na wyjściu, ani nie otrzymuję żadnego błędu. Nawiasem mówiąc, trudno było znaleźć łatwą dokumentację na temat kodowania gdal ...
CLIP
W cmd
ekspresji jest problem. Jeśli wstawisz zmienną do łańcucha, nie zostanie ona odczytana. Zamiast tego połączysz łańcuch ze zmienną.
print(cmd)
zamiast os.system(cmd)
. Twoja outRaster
zmienna jest nieprawidłowa.