AnsweredAssumed Answered

Kriging and Zonal Statistics for multiple rasters using Python

Question asked by davebetts on Oct 1, 2017
Latest reply on Oct 27, 2017 by davebetts
Branched from an earlier discussion

Branched from: Calculate zonal mean for multiple rasters using Python 

 

I found a solution to the same problem.  This solution will allow you to process all of the raster files in a selected folder instead of naming the raster files individually.  I had 936 rasters I needed to analyze, so the ability to loop through all of the available rasters was a necessity for me. 

 

The script below is my modificaiton of the discussion in the following post: arcpy - Python Script Zonal Stats as Table Loop Question - Geographic Information Systems Stack Exchange 

 

The output from this script is an individual .dbf file (and associated files) for each of the rasters that you process.

import arcpy, os, arcinfo
from arcpy import env
from arcpy.sa import *
arcpy.env.overwriteOutput = True
arcpy.CheckOutExtension("Spatial")

# Select the folder containing raster files.  This script will use ALL of
# the raster files in the selected folder.
env.workspace =
   "C:\\Users\\davebetts\\GIS\\project\\rasters"

# Select the shapefile containing the polygons to use as boundaries
# for zonal statistics
watershedFeat =
   "C:\\Users\\davebetts\\GIS\\project\\zones_polygons.shp"

# Select output folder for saving the output - zonal tables (.dbf files)
outDir =
   "C:\\Users\\davebetts\\GIS\\project\\rasters\\tables\\"

# Something goes wrong with this script during use, perhaps with the
# temporary files.  No error messages are given.  The "print" statements
# inserted within the script keep track of where to restart.  Replace the '0'
# in the "for" statement with the most recently printed integer (printing of
# the variable 'ndx').

x = arcpy.ListRasters()
# the "0" can be replaced by the most recent result of
# "print ndx" in order to restart where the code stopped
for raster in arcpy.ListRasters()[0:]:
   print raster
    ndx = x.index(raster)
    print ndx
    outTable = outDir + raster + ".dbf"
    arcpy.gp.ZonalStatisticsAsTable_sa(watershedFeat,
      "FID", # Select an attribute in the shape file to identify polygons
      raster,
      outTable,
      "NODATA","MEAN")

arcpy.CheckInExtension("Spatial")

!!! This script is still stopping several times partway through the total number of rasters I'm processing.  I have to restart the process using the most recent results from the "prnt ndx" replacing the '0' in line 30. !!!

 

The script needs improvement.  I would love to get rid of the pauses and having to restart. 

 

I also want to combine this script with the scripts that I use before and after into a single script.  The steps I follow and a link to the location of these scripts are as follows:

Kriging and zonal statistics  

  1. Kriging of gridded climate data over multiple time steps.  Individual rasters are produced for each time step.
  2. Zonal statistics of ALL rasters in the selected folder (produced by Step 1)
  3.  Combine all .dbf files (zonal tables) in working directory (produced by Step 2) into a single table.
    • Columns = zones
    • Rows = time steps

Outcomes