Indicating slope on bike routes

December 04 2009 | 0 comments
Categories: 3D Mapping, ArcGIS Methods, Cartographic Effects, Cartographic Representations, Data Modeling, Map Data

I am working on an update to a regional bike map (based in GIS, styled in AI) and I have never been really satisfied with the depiction of elevation on the map. I have used shaded relief in the past but it doesn't work that well for cyclists and contours create too much visual noise at 1:200k. I have decided to use a "chevron" symbol such that a single chevron indicates a moderately steep hill, a double indicates steeper and a triple chevron for the steepest. Now I am curious about how to create them. I thought about creating contours at a certain interval and intersecting bike routes to create points and swapping symbols in AI, then I thought about rasterizing the routes and calculating slope, but that would induce error for cross-slopes.

Now I am not sure which solution to dive into, but was wondering if anyone else had arrived at a solution, perhaps using DynSeg and slope somehow?. Since elevation varies across segments and segments vary in length I do not think average slope would be that effective.

This is an interesting problem.  I solved it once for a trails map.  The main trick was to turn my trail polyline features into polylineZ features.  Then I wrote a Python script that analyzed the slope of each trail segment. You'll need an ArcInfo License, Spatial Analyst, and 3D Analyst.

The key to the first part is using the Interpolate Shape tool (3D Analyst).  I would recommend using a Raster elevation dataset (DEM) as input which will cause a vertex to be inserted into each polyline where it crosses a cell in the DEM.  For what you're doing, I think a 10m resolution DEM would be best (or if you use 30m, figure on a 2-5% underestimate in slope).

The Python script (TrailDatums.py) is in the attached ZIP file.  This is a "working sample" and is not packaged or guaranteed other than it ran on my data on my laptop over a year ago.  The input data (TrailPts variable) will need to be set to be the full path (copy from ArcCatalog's Location control) of your Polyline Z data.  It's a good idea to assume this only works in a file geodatabase.  The script will add a bunch of fields and populate them.  These will be populated based measuring the change in Z value from vertex to vertex.

What it does not do right now is break the trail features based on upsloping, flat, and downsloping. You'll get values that tell the distance, average slope, and segment count of upsloping, downsloping, and flat.  The distance is sloped distance (versus 2D planar distance).

For your problem, I would create a set of lines from the DEM that represent the watershed boundaries, and the derived stream channels.  The Spatial Analyst help for Understanding Drainage Systems is a good place to start and the table of contents for that section includes topics for deriving these two kinds of information.  Once you have lines representing these two pieces of information use the Feature to Line tool where these lines and your bike route line features will be inputs and there result is a dataset that you will select the bike routes out of, but they will be broken at the locations where streams or ridges intersected them.  All this said at the end, this should be your first step).

So, if you run everything (breaking your bike route lines, creating polylineZ data, and running the TrailDatums.py) you should get a line dataset with attributes characterizing slope for trail segments. Then based on the slope you can assign a chevron decoration to the lines (representations will do this best) that are sufficiently sloped to warrent the 1, 2, or 3 chevron symbol.