Tengo un DEM.tif (la simbología utiliza un intervalo igual - 100m) y un archivo de polígonos (regions.shp) con muchas regiones (los nombres están definidos en la columna 'reg_name'). Me gustaría utilizar el Histograma Zonal para producir tablas (y posteriormente archivos xlxs) con dos columnas: la primera debería ser la clase (200-300,300-400 etc.) y la segunda la frecuencia. Tengo DEM.tif y regions.shp en mi documento de mapa y si uso el código en la ventana de python para una región (sin usar un bucle for) funciona. Pero cuando quiero ejecutar el código para generar tablas para cada región no funciona. El problema principal es probablemente porque después de la línea extracted_raster=arcpy.sa.ExtractByMask(in_raster, lyr)
el 'extracted_raster'
no aparece en el índice o en la vista de datos. Así, arcpy.ApplySymbologyFromLayer_management("extracted_raster",in_raster)
no se puede aplicar. Me he dado cuenta de que si ejecuto el código sólo hasta arcpy.ApplySymbologyFromLayer_management("extracted_raster",in_raster)
el 'extracted_raster'
se muestra en mi TOC sólo después de la última iteración (la última región de la lista). Todo 'extracted_raster'
Los rastreos antes de la última región no se muestran... ¿Cómo puedo hacer que aparezcan? Estoy utilizando arcpy.RefreshActiveView()
pero no muestra la trama... Y sé que el Histograma Zonal produce una tabla con columnas para todas las regiones a la vez, pero me gustaría obtener tablas con los mínimos y máximos reales en una tabla para cada región (sin clases con frecuencia cero antes y después). Aquí está mi script:
#Set MapDocument to "CURRENT"...
mxd=arcpy.mapping.MapDocument("CURRENT")
#Defining parameters...
in_raster='DEM.tif' #Raster to be extracted and used for histogram data production...
zone_layer='regions.shp' #This is a layer with regions...
zone_field='reg_name' #The name of the field with names of the regions...
#Code for listing names of regions...
def getValueList (inputTable, field):
values = set()
rows = arcpy.SearchCursor(inputTable)
for row in rows:
values.add(row.getValue(field))
return sorted(values)
arcpy.AddMessage("Koda getValuesList je definirana!")
#Listing names of regions...
list=getValueList(zone_layer, zone_field)
lyr=arcpy.mapping.Layer(zone_layer)
where_clause=(str(zone_field))+"="
#Loop for
for zone in list:
lyr.definitionQuery=where_clause+"'"+str(zone)+"'"
arcpy.RefreshActiveView()
extracted_raster=arcpy.sa.ExtractByMask(in_raster, lyr)
arcpy.RefreshActiveView()
arcpy.ApplySymbologyFromLayer_management("extracted_raster",in_raster)
output_table="histogram_data"+str(zone)+".dbf"
arcpy.sa.ZonalHistogram(lyr,zone_field,"extracted_raster",output_table)
print "Done!
"