I am trying to save an ESRI grid built from a numpy array and am getting an error I've never seen before:
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'GpMetadataFunctions, Version=10.2.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86' or one of its dependencies. The system cannot find the file specified. File name: 'GpMetadataFunctions, Version=10.2.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86' at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) at System.Reflection.Assembly.Load(String assemblyString) at GetManagedType(Char* _assembly, Char* _path, Char* _className)
WRN: Assembly binding logging is turned OFF. To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1. Note: There is some performance penalty associated with assembly bind failure logging. To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
I'm using an alternative workflow for now, but I'd still like to try to solve the problem with saving a raster from a numpy array.
Here is what I was trying to do:
- read in an ESRI grid,
- create an numpy array,
- do some manual reclassification, and
- save the processed array to a new ESRI grid
The process proceeds as expected through step 3 and fails upon step 4 AFTER the array has been converted to a raster object (see code below). It is when the
save method of the raster is called that the error is encountered.
I got the same error when trying to create a numpy array from geo-tiff rasters (failed on calling
arcpy.RasterToNumPyArray); I was able to get around this by copying the original .tifs to ESRI grid format first.
Here is my code:
import arcpy import numpy as np arcpy.env.overwriteOutput = True arcpy.env.workspace = 'SwbLandUseParameters.gdb' # List tables to use in the reclassification tables = arcpy.ListTables('SwbLandUseParameters*') # List land use rasters lu_rasters = arcpy.ListRasters('nlcd*', 'GRID') for lu_raster in lu_rasters: print 'Processing raster', lu_raster # Get raster properties r = arcpy.Raster(lu_raster) ll = r.extent.lowerLeft x_cell_size = r.meanCellWidth y_cell_size = r.meanCellHeight ncol = r.width nrow = r.height year = lu_raster[-4:] # Convert the raster to a numpy array lu = arcpy.RasterToNumPyArray(r, ll, ncol, nrow) # Create a suite of reclassified rasters using parameter tables for tbl in tables: temp = np.copy(lu) with arcpy.da.SearchCursor(tbl, '*') as cur: for row in cur: print row old_val = row new_val = row temp[temp==old_val] = new_val new_raster = arcpy.NumPyArrayToRaster(temp, ll, x_cell_size, y_cell_size, 0) new_raster_name = tbl + '_' + year print ' ', new_raster_name new_raster.save(new_raster_name)