Estoy utilizando ArcGIS 9.3 y python 2.5. Mi código es mostrado en la parte inferior de este post.
Tengo un mapa de bits que contiene la intensidad del fuego de la información a 200m de la célula de resolución. Ejecute la secuencia de comandos y la primera parte de la célula devuelve el tamaño del fuego. Esto funciona bien.
Yo, a continuación, el clip de la trama mediante un polígono que representa un boscosa de la cuenca. El nuevo ráster que representa el área de la cuenca que está quemada. Cuando trato de usar el mismo código para contar el número de células de la nueva trama, siempre me da una respuesta de cero, incluso si no es definitivamente una trama creada por la herramienta recortar.
He intentado todas las combinaciones de cada una de las herramientas que puedo pensar.
mi código...
fire = str(ignitionID) + "_" + str(weatherID) + "_Intensity.asc"
print "fire: " + fire
# ---------------------------------------------------------------------------
# this section calculates the size of the fire for model calibration purposes
# ---------------------------------------------------------------------------
# Process: Build Raster Attribute Table...
the_fire = input_fires + fire
shutil.copy(the_fire, "C:\\FIRESTORM\\Workspace") # copy the fire to workspace
the_fire = "C:\\FIRESTORM\\Workspace\\" + fire
try:
gp.BuildRasterAttributeTable_management(the_fire, "NONE")
resultf = gp.GetCount_management(the_fire) # count num of rows in raster
countf = int(resultf.GetOutput(0))
fire_area = countf * 4 # each cell has an area of 4 ha
print "the fire area = " + str(fire_area) + " ha"
except: # the attribute table cannot be created coz the fire is too large
fire_area = 300000 # default value for large fires 300000 ha
print "the fire area EXCEEDS 262,140 ha"
# -----------------------------------------------------------------------------
# this section calculates the area of the catchments that are burnt by the fire
# -----------------------------------------------------------------------------
# Local variables...
catch_extent = input_catch + "WS_Catchment_region.shp" # catchment boundary
fire_raster = "C:\\FIRESTORM\\Workspace\\fire_raster"
fire_ascii = the_fire
Output_raster = "C:\\FIRESTORM\\Workspace\\Extract_ASCI1"
Output_ASCII = "C:\\FIRESTORM\\Workspace\\rastert_extract1.asc"
catch_burn_area = 0 # reset catchment burn area
# Process: ASCII to Raster...
gp.ASCIIToRaster_conversion(fire_ascii, fire_raster, "INTEGER")
# Process: Define Projection... based on projection of catch_extent
desc = gp.Describe(catch_extent)
spatialRef = desc.SpatialReference
gp.DefineProjection_management(fire_raster, spatialRef)
# Process: Extract by Mask...
gp.ExtractByMask_sa(fire_raster, catch_extent, Output_raster)
# Convert raster to ascii
gp.RasterToASCII_conversion(Output_raster, Output_ASCII)
# Process: Build Raster Attribute Table...
gp.BuildRasterAttributeTable_management(Output_ASCII, "OVERWRITE")
# count number of rows in raster
resulti = gp.GetCount_management(Output_ASCII)
counti = int(resulti.GetOutput(0))
catch_burn_area = counti * 4 # each cell has an area of 4 ha
print "catchment area burnt = " + str(catch_burn_area) + " ha"