Raster Stamp


Github link.

A typical application of GIS is translating biologists’ assessments into spatial analysis algorithms and applying them to the data that we had. So the biologist might say “Everything within 50m of the development’s footprint is ‘highly disturbed, then everything 100m beyond that is ‘somewhat disturbed’, and everything else up to 500m is ‘minimally disturbed'” The GIS person would hear that as “Make three buffers, one at 50m, another at 150m, then another one at 500m, and summarize the amount of suitable habitat that intersects each of them.”

Easy peasy, but rather limited. After all, what exactly means “very disturbed”, “somewhat disturbed” and “minimally disturbed”? This ordinal classification scheme was good enough for the task at hand, but I couldn’t help but see it as a simple case of a much broader application. Let’s look at the case as described above, but using a road as the proposed development:

There’s our ordinally-classified boundaries. You could take this and intersect each of those stretched donut rings with a habitat suitability map to get an idea for how much environmental impact the development has on the area. If we think of it in terms of environmental degradation, we could imagine this being a “stamp” that we press onto a surface, whose height represents the suitability for a species. Such a stamp would look something like this:

And the result of “stamping” it onto a surface would leave an imprint like this:

The rendering in this picture looks a little wonky – it seems to be a graphical glitch in ArcScene, but you can see some plateauing along the edges as a result of the stamp being used.

Doesn’t look so nice, does it? The chosen boundaries are too wide, and they cause a noticeable plateauing effect. It would be nice to be able to create some smoother edges – and while we’re at it, wouldn’t it be nice if we could have complete control over the shape of the stamp? Say, from a mathematical function?

Enter the Raster Stamp

The raster stamp is an arcpy-based tool that I wrote for the “Student of the Year” competition for ESRI in Kranzberg, Germany. I thought back on some old un-executed ideas I had kicking around in my head. Why not be able to give the user control over the exact number and distance of “bands” from the development? And then, automatically calculate the “height” of each band based on a mathematical function, taking the distance from the development as input?

Well, I scripted it up, made a GUI in ArcGIS, and packaged it up into a Toolbox that you can download at my github. It creates such a “stamp” based on user input, which is composed of distances from the input vector features, evaluating their height at a mathematical distance function, also supplied by the user. Here is the stamp created when using a very high number of distances (and therefore bands), and their heights defined by a parabolic decay function:

And probably more intuitively, in 3D:

That looks a lot more natural. If the surface onto which it gets pressed has a sufficient spatial resolution, it could even be considered continuous. The best part is that you could tweak the parameters via the input distance function to adjust the resultant stamp. Different species might warrant different parameters, if we go back to the “habitat degradation” application example. This is just the stamp, though. Here is what it looks like after we “stamp” it onto the surface:

Much nicer. So sleek and smooth. This also much more accurately represents real-world phenomena, which rarely have sudden sharp changes across continuous surfaces. The best part about the raster stamp is that you can define the distance height function as a parameter. Here are three examples of stamped surfaces, from top to bottom, a linear decay function, a parabolic decay function (what we just walked through), and a sinusoidal decay function:

Linear decay function.
Parabolic decay function.
Sinusoidal decay function.

Leave a Reply

Your email address will not be published. Required fields are marked *