"Failed to open raster dataset" in zonal statistics

2784
13
07-11-2012 07:11 AM
RPatarasuk
New Contributor II
Hi,

I am trying to use zonal statistics to calculate the average amount of rainfall for each county. Here is my code:

# Import arcpy module
import arcpy
from arcpy import env
from arcpy.sa import *

# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")

# Input data source
arcpy.env.workspace = "S:/Work/Risa/Trials_Errors/InputFiles02"
arcpy.env.overwriteOutput = True

ZoneShapefile = "S:/Work/Risa/USA Boundary_AlbersNAD83/PINEMAP_Counties_USCensus.shp"

# Output File
OutputFolder = "S:/Work/Risa/Trials_Errors/ZonalStats"

# Loop through a list of files in the workspace
RasterFiles = arcpy.ListRasters()

# Local variables:
for filename in RasterFiles:
    print("Processing: " + filename)
    inRaster = arcpy.env.workspace + "/" + filename
    fileroot = filename
    outRaster = OutputFolder + "/" + "Avg_" + fileroot + ".tif"
    
    # Process: Zonal Statistics
    arcpy.gp.ZonalStatistics_sa(ZoneShapefile, "FID", inRaster, outRaster, "MEAN", "DATA")

print " "
print ":o) End Processing :)"



The problem is that when I run it, it creates this error:


Processing: ppt_1970_01.tif

Traceback (most recent call last):
File "S:/Work/Risa/Python codes/zonalStats_test.py", line 36, in <module>
arcpy.gp.ZonalStatistics_sa(ZoneShapefile, "FID", inRaster, outRaster, "MEAN", "DATA")
File "C:\Program Files (x86)\ArcGIS\Desktop10.0\arcpy\arcpy\geoprocessing\_base.py", line 474, in <lambda>
return lambda *args: val(*gp_fixargs(args))
ExecuteError: ERROR 999999: Error executing function.
Failed to open raster dataset
Failed to execute (ZonalStatistics).

What is weird is that every time when I run the program, it creates a raster file in the input folder, which I didn't specify. e.g. "t_t126". If I hit run again, will create another file and so on. These files don't give me the average value by the county either. It gave me a weird number. If the program runs properly, it should create "Avg_ppt_1970_01.tif" in the output folder.

However, if I run one file at a time (exported from Model Builder), it works fine. Here's the code that works.

# Import arcpy module
import arcpy

# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")


# Local variables:
PINEMAP_Counties_USCensus = "S:/Work/Risa/USA Boundary_AlbersNAD83/PINEMAP_Counties_USCensus.shp"
arcpy.env.overwriteOutput = True
ppt_1970_01_tif = "S:/Work/Risa/Trials_Errors/InputFiles02/ppt_1970_01.tif"
ZonalSt_shp2 = "S:/Work/Risa/Trials_Errors/ZonalStats/ZonalSt_shp.tif"

# Process: Zonal Statistics
arcpy.gp.ZonalStatistics_sa(PINEMAP_Counties_USCensus, "FID", ppt_1970_01_tif, ZonalSt_shp2, "MEAN", "DATA")

print "Done!"



So, I don't get it why it says "Failed to open raster dataset".

Here are the sample files (see the attachments)


Any thoughts and help would be pretty much appreciated.

Thank you.
Tags (2)
0 Kudos
13 Replies
MathewCoyle
Frequent Contributor
I'd imagine those rasters you are seeing are intermediate data that isn't cleaned up when it crashes since you specified your input directory as your working directory, all intermediate data will be created there. Also, I am not sure how you are accessing your ZonalStatistics tool since it isn't under the gp, it is under sa. The tool call should look like this.
arcpy.sa.ZonalStatistics(...)

Are you running this from inside an Arc session or stand alone?
0 Kudos
RPatarasuk
New Contributor II
Dear Matt,

Thank you for the suggestion. Let me try that. I am running it as a stand alone script. I exported the script ("arcpy.gp.ZonalStatistics_sa") from the Model Maker. So, you are saying that I should have a scratch workspace folder, right?
0 Kudos
RPatarasuk
New Contributor II
Dear Matt,

This what I got when I used
arcpy.sa.ZonalStatistics(ZoneShapefile, "FID", inRaster, outRaster, "MEAN", "DATA")


Traceback (most recent call last):
File "S:/Work/Risa/Python codes/zonalStats_test.py", line 38, in <module>
arcpy.sa.ZonalStatistics(ZoneShapefile, "FID", inRaster, outRaster, "MEAN", "DATA")
TypeError: ZonalStatistics() takes at most 5 arguments (6 given)

Now, i can see what you mean by those temporary raster files. That is now a minor problem. The major problem is (I think), the program can't read the raster files.

Risa
0 Kudos
MathewCoyle
Frequent Contributor
Dear Matt, 

This what I got when I used  
arcpy.sa.ZonalStatistics(ZoneShapefile, "FID", inRaster, outRaster, "MEAN", "DATA")


Traceback (most recent call last):
File "S:/Work/Risa/Python codes/zonalStats_test.py", line 38, in <module>
arcpy.sa.ZonalStatistics(ZoneShapefile, "FID", inRaster, outRaster, "MEAN", "DATA")
TypeError: ZonalStatistics() takes at most 5 arguments (6 given)


Now, i can see what you mean by those temporary raster files. That is now a minor problem. The major problem is (I think), the program can't read the raster files. 

Risa


Oh right you are using the wrong syntax. ZonalStats returns a raster that you have to then save.
http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//009z000000w7000000.htm
0 Kudos
RPatarasuk
New Contributor II
Well, how come arcpy.gp.ZonalStatistics_sa(...) works? in a simple program like this?

# Import arcpy module
import arcpy

# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")


# Local variables:
PINEMAP_Counties_USCensus = "S:/Work/Risa/USA Boundary_AlbersNAD83/PINEMAP_Counties_USCensus.shp"
arcpy.env.overwriteOutput = True
ppt_1970_01_tif = "S:/Work/Risa/Trials_Errors/InputFiles02/ppt_1970_01.tif"
ZonalSt_shp2 = "S:/Work/Risa/Trials_Errors/ZonalStats/ZonalSt_shp.tif"

print "reading file"

# Process: Zonal Statistics
arcpy.gp.ZonalStatistics_sa(PINEMAP_Counties_USCensus, "ZoneField", ppt_1970_01_tif, ZonalSt_shp2, "MEAN", "DATA")

print "Done!"


so, how come when I set a loop through the files, it doesn't work?!?!

Here is my modify code which doesn't work. I had three types of zonalstats commands and none of them works. I put "#" at the front for the time being.

# Import arcpy module
import arcpy
from arcpy import env
from arcpy.sa import *

# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")

# Input data source
arcpy.env.workspace = "S:/Work/Risa/Trials_Errors/InputFiles02"
arcpy.env.scratchWorkspace = "S:/Work/Risa/Trials_Errors/ScratchWorkSpace"
arcpy.env.overwriteOutput = True

ZoneData = "S:/Work/Risa/USA Boundary_AlbersNAD83/PINEMAP_Counties_USCensus.shp"

# Output File
OutputFolder = "S:/Work/Risa/Trials_Errors/ZonalStats"

# Loop through a list of files in the workspace
RasterFiles = arcpy.ListRasters()
print RasterFiles

# Local variables:
for filename in RasterFiles:
    
    print("Processing: " + filename)
    inRaster = arcpy.env.workspace + "/" + filename
    fileroot = filename
    outRaster = OutputFolder + "/" + "Avg_" + fileroot + ".tif"
    
    # Process: Zonal Statistics
    #arcpy.gp.ZonalStatistics_sa(ZoneData, "ZoneField", inRaster, outRaster, "MEAN", "DATA")
    #arcpy.sa.ZonalStatistics(ZoneData, "ZoneField", inRaster, "MEAN", "DATA")
    #outZonalStatistics = ZonalStatistics(ZoneData, "ZoneField", inRaster, "MEAN", "DATA")
    
    # Process: Copy Raster
    #outZonalStatistics.save(OutputFolder + outRaster)

    
print " "
print ":o) End Processing :)"
print arcpy.GetMessages()
0 Kudos
MathewCoyle
Frequent Contributor
Are you getting the same error?

Try this as your loop.

for filename in RasterFiles:
    print "Processing: {0}".format(filename)
    inRaster = os.path.join(input_dir,filename)
    outRaster = os.path.join(OutputFolder,"Avg_" + filename)

    # Process: Zonal Statistics
    saveRaster = arcpy.sa.ZonalStatistics(ZoneShapefile, "FID", inRaster, "MEAN", "DATA")
    saveRaster.save(outRaster)
0 Kudos
RPatarasuk
New Contributor II
Dear Matt,

Sorry, I am new to Python. I tried the loop that you gave me but it still gives me the same errors. Here is the code that I put together:

# Import arcpy module
import arcpy, os
from arcpy import env
from arcpy.sa import *

# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")

# Input data source
arcpy.env.workspace = "S:/Work/Risa/Trials_Errors/InputFiles02"
arcpy.env.scratchWorkspace = "S:/Work/Risa/Trials_Errors/ScratchWorkSpace"
arcpy.env.overwriteOutput = True

ZoneData = "S:/Work/Risa/USA Boundary_AlbersNAD83/PINEMAP_Counties_USCensus.shp"

# Output File
OutputFolder = "S:/Work/Risa/Trials_Errors/ZonalStats"

# Loop through a list of files in the workspace
RasterFiles = arcpy.ListRasters()
print RasterFiles
print " "

# Local variables:
for filename in RasterFiles:
    print "Processing: {0}".format(filename)
    input_dir = arcpy.env.workspace
    inRaster = os.path.join(input_dir,filename)
    outRaster = os.path.join(OutputFolder,"Avg_" + filename)

    # Process: Zonal Statistics
    saveRaster = arcpy.sa.ZonalStatistics(ZoneData, "ZoneField", inRaster, "MEAN", "DATA")
    saveRaster.save(outRaster)

print " "
print ":o) End Processing :)"
print arcpy.GetMessages()


and here is the error message:

[u'ppt_1970_03.tif', u'ppt_1970_04.tif', u'ppt_1970_05.tif']
 
Processing: ppt_1970_03.tif

Traceback (most recent call last):
  File "S:/Work/Risa/Python codes/zonalStats_test02.py", line 39, in <module>
    saveRaster = arcpy.sa.ZonalStatistics(ZoneData, "ZoneField", inRaster, "MEAN", "DATA")
  File "C:\Program Files (x86)\ArcGIS\Desktop10.0\arcpy\arcpy\sa\Functions.py", line 5787, in ZonalStatistics
    ignore_nodata)
  File "C:\Program Files (x86)\ArcGIS\Desktop10.0\arcpy\arcpy\sa\Utils.py", line 47, in swapper
    result = wrapper(*args, **kwargs)
  File "C:\Program Files (x86)\ArcGIS\Desktop10.0\arcpy\arcpy\sa\Functions.py", line 5780, in wrapper
    ignore_nodata)
  File "C:\Program Files (x86)\ArcGIS\Desktop10.0\arcpy\arcpy\geoprocessing\_base.py", line 474, in <lambda>
    return lambda *args: val(*gp_fixargs(args))
ExecuteError: ERROR 999999: Error executing function.
Failed to open raster dataset
Failed to execute (ZonalStatistics).


thank you very much for your help. I will post the previous code and error message shortly.

Risa
0 Kudos
RPatarasuk
New Contributor II
so for this code

# Import arcpy module
import arcpy
from arcpy import env
from arcpy.sa import *

# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")

# Input data source
arcpy.env.workspace = "S:/Work/Risa/Trials_Errors/InputFiles02"
arcpy.env.scratchWorkspace = "S:/Work/Risa/Trials_Errors/ScratchWorkSpace"
arcpy.env.overwriteOutput = True

ZoneData = "S:/Work/Risa/USA Boundary_AlbersNAD83/PINEMAP_Counties_USCensus.shp"

# Output File
OutputFolder = "S:/Work/Risa/Trials_Errors/ZonalStats"

# Loop through a list of files in the workspace
RasterFiles = arcpy.ListRasters()
print RasterFiles
print " "

# Local variables:
for filename in RasterFiles:
    print("Processing: " + filename)
    inRaster = arcpy.env.workspace + "/" + filename
    fileroot = filename
    outRaster = OutputFolder + "/" + "Avg_" + fileroot + ".tif"
    
    # Process: Zonal Statistics
    outZonalStatistics = arcpy.sa.ZonalStatistics(ZoneData, "ZoneField", inRaster, "MEAN", "DATA")
    
    # Process: Copy Raster
    outZonalStatistics.save(outRaster)

print " "
print ":o) End Processing :)"
print arcpy.GetMessages()


it gives me this error, which is pretty much the same as before:

>>> ================================ RESTART ================================
>>> 
[u'ppt_1970_03.tif', u'ppt_1970_04.tif', u'ppt_1970_05.tif']
 
Processing: ppt_1970_03.tif

Traceback (most recent call last):
  File "S:\Work\Risa\Python codes\zonalStats_test.py", line 39, in <module>
    outZonalStatistics = arcpy.sa.ZonalStatistics(ZoneData, "ZoneField", inRaster, "MEAN", "DATA")
  File "C:\Program Files (x86)\ArcGIS\Desktop10.0\arcpy\arcpy\sa\Functions.py", line 5787, in ZonalStatistics
    ignore_nodata)
  File "C:\Program Files (x86)\ArcGIS\Desktop10.0\arcpy\arcpy\sa\Utils.py", line 47, in swapper
    result = wrapper(*args, **kwargs)
  File "C:\Program Files (x86)\ArcGIS\Desktop10.0\arcpy\arcpy\sa\Functions.py", line 5780, in wrapper
    ignore_nodata)
  File "C:\Program Files (x86)\ArcGIS\Desktop10.0\arcpy\arcpy\geoprocessing\_base.py", line 474, in <lambda>
    return lambda *args: val(*gp_fixargs(args))
ExecuteError: ERROR 999999: Error executing function.
Failed to open raster dataset
Failed to execute (ZonalStatistics).

>>> 
0 Kudos
RPatarasuk
New Contributor II
and for this

it gives me

# Import arcpy module
import arcpy
from arcpy import env
from arcpy.sa import *

# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")

# Input data source
arcpy.env.workspace = "S:/Work/Risa/Trials_Errors/InputFiles02"
arcpy.env.scratchWorkspace = "S:/Work/Risa/Trials_Errors/ScratchWorkSpace"
arcpy.env.overwriteOutput = True

ZoneData = "S:/Work/Risa/USA Boundary_AlbersNAD83/PINEMAP_Counties_USCensus.shp"

# Output File
OutputFolder = "S:/Work/Risa/Trials_Errors/ZonalStats"

# Loop through a list of files in the workspace
RasterFiles = arcpy.ListRasters()
print RasterFiles
print " "

# Local variables:
for filename in RasterFiles:
    print("Processing: " + filename)
    inRaster = arcpy.env.workspace + "/" + filename
    fileroot = filename
    outRaster = OutputFolder + "/" + "Avg_" + fileroot + ".tif"
    
    # Process: Zonal Statistics
    arcpy.gp.ZonalStatistics_sa(ZoneData, "ZoneField", inRaster, outRaster, "MEAN", "DATA")
    
print " "
print ":o) End Processing :)"
print arcpy.GetMessages()



this error message:

>>> ================================ RESTART ================================
>>> 
[u'ppt_1970_03.tif', u'ppt_1970_04.tif', u'ppt_1970_05.tif']
 
Processing: ppt_1970_03.tif

Traceback (most recent call last):
  File "S:\Work\Risa\Python codes\zonalStats_test.py", line 39, in <module>
    arcpy.gp.ZonalStatistics_sa(ZoneData, "ZoneField", inRaster, outRaster, "MEAN", "DATA")
  File "C:\Program Files (x86)\ArcGIS\Desktop10.0\arcpy\arcpy\geoprocessing\_base.py", line 474, in <lambda>
    return lambda *args: val(*gp_fixargs(args))
ExecuteError: ERROR 999999: Error executing function.
Failed to open raster dataset
Failed to execute (ZonalStatistics).

>>> 
0 Kudos