[GIS] Calculating Topographic Exposure with ArcGIS Raster Calculator

arcgis-desktopclimateraster-calculatorspatial-analysttopography

I need you help trying to calculate Topographic Exposure (TOPEX) on a DEM in ArcGIS. I am trying to figure out wind exposure on a DEM with 25m cells.
There is a great blog post where someone explains how to do it but he uses GRASS. Jamie Popkin's GIS Blog I thought I would be able to put the same equation into ArcGIS Raster Calculator but it says the equation is invalid. I've tried playing with it as much as I can but I can't seem to make it work.

His first equation is:

r.mapcalc incl4north = "atan(((dem - dem[4,0])) / ((25 * 4)))"

And then he goes on to string a bunch of them together

enter image description here

Does anyone know how the equation should appear in Raster Calculator in ArcGIS Desktop?

Best Answer

From what I know, it is not possible to use relative pixel index in ArcGIS raster calculator like you can do in GRASS. The best way to use such indexing method would be to use arcpy.rastertonumpyarray then loop on all pixel values to compute your angles. Something like

for i in range(height):
    for j in range(width):
        newarray[i,j] = max( math.atan((oldarray[i, j+4] - array[i,j])/4), atan((oldarray[i, j+8] - array[i,j])/8)) etc... )

Of course, this code will not work as it is because it some indices will be out of range. Also, you should be careful because numpy indexing start at the top left.

Another workaround is to use a stack of shifted raster that you could use in raster calculator, but this would give you a lot of useless rasters.