1 votos

Condiciones y estadísticas focales en múltiples rásteres

Estoy tratando de escribir un código en Python para varios rasters, sin embargo, me pregunto si hay una forma más rápida de hacer esto.

Estoy generando varios rasters a partir de una declaración condicional para cada valor en el archivo raster. Luego, a partir de estos rasters, estoy realizando estadísticas focales. Estoy guardando todos los rasters intermedios de la declaración condicional y usándolos en las estadísticas focales. ¿Hay alguna forma de evitar eso? ¿Puedo hacer que el código a continuación sea más automático?

# Importar el módulo arcpy
import arcpy
from arcpy.sa import *
#
arcpy.CheckOutExtension("espacial")
arcpy.env.overwriteOutput = True
arcpy.env.workspace = "D:\\_Work\\Test-Model.gdb"
#
CropMap = "ArchivoRaster"
#
#
# Paso 1
# Seleccionar cultivos
select_crop = "select_crop_136"
arcpy.gp.Con_sa(CropMap, "1", select_crop, "0", "Value = 136")
#
select_crop = "select_crop_146"
arcpy.gp.Con_sa(CropMap, "1", select_crop, "0", "Value = 146")
#
select_crop = "select_crop_147"
arcpy.gp.Con_sa(CropMap, "1", select_crop, "0", "Value = 147")
#
#
# Total de cultivos
tot_crop = "tot_crop_136"
arcpy.gp.Con_sa(CropMap, "1", tot_crop, "1", "Value = 136")
#
tot_crop = "tot_crop_146"
arcpy.gp.Con_sa(CropMap, "1", tot_crop, "1", "Value = 146")
#
tot_crop = "tot_crop_147"
arcpy.gp.Con_sa(CropMap, "1", tot_crop, "1", "Value = 147")
#
#
# Paso 2
# Estadísticas focales
#
vecindario = NbrRectangle(1000, 1000, "MAP")
#
inRaster_sel_136 = "select_crop_136"
foc_select_136 = FocalStatistics(inRaster_sel_136, vecindario, "SUM","")
#
inRaster_tot_136 = "tot_crop_136"
foc_tot_136 = FocalStatistics(inRaster_tot_136, vecindario, "SUM", "")
#
# y así sucesivamente para todos los rasters en el Paso 1

0voto

Esto no está probado, pero así es más o menos cómo abordaría esto. No estoy considerando tu lógica como mencionaron otros, solo lo estoy configurando para ti. Además, haz práctica común nunca tener caracteres especiales en los nombres de tus archivos que no sean guiones bajos (por ejemplo, '-' en tu espacio de trabajo).

Hay espacio para mejorar esto, pero debería funcionar para ti.

import arcpy
from arcpy.sa import *

arcpy.CheckOutExtension("spatial")
arcpy.env.overwriteOutput = True
arcpy.env.workspace = "D:\\_Work\\Test-Model.gdb"

CropMap = "RasterFile"

crop = [136, 146, 147]
neighborhood = NbrRectangle(1000, 1000, "MAP")

for e in crop:
    select_crop = Con(Raster(crop_map) == e, 1, 0)
    total_crop = Con(Raster(crop_map) == e, 1, 0)
    arcpy.gp.FocalStatistics_sa(select_crop, "select_{}".format(str(e)), neighborhood , "SUM", "DATA")
    arcpy.gp.FocalStatistics_sa(total_crop, "total_{}".format(str(e)), neighborhood , "SUM", "DATA")

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