Suite

Extraire par lot par masque, mais personnaliser les noms de sortie individuels

Extraire par lot par masque, mais personnaliser les noms de sortie individuels


Je souhaite extraire par masque (le même masque à chaque fois) sur environ 500 rasters, mais je souhaite simplement ajouter le nom de chaque raster en entrée. Donc, si un raster s'intitule Landsat_010182, je veux juste y ajouter _clip pour que je sache toujours ce que chaque image contient. Est-ce quelque chose que je devrais faire en python ou existe-t-il un autre moyen de le faire?

Éditer:

C'est exactement le code que j'essaye :

import arcpy import glob import os arcpy.CheckOutExtension('Spatial') """dossier contenant uniquement des rasters en entrée et rien d'autre""" indir = r'D:SheyenneAtmospherically Corrected LandsatPractice_bands' """chemin absolu à masquer layer""" mask = r'D:Sheyennesheyenne_area_poly.shp' """créer une liste vide pour contenir les chemins vers les rasters d'entrée""" inrasters = [] """remplir la liste inrasters avec tous les chemins vers .tif dans répertoire """ os.chdir(indir) pour r dans glob.glob('*.tif'): inrasters.append(r) # #""" itérer sur toutes les entrées .tif de la liste inrasters""" pour inraster dans inrasters : # # """créer un nom unique pour chaque raster en sortie""" outraster = inraster.replace('.tif','_clip.tif') # """Coupez chaque raster avec son nom unique en sortie"" arcpy.sa.ExtractByMask(inraster,mask)

mais il renvoie l'erreur :

ExecuteError : échec de l'exécution. Les paramètres ne sont pas valides. ERREUR 000865 : Le raster d'entrée : LT50290282011268PAC01_sr_band1.tif n'existe pas. Échec de l'exécution (ExtractByMask).

LT50290282011268PAC01_sr_band1.tif est le premier fichier duinrastersliste

Éditer:

Tout fonctionne comme je m'y attends jusqu'à ce que la boucle commence. Quand j'imprimeinrasterstous sont répertoriés. Quand j'imprimeétrangerseul le deuxième raster de ma liste est imprimé. Donc quelque part dans la boucle, c'est quand les choses s'effondrent. De plus, je n'utilise jamais réellement la variableétrangerqui peut faire partie du problème.

Éditer:

Je l'ai fait fonctionner en utilisant ce code:

import arcpy arcpy.env.workspace='D:SheyennePractice_bands' arcpy.CheckOutExtension('Spatial') """chemin absolu vers votre calque de masque""" mask = r'D:Sheyennesheyenne_area_poly.shp' " ""Boucle à travers les rasters, ajoute des noms et des fichiers de sauvegarde""" rasters = arcpy.ListRasters() pour raster dans les rasters : outraster = raster.replace('.tif','_clip.tif') arcpy.gp.ExtractByMask_sa(raster, masque, outrister)

Vous pouvez copier le champ du générateur de lots et le coller dans Excel pour créer des noms de sortie personnalisés si vous n'utilisez pas python. Peut ensuite être recopié dans le lot à partir d'Excel.

Je recommande fortement d'utiliser cela comme une opportunité d'essayer Python, c'est une application parfaite pour les débutants. Quelque chose comme ça devrait faire l'affaire :

import glob import os """dossier contenant uniquement vos rasters en entrée et rien d'autre""" indir = 'c:/GIS/input_rasters/' """chemin absolu vers votre calque de masque""" mask = 'c:/GIS/ clip_mask.shp' """créer une liste vide pour contenir les chemins vers les rasters d'entrée""" inrasters = [] """remplir la liste des inrasters avec tous les chemins vers .tif dans le répertoire""" os.chdir(indir) pour r dans glob.glob('*.tif'): inrasters.append(r) """ itérer sur tous les .tif d'entrée de la liste inrasters""" pour inraster dans inrasters : """créer un nom unique pour chaque raster en sortie"" " outraster = inraster.replace('.tif','_clip.tif') """Coupe chaque raster avec son nom unique en sortie""" r = arcpy.sa.ExtractByMask(inraster,mask) r.save(outraster )

Il n'est pas nécessaire de parcourir la liste des rasters générés à partir deglob.glob()et les ajouter à une nouvelle liste. J'adopterais l'approche suivante :

  1. Définir les espaces de travail d'entrée et de sortie
  2. Lister tous les rasters en utilisantglobe
  3. Parcourir la liste
  4. Définir le nom et le chemin de sortie
  5. Effectuer l'extrait par masque
  6. Enregistrer l'extrait par masque

import arcpy, glob, os arcpy.CheckOutExtension('Spatial') # dossier contenant uniquement des rasters en entrée et rien d'autre inws = r'D:SheyenneAtmospherically Corrected LandsatPractice_bands' outws = r'D:SheyenneAtmospherically Corrected Landsat Practice_bandsout' # Notez le nouveau dossier de l'espace de travail de sortie # chemin absolu vers le masque de calque mask = r'D:Sheyennesheyenne_area_poly.shp' # Générez une liste de tous les fichiers .tif (Notez que cela répertorie les chemins complets) rasters = glob .glob(os.path.join(inws, "*.tif")) # itérer sur tous les .tif d'entrée de la liste raster pour ras dans les rasters : # Définir le chemin de sortie et le nom outname = os.path.join(outws, os.path.basename(ras).split(".")[0] + "_clp.tif") # Effectue l'EBM out_extract = arcpy.sa.ExtractByMask(ras, mask) # Enregistre la sortie out_extract.save(outname )

Voir la vidéo: Käytetään maskeja