Suite

Processus par lots gdalwarp


J'ai téléchargé de nombreux fichiers hdf à partir d'un site ftp. La moitié d'entre eux étaient de niveau 1 et le reste de niveau 2. Le format Lvl1 est Afile.A1_AC.sample.hdf et le format lvl 2 est : Afile.A1_AC.sample.hdf.

Comment vais-je effectuer un traitement par lots en projetant uniquement tous les fichiers de niveau2 ?

Comment vais-je filtrer ces fichiers et créer un nouveau répertoire ?

Voici ce que j'ai pour l'instant :

def inputData(self, event): def findSDS (path, filter): pour root, dirs, files in os.walk(path): for file in fnmatch.filter(files, filter): yield file for sds in findSDS(' /chemin/vers/fichier', '*.hdf'): inSDS = 'HDF4_SDS:' + '/chemin/vers/fichier' + '/' + sds + ':01' chemin = 'D:/new/dir ' outTIFF = chemin + sds + '.tif' cmd = 'gdalwarp -geoloc -t_srs "+proj=longlat +datum=WGS84" -te 113.205 1.120 157.105 2.005 %s %s' % (inSDS, outTIFF) os.system( cmd) os.mkdir(chemin)

(essayé d'appeler .bat à partir du script python et exécutez le script. Et il vient de créer un répertoire vide/nouveau (out_path). J'ai essayé d'appeler le .bat à partir de la ligne cmd et voici le résultat :

C:sample>project.bat C:sample>set in_path=D:path	ofile C:sample>set out_path=D:
ewfolder C:sample>md D:
ewfolder Un sous-répertoire ou un fichier D:
ouveaudossier existe déjà. C:sample>cd D:path	ofile C:sample>FORFILES /m *A1_AC*.hdf /C "cmd /c gdalwarp -geoloc -t_srs "+proj=longlat +datum=WGS84" -te 113.205 1.120 157.105 2.005 @path D:
[email protected]" ERREUR : argument/option invalide - '+datum=WGS84 -te 113.205 1.120 157.105 2.005 @path D:
[email protected]'. Tapez " FORFILES /? " pour l'utilisation.

C:sample>project.bat C:sample>set in_path=D:path	ofile C:sample>set out_path=D:
ewfolder C:sample>md D:
ewfolder C:sample >cd D:cheminversfichier C:sample>FORFILES /m *A1_AC*.hdf /C "cmd /c gdalwarp -geoloc -t_srs "+proj=longlat +datum=WGS84" -te 113.205 1.120 157.105 2.005 @path D:
[email protected]" ERREUR : Fichiers de type "*A1_AC*.hdf" introuvables.

C:sample>projected.bat C:sample>set in_path=D:path	ofile C:sample>set out_path=D:
ewfolder C:sample>md D:
ewfolder C:sample >cd /d D:cheminversfichier C:sample>FORFILES /m *A1_AC*.hdf /C "cmd /c gdalwarp -geoloc -t_srs "+proj=longlat +datum=WGS84" -te 113.205 1.120 157.105 2.005 @path D:
ewfolder/@fname.tif" ERREUR 1 : La traduction de la source ou de la cible SRS a échoué : '+proj=longlat

J'ai essayé d'exécuter gdalwarp dans la ligne cmd et cela a réussi :

C:sample>gdalwarp -geoloc -t_srs "+proj=longlat +datum=WGS84" -te 113.205 1.120 157.105 2.005 HDF4_SDS:hdf:"Afile.A1_AC.sample.hdf":01 sample.tif Création du fichier de sortie 1941P x 1670L. Traitement du fichier d'entrée HDF4_SDS:hdf:"Afile.A1_AC.sample.hdf":01. 0… 10… 20… 30… 40… 50… 60… 70… 80… 90… 100 - terminé.

Voici une solution en tant que script batch Windows, cela vous aidera peut-être :

set in_path=path_to_stored_hdfs set out_path=path_to_proccessed_ones md %out_path% cd /d %in_path% FORFILES /m *L2_LAC*.hdf /C "cmd /c gdalwarp -geoloc -t_srs EPSG:4326 -te 113.205 1.120 15DSF @file:01 %out_path%@fname.tif"

/mest un masque pour faire correspondre les noms de fichiers souhaités - pour plus de détails : http://ss64.com/nt/forfiles.html

En regardant votre code, je comprends que vous avez défini GDAL chemin dans le système pour que gdalwarp fonctionne.


vous pouvez utiliser batch hegtool, lisez ceci :

http://newsroom.gsfc.nasa.gov/sdptoolkit/HEG/HEGFAQ_CLI.html

et ça:

http://newsroom.gsfc.nasa.gov/sdptoolkit/HEG/HEG_Batch_job_Help.htm