[GIS] Radius of curvature for curves in road segments for entire road network

arcgis-desktopcurvaturegeometry

I have a road network shapefile for a US state and I am trying to derive the radius of curvature for road segments in this shapefile. I need to be able to perform this task within just a few functions for thousands of road segments.

The road segments vary between 0.2 miles and maybe 5 or so miles. Each segment has several curves, but I am only interested in curves small enough to force a vehicle to make a reasonable turn. This should reduce the number of curves of interest per segment to a max of 1 or 2, with many segments not having such curves at all. I have not determined the maximum radius of the curve (the threshold) I would like to use.

For segments with only 1 such curve, I would like to obtain the values of those curves for those segments, and for those with more than 1, an average will do.

Best Answer

The curvature (κ) of a two-dimensional curve is defined as κ=dϕ/ds, where ϕ is the tangential angle and s is the arc length (source). To avoid calculus, this derivative can be approximated as the total change in angle divided by the total length of the curve. The radius of curvature (r) is simply the inverse of the curvature: r = 1/κ

This math can be used to calculate the radius of a curve in a digitized road polyline that is approximated with multiple line segments. The procedure goes something like this:

  • Determine the beginning and end points of the curve.
  • Measure total change in angle and total curve length from start to finish.
  • Do the math and store the radius of curvature.

I once wrote a script that cycles through the vertices of polylines, calculating the bearing of the line and the angle change. Depending on the angle change (is it turning right? left? not turning?), it decides whether each point is an inflection point (where direction changes). Between the start and end, it adds up the total angle change and total line segments length and then calculates r.

There are some additional filtering steps to ignore very small angle changes and other problems that are due to digitization artifacts rather than actual road curvature. If the radius is within a certain range of interest (for our purposes, we only cared about r less than 100'), it outputs it to a new shapefile. Even with all this, it is quite fast and capable of running through thousands of roads. Results seem reasonably reliable, although I haven't put it through a comprehensive error analysis.

Related Question