J'utilise python et QGIS 2.0. J'essaie de découper les rasters dans un dossier par une entité polygonale. C'est la première fois que j'utilise (disons) "PyQGIS", j'étais habitué à arcpy avant. Quoi qu'il en soit, je ne fais pas fonctionner mon script simple, toute suggestion serait très appréciée!
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()
Vous trouverez ci-dessous les améliorations que j'ai apportées depuis maintenant, sans que le script fonctionne, mais je pense que je vais peut-être me rapprocher ...
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)
Je pense qu'il pourrait y avoir quelque chose de mal dans la commande "gdal", car la fonction "print" fait son travail correctement, mais aucun fichier n'est écrit dans la sortie, ni je ne reçois aucune erreur. Au fait, il a été difficile de fonder une documentation facile sur le codage gdal ...
CLIP
dans l'cmd
expression est le problème. Si vous mettez une variable dans une chaîne, elle n'est pas lue. Au lieu de cela, vous concaténeriez la chaîne avec la variable.print(cmd)
à la place deos.system(cmd)
. VotreoutRaster
variable n'est pas correcte.Réponses:
Je suis d'accord avec Nathan. Vous devez pythoniser l'intégralité de votre script. Remplacez donc votre
for
boucle par quelque chose comme ceci:Remarque 1: je suppose que vos fichiers raster sont GeoTIFF (
*.tif
).Remarque 2:
-of GTiff
n'est pas nécessaire danscmd
, car il s'agit du format de sortie par défaut dansgdalwarp
.la source
os.system
, tu as raison.J'ai finalement réussi avec ce script très simple et propre, qui appelle GDAL depuis Python sans l'importer (comme suggéré, mais en utilisant la méthode "Call ()" au lieu de "os.system ()". J'espère que cela pourrait aider!
la source
Version modifiée de la solution de umbe1987 pour les utilisateurs Linux:
la source