Super-Fast, Server-Side Raster Analysis on the Web

Click to launch app

Click to launch app

With this app you can perform sub-second elevation analysis anywhere on the Earth surface, even along the sea floor!  End users can display areas on the Earth surface that comply with any or all of three conditions (i.e. elevation, slope, or aspect).  What may surprise you is that the end result displayed on your screen is coming from a single set of elevation data.  The technology that makes this possible is raster function chaining.

About the Technology

Making raster and imagery data GIS-ready involves a number of pixel-transforming processes to the source data so they display in the correct location and convey meaningful information.  ArcGIS 10.0 delivered a new and faster approach for processing raster and imagery data.  Many of the tasks that had previously been accomplished with time-consuming pre-processing workflows could now be performed on-the-fly with a new class of objects known as raster functions.  By chaining together multiple raster functions, a variety of processed products can be generated very quickly and streamed directly to the client application, eliminating the need to write the processed data to disk.  The result is big savings in processing time and data storage requirements.  ArcGIS 10.1 brought further advancements to on-the-fly raster processing, including the ability to implement custom raster function chains on the server and to expose their parameters via REST.  This has opened up an entirely new range of possibilities for developers to build dynamic web-based applications to perform rapid ad-hoc image and raster analysis.

About the App

The front end of the application was built with the ArcGIS API for Flex.  The user interface allows the user to specify which of the three range filters to apply in the analysis.  The back end of the application consists of an image service of elevation data published with ArcGIS Server.  The service implements a collection of raster function chains which are exposed from the service’s REST endpoint as custom server functions.  The functions analyze the elevation data on-the-fly and deliver the pixels to the client application as single-color RGB output.  Considering the nearly infinite combinations of elevation, slope and aspect ranges one might want to support in an application like this, imagine for a moment what it would be like to have to pre-generate all those outputs and manage them as static datasets on disk.  The only feasible way to implement an application like this is with dynamic rather than static pre-generated output.

Click on the screenshot at the top of this post to check it out.   We named the application “Avalanche!” because one potential use of this type analysis could be to help identify areas of high avalanche risk.  Please keep in mind that this application is running on one of the Lab’s sample servers and is not designed for scalability or high-availability.  Even so, I think you will be impressed with its responsiveness once the server has loaded the elevation data for an area into memory.  I suggest zooming into Mount. St Helens since we have included higher resolution elevation data for that area.

This entry was posted in Uncategorized and tagged , , . Bookmark the permalink.

Leave a Reply


  1. geohaskett says:

    This would be create if someone could compile a widget for this that allows the programmer to change the data source, etc.

    • dcjohnson says:

      Hi geohaskett. Thanks for the suggestion. We’re planning to release some sample code in the future. However, we built this application on some beta code that won’t be released until 10.2. So unfortunately, I’ll have to ask you to wait a little while longer.

  2. crmltd-mm says:

    Have you released sample code for this application yet? I am very interested in seeing this!

  3. hfbrowning says:

    Yes – four years on and I am still interested in seeing how this was implemented. Would be wonderful if you could post the sample code here, if you still have it! :)