Save 2D NumPy Array as an ARC/INFO ASCII GRID
An ARC/INFO ASCII GRID file is a format for storing (among other thing) digital elevation models and looks like the following:
ncols 4
nrows 6
xllcorner 0.0
yllcorner 0.0
cellsize 50.0
NODATA_value -9999
-9999 -9999 5 2
-9999 20 100 36
3 8 35 10
32 42 50 6
88 75 27 9
13 5 1 -9999
The fields define the number of columns and rows, the latitude and longitude (or whatever coordinate system is being used), the dimensions of the grid cells (in the same coordinate system), and a value which indicates that no data is available for a particular cell. Following this, there is a rectangular array of ASCII-encoded numbers representing the digital elevation model.
The following function prints a 2D NumPy array in this format:
def writeArrayToArcGrid(arr,filename,xll,yll,cellsize,no_data_val):
arr = np.copy(arr)
arr[np.isnan(arr)] = no_data_val
headerstring = bytes('NCOLS %d\nNROWS %d\nXLLCENTER %f\nYLLCENTER %f\nCELLSIZE %f\nNODATA_value %f\n' %
(arr.shape[1], arr.shape[0], xll, yll, 1, no_data_val), 'UTF-8')
with open(filename,'wb') as fout:
fout.write(headerstring)
np.savetxt(fout,arr,'%5.2f')