Curve Identification Methodology

An automatic/manual approach has been developed to identify curves. Using the Length (string), Bearing-2, and Length (segment) strategies in conjunction with the Boolean operators (e.g., AND, OR), we will automatically identify curves' segment within a county. The best combination of strategies as well as appropriate threshold values for the string's weighed average, deflection angle, and segment length will be determined through a trail-and-error analysis. The following list shows possible combinations of the strategies.

L (st) AND B-2

L (st) AND L (seg)

L (seg) AND B-2

L (st) OR B-2

L (st) OR L (seg)

L (seg) OR B-2

L (st) OR B-2 OR L (seg)

L (st) AND B-2 AND L (seg)

L (st) AND B-2 OR L (seg)

L (st) OR B-2 AND L (seg)

B-2 AND L (st) OR L (seg)

B-2 OR L (st) AND L (seg)

L (seg) AND B-2 OR L (st)

L (seg) OR B-2 AND L (st)

The following two figures, showing the identified curves' segments in Story County in yellow colors, present the outcomes of some of the combined logical statements.

Query 1. (L (seg) AND B-2)
((([Dfbearing]5) and ([Flegs]=2) and ([Dfbearing]<999)) or
(([Dtbearing]5) and ([Tlegs]=2) and ([Dtbearing]<999)) or
(([Dfbearing]5) and ([Dfbearing]<80)) or
(([Dtbearing]5) and ([Dtbearing]<80)) or
(([Dfbearing]80) and ([Flegs]=2) and ([Dfbearing]<999)) or
(([Dtbearing]80) and ([Tlegs]=2) and ([Dtbearing]<999))) and
([Length] < 400 ) and
([Func]<50)

Query 2. (B-2 OR (L (st) AND L (seg)))
((([Dfbearing]5) and ([Flegs]=2) and ([Dfbearing]<999)) or
(([Dtbearing]5) and ([Tlegs]=2) and ([Dtbearing]<999)) or
(([Dfbearing]5) and ([Dfbearing]<80)) or
(([Dtbearing]5) and ([Dtbearing]<80)) or
(([Dfbearing]80) and ([Flegs]=2) and ([Dfbearing]<999)) or
(([Dtbearing]80) and ([Tlegs]=2) and ([Dtbearing]<999)) or
(( [Sdiffer] < -3) and ([Length] < 400 ))) and
([Func]<50)

The visual curve identification process relies primarily on three data sets: aerial photography, roadway cartography (with associated roadway characteristics), and Roadware driven lane centerline data. The latter two provide the components necessary to calculate curve characteristics, e.g. length, radius, and degree. Where available, aerial photography provides the best representation of roadway alignment, allowing the user to better identify curve extents on the cartographic and Roadware representations of the roadway. Users could also manually measure pertinent curve characteristics from these images, but this would yield a much more labor intensive process.

Roadware data provides the next best representation of roadway alignment. As part of the Iowa Pavement Management Program (IPMP), Roadware uses a differential GPS equipped vehicle to collect pavement condition data along a portion of Iowa's highway network. These data are summarized to 100-meter segments of roadway and, when plotted, provide a relatively "smooth" representation of the roadway as driven (accurate to within approximately five meters). Roadware data, however, are not available for all roadways and may not be continuous due to loss of signal or data reduction errors.

The last data set, cartography, are available statewide for all roadways. Important roadway characteristics, such as traffic, are also associated with these data. Roadway alignment and changes in alignment (including curves) are represented by a series of variable length line segments. Therefore, curve extents can be difficult to identify from this data set alone. The accuracy of these data range from approximately 12 to 50 meters.

In general, aerial photography and Roadware lane centerline data provide the best representations of actual roadway alignments, facilitating more accurate curve identification. Moreover, Roadware data will likely yield more accurate curve measurements. However, these data are unavailable for all roadways and do not possess essential roadway characteristics. Cartography serves as an overarching data set, fulfilling all necessary data requirements.

Once the curves' segments have been identified, using the available data sources, the following steps are conducted to calculate curves' radii and degrees:

  1. Eliminate the mistakenly selected segments as curves through visual inspections
  2. Manually put boxes around curves
  3. Perform clipping
  4. Combine the clipped segments
  5. Calculate chord and curve lengths
  6. Calculate the curves' radii
The first two main steps are performed manually. In the first step, all selected segments are inspected for possible errors. The mistakenly selected segments are eliminated and boxes are put around the remaining curves using the following procedure:

2. Draw Boxes Around Curves

3 - Perform Clipping

The purpose of the "clipping" is to isolate the boxes, with their curves within, from the rest of the road network.

Before combining the curve segments inside each polygon, the following steps need to be carried out:

i. Assign a unique number to each polygon

A unique value is assigned to each polygon. This is an indirect way of numbering the curves' segments inside the polygon. The following Areview Avenue Script is used to assign numbers to polygons:

thisProject=av.GetProject

thisView=thisProject.FindDoc("View1")

themesList=thisView.GetThemes

select theme=MsgBox.ListAsString(themesList,"Themes","Please select")

selectTab=selecttheme.getFTab

selectTab.seteditable(true)

autofield=field.make("Id",#field_decimal,10,0)

selectTab.addfields({autofield})

autofield.seteditable(true)

for each i in selectTab

Id=i+1

SelectTab.setvalue(autofield,i,Id)

end

SHAPE
POLYGON_ID
Polygon
1
Polygon
2
Polygon
3
Polygon
4
Polygon
5
Polygon
6
Polygon
7
Polygon
8
Polygon
9
Polygon
10
Polygon
11
Polygon
12
Polygon
13
Polygon
14
Polygon
15

ii. Assign the polygon unique numbers to the curves

In this step the polygons' unique numbers are assigned to their associated curve's segments. This would enable us to integrate the curves' segments based on their unique assigned identification numbers. The "assign data by location" option of the Geoprocessing Wizard is used to spatial join the data from the attribute table of curves theme to the attribute table of "clipped" roads theme.

iii. Calculate the length of a curve's segments

A curve length is determined by adding the segments that form the curve inside a box. For those segments that their entire lengths are not included in the box only their partial lengths are considered in calculating the curve length. For example, the selected curve (see the figure below) consists of segments, however, the actual curve length is the only length inside the box. Using the following procedure determines the segments' lengths that are inside the box. This process would eliminate the over representation of curve lengths.

iv Calculate weighted AADT

There are two possible ways to determine a curve AADT (average annual daily traffic). We can simply use the average all segments' AADT that form a curve or more accurately use portions of AADT's of those segments that are partially inside the box. Using the following procedure a curve AADT is determined by weighing the degree of participation of a segment in forming a curve.

AADT
NEW_LENGTH
POLYGON_ID
SUM_NEW_LENGTH
WEIGHTED_AADT
1100
263.411
6
432.9690
669
1100
169.558
6
432.9690
431
80
67.095
1
129.0660
42
80
61.971
1
129.0660
38
25
347.908
2
347.9080
25
25
116.539
3
290.9110
10
25
174.372
3
290.9110
15
25
21.303
5
223.4310
2
25
108.383
5
223.4310
12
25
93.089
4
197.0410
12
25
93.745
5
223.4310
10
25
103.952
4
197.0410
13

4. Combining the Clipped Segments

The next step is to combine the boxed curves' segments to create polylines.

5. Calculate chord and curve lengths

The length and chord length of a curve calculation will be enable us to determine the curves' radii. The lengths can be calculated using an ArcView Avenue Script.

thisProject=av.GetProject

thisView=thisProject.FindDoc("View1")

themesList=thisView.GetThemes

select theme=MsgBox.ListAsString(themesList,"Themes","Please select")

selectTab=selecttheme.getFTab

selectTab.seteditable(true)

chLengthField=field.make("Chord_length",#field_decimal,10,4)

selectTab.addfields({chLengthField})

chLengthField.seteditable(true)

for each r in selectTab

segmentPolyLine=selectTab.ReturnValue(selectTab.FindField("Shape"),r)

segmentLine=segmentPolyLine.AsLine

segmentStartPoint=segmentLine.ReturnStart

segmentEndPoint=segmentLine.ReturnEnd

Chord_length=segmentStartPoint.Distance(segmentEndPoint)

selectTab.setvalue(chLengthField,r,Chord_length)

end

POLYGON_ID
COUNT
FIRST_INDEX
WEIGHTED_AADT
CHORD_LENGTH
CURVE_LENGTH
1
2
856502085230603
79.0000
126.2407
129.0660
2
1
856502085230710
78.0000
347.9076
347.9080
3
2
856502085230710
67.0000
287.6124
290.9110
4
2
856502085231806
17.0000
195.9667
197.0410
5
3
856502085231806
4.0000
217.5339
223.4310
6
2
856402085241312
1462.0000
430.1336
432.9690
7
2
856402085241312
882.0000
439.8060
442.9150
8
1
856502085231602
10.0000
139.2522
139.2520

6. Calculate the Curves' Radii

Having determined the length and chord length of the curves, the curves' radii and degrees can be calculated. First, using the circular curve equations (Equations 1 and 2), Equation 3 is derived to define the relationship between the length and chord length of the curves. Equation 3 is a function of q (i.e., half of the deflection); thus, it can be rearranged into Equation 4. Equation 4 and its derivative (Equation 5) are then plugged into the Newton iteration equation (Equation 6) to estimate q. This, in turns, facilitates the calculation of the radius and degree a curve (R and D) through the use of Equations 1 and 7, respectively.


(1)
(2)
(3)
(4)
(5)
(6)
(7)

where:

L = Curve length

C = Chord length

R = Curve radius

D = Curve degree

As shown in the table below, values of q''s converge rather rapidly.
 

C (ft)
L (ft)
Theta (0)
Theta (1)
Theta (2)
Theta (3)
Theta (4)
Theta (5)
Theta (6)
Theta (7)
R (ft)
D (deg)
949
963
1
0.52189
0.343226
0.29917
0.296007
0.29599
0.29599
0.29599
1626.74
3.52
943
961
1
0.53581
0.371941
0.33786
0.336188
0.33618
0.33618
0.33618
1429.28
4.01
416
427
1
0.55916
0.417759
0.3953
0.394685
0.39468
0.39468
0.39468
540.94
10.59
780
790
1
0.51565
0.329986
0.28043
0.276148
0.27611
0.27611
0.27611
1430.56
4.01
774
788
1
0.53261
0.365435
0.32931
0.327377
0.32737
0.32737
0.32737
1203.53
4.76

 
 

Roadware Data

In cases where Roadware data are available, a new ArcView Roadware Theme is generated to convert divided roadways into single routes to prevent double counting of the clipped segment lengths.

The clipping procedure, using the Roadware data, somewhat similar to the clipping of segments in cartography files. Using the following procedure, the weighted AADT calculated through the use of cartography files, is incorporated into the roadway data.