Ich benutze Python und QGIS 2.0. Ich versuche, Raster in einem Ordner nach einem Polygon-Feature zu schneiden. Es ist das erste Mal, dass ich "PyQGIS" benutze (sagen wir mal). Wie auch immer, ich bekomme mein einfaches Skript nicht zum Laufen, jeder Vorschlag wäre sehr dankbar!
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()
Im Folgenden sind die Verbesserungen aufgeführt, die ich seitdem vorgenommen habe, ohne dass das Skript funktioniert, aber ich denke, ich komme vielleicht näher ...
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)
Ich denke, dass der Befehl "gdal" möglicherweise nicht stimmt, da die Funktion "print" ihre Aufgabe ordnungsgemäß erfüllt, aber keine Datei in die Ausgabe geschrieben wird und ich auch keinen Fehler erhalte. Übrigens war es schwierig, eine einfache Dokumentation zur GDAL-Codierung zu finden ...
CLIP
im cmd
Ausdruck ist das Problem. Wenn Sie eine Variable in eine Zeichenfolge einfügen, wird diese nicht gelesen. Stattdessen würden Sie die Zeichenfolge mit der Variablen verketten.
print(cmd)
anstelle von os.system(cmd)
. Ihre outRaster
Variable ist nicht korrekt.