4 votos

Iterar a través de los rásteres en las subcarpetas utilizando el Model Builder

Tengo una carpeta de directorio de datos de precipitación; dentro de esta carpeta hay subcarpetas para los años 1901-2014. En cada una de estas subcarpetas hay 12 archivos de cuadrícula .asc; cada archivo representa un mes del año (es decir, de enero a diciembre).

Estoy intentando crear un modelo que recorra cada una de estas subcarpetas y realice un cálculo en los 12 archivos de la cuadrícula (por ejemplo: calcular la precipitación anual total). Puede que quiera realizar otros cálculos, pero por ahora me gustaría que el modelo funcionara.

He probado el Iterar el espacio de trabajo con la función Calculadora Raster y el Iterar rastreos con la función Calculadora Raster pero no pude conseguir que ninguno de los dos funcionara como yo quería.

También probé Iterar rastreos con Recoger los valores y Estadísticas de las células - pero eso tampoco funciona.

A continuación se muestran los modelos que he probado: RastCalcCalcStats

0 votos

Hola y bienvenido a GIS Stack Exchange. Basado en "raster calculator" y "model builder" he asumido que estás usando ArcGIS Desktop, y he añadido etiquetas en consecuencia. Siéntase libre de eliminar las etiquetas si no es correcto

0 votos

¿Podrías editar tu pregunta para incluir una imagen de tu modelo que se acerque más a lo que quieres, por favor? Mostrar con precisión lo que has probado y dónde te has quedado atascado suele ser la mejor manera de atraer a posibles contestadores.

1voto

Flinkman Puntos 4821

Cuando me enfrento a un problema como éste, utilizo os.walk() que devuelve todos los archivos y luego ver si los archivos coinciden con lo que quiero por la extensión, aquí es un ejemplo para shapefiles:

import sys, os, arcpy
InFolder = sys.argv[1]

for (path, dirs, files) in os.walk(InFolder):
    for ThisFile in files:
        fName,fExt = os.path.splitext(ThisFile)
        if fExt.upper() == ".SHP":
            fc = path + "\\" + ThisFile

Cambiar fExt.upper() == ".SHP": a fExt.upper() == ".ASC": y luego operar normalmente con fc siendo la ruta completa del conjunto de datos.

La otra opción es poner todos los rásteres de forma manual... o semimanual:

Abra un símbolo del sistema en su carpeta base y escriba:

DIR *.ASC /B/S

Lo que da una lista de todos los archivos ASCII en todas las subcarpetas... si hay demasiados para seleccionar entonces intente canalizar a un archivo de texto:

DIR *.ASC /B/S > ASC_File_List.txt
START NOTEPAD ASC_File_List.txt

A continuación, seleccione todo, copie y pegue en la herramienta.

0voto

Dun Peal Puntos 128

Para que el modelo Collect Values funcione en subcarpetas individuales, tendrá que utilizar otro submodelo anidado dentro de su . Haga un modelo con el iterador Iterate Workspaces en él con recursividad establecida en falso. A continuación, modifique su segundo modelo para que requiera el espacio de trabajo (es decir, la subcarpeta) como parámetro, y alimente el espacio de trabajo del modelo principal en la operación Iterate Rasters. El modelo principal realizará entonces todos los cálculos que desee en cada carpeta en secuencia. Sólo asegúrese de establecer sus variables para que el nombre del archivo de salida se mantenga en la misma carpeta o se nombre con algo que dependa de la ruta.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X