Creating a Utah Road Network Solutions Dataset
SGID93.Transportation.Roads is the recommended starting point for almost anything related to Utah street centerlines. This includes cartography, address location, and, now, network analysis. (It also worth mentioning that the UDOT linear referencing system is derived from attributes in this dataset)
While data used to support network analysis has many potential parameters, at a basic level, two components are especially important: 1) connectivity and 2) impedance (i.e. travel speed/costs).
Connectivity of centerline features in SGID93.Transportation.Roads is actively maintained but an impedance measure, while planned for later this year, has not bee actively enforced to date. However, it is possible to use a combination of cartographic feature codes (CFCC field), spatial queries, and the existing values in the SPD_LMT field to create a relatively crude but effective representation of speed limits that, then, can be used as an input to an impedance measure.
Using the steps described in the Process Notes below, SGID93.Transportation.Roads, was used to create a simple network solution (aka "routable") GIS dataset that can be used for routing, service area, and allocation problems.
The finished draft product is available for download in a v10 file geodatabase.
Please keep in mind that this is a first draft at a simple network dataset created to guide future AGRC efforts to improve and maintain routing capability in conjunction with SGID93.Transportation.Roads. There are a lot of different approaches and choices of what built-in functionality to employ. Expect that this approach will change as we learn more about the ArcGIS 10 Network Analysis capabilities and continue to hone our data for routing.
Comments, questions, compliments, or concerns can be directed to Greg Bunce from AGRC at GBunce@utah.gov or 801-538-3563.
Sample Solution (below):
I just finished my workout at the Kearns speed skating oval, now how do I get to Heber City for milkshakes?
Process Notes:
- Create a new file geodatabase and within it, a feature dataset whose spatial reference is defined by importing the spatial reference from SGID93.Transportation.Roads. Copy SGID93.Transportation.Roads into thew new feature dataset
- To SGID93.Transportation.Roads Add:
- a text field USEEXIST (length 1)
- a text field URBTRAFFIC (length 1)
- a double field IMPED_MIN
- a double field F_T_IMP_MIN
- a double field T_F_IMP_MIN
- a short integer field SUB_TYPE
- Make new a polygon feature class of areas where surface streets are likely to encounter traffic controls at intersections (merge incorporated cities with major unincorporated areas). Store this in the new filegeodatabase as a standalone feature class (not in feature dataset).
- Use the query below to calculate to a value of "1", all roads for which you want to preserve potentially valid speed limit data already in SGID93.Transportation.Roads
- not (SPD_LMT is null) and ( SPD_LMT >= 10 and SPD_LMT <= 80)
- For all other features (query below), calculate the speed limit field to 25
- USEEXIST is null or "USEEXIST" <> '1'
- Use a query to isolate UDOT freeways and set the speed to 75
- "CFCC" = 'A15' and (USEEXIST is null or "USEEXIST" <> '1')
- Use a query to set speeds on all major state and US highways to 65*
- ((CFCC = 'A31' or CFCC = 'A35') and ALT_NAME like 'SR%') and (USEEXIST is null or "USEEXIST" <> '1')
- Use a query to isolate UDOT freeway collectors/feeders and set the speed to 55
- "DOT_RTNAME" like '%C%' and (USEEXIST is null or "USEEXIST" <> '1')
- Use a query to isolate UDOT ramps and set the speed limit to 40
- "DOT_RTNAME" like '%R%' and (USEEXIST is null or "USEEXIST" <> '1')
- Use a query to set the speeds on major local roads to 55
- ((CFCC = 'A31' or CFCC = 'A35') and (ALT_NAME is null or ALT_NAME = '') and( not (DOT_RTNAME like '0%') or DOT_RTNAME is null)) and (USEEXIST is null or "USEEXIST" <> '1')
- Use a query to set the speeds on unpaved major roads to 45
- CFCC = 'A40' and (USEEXIST is null or "USEEXIST" <> '1')
- Use Select By Location to select all roads that intersect the polygon feature class of urban areas and rural cities created in Step 3. For these selected roads, calculate URBTRAFFIC to a value of '1'.
- Down grade the speeds on all non-divided major local and major highways in settled areas to 40 using the query below. Also exclude Bangerter Highway and US 89 in Davis County.
- (CFCC = 'A31' or CFCC = 'A21' ) and URBTRAFFIC = '1' and ( ALT_NAME is null or (ALT_NAME <> 'SR 154' and not (ALT_NAME = 'US 89' and DOT_RTPART = '10')))
- Down grade the speeds on all freeways in settled areas to 65 using the query below
- CFCC = 'A15' and URBTRAFFIC = '1'
- Calculate impedance (in minutes) for all ramp-accessed roads (freeways) using query and calculation below:
- Query: CFCC = 'A15' or CFCC = 'A25' or CFCC = 'A35' or "DOT_RTNAME" like '%R%' or "DOT_RTNAME" like '%C%' or URBTRAFFIC is null
- Calculation: ( [SHAPE_Length]/1609 * 60) / [SPD_LMT]
- Switch the selection and calculate the impedance (in minutes) for all traffic controlled roads by increasing the travel time by a factor of 1.3 (CHANGE TO 1.5 in future network builds to make for more realistic travel times!) to account for stop signs, signals, and turns
- Query: CFCC = 'A15' or CFCC = 'A25' or CFCC = 'A35' or "DOT_RTNAME" like '%R%' or "DOT_RTNAME" like '%C%' or URBTRAFFIC = '1'
- Calculation: ( [SHAPE_Length]/1609 * 60) / [SPD_LMT] *1.3 (CHANGE TO 1.5 in future builds)
- Impedance needed to be be set differently for each direction on oneway streets and routes. Currently many of the ONE_WAY attributes for limited access freeways/highways needed to be fixed (this should be done in the next update of SGID93.Transportation.Roads in early April. Here's how this was done:
- Notes and queries for correcting one-way attributes:
- For both directions of travel on I-215 (semi-looping), set the ONE_WAY attribute using manual selection so that all features oriented in thetrue direction of travel are set to 1 and the others to 2.
- For the positive (eastbound) travel direction for x (E-W) trending routes:
- Find them by making this selection:
- DOT_RTNAME = '0080P' or DOT_RTNAME = '0084P' or DOT_RTNAME = '0070P' or (DOT_RTNAME = '0201P' and DOT_RTPART = '2' ) or (DOT_RTNAME = '0007P' and DOT_RTPART = '2')
- Query the coordinate values for these selected records (using two temporary fields populated by the calculate geometry field tool), to set the ONE_WAY attribute for these selected records as follows:
- where x coordinate at start point is < then x coordinate at end point: set oneway = 1
- where x coordinate at start point is > then x coordinate at end point: set oneway = 2
- For the negative (westbound) travel direction for x (E-W) trending routes:
- Find them by making this selection:
- DOT_RTNAME = '0080N' or DOT_RTNAME = '0084N' or DOT_RTNAME = '0070N' or DOT_RTNAME = '0201N' or DOT_RTNAME = '0007N'
- Query the coordinate values for these selected records (using two temporary fields populated by the calculate geometry field tool), to set the ONE_WAY attribute for these selected records as follows:
- where x coordinate at start point is > then x coordinate at end point: set oneway = 1
- where x coordinate at start point is < then x coordinate at end point: set oneway = 2
- For the positive (northbound) travel direction for y (N-S) trending routes:
- Find them by making this selection:
- DOT_RTNAME = '0015P' or (DOT_RTNAME = '0152P' and DOT_RTPART ='2') or (DOT_RTNAME = '0154P' and DOT_RTPART ='2') or DOT_RTNAME = '0067P' or (DOT_RTNAME = '0189P' and DOT_RTPART ='2') or (DOT_RTNAME = '0191P' and DOT_RTPART ='2') or (DOT_RTNAME = '0040P' and DOT_RTPART ='2') or (DOT_RTNAME = '0006P' and DOT_RTPART ='3') or (DOT_RTNAME = '0089P' and (DOT_RTPART ='4' or DOT_RTPART ='7' or DOT_RTPART ='9' or DOT_RTPART ='11'))
- Query the coordinate values for these selected records (using two temporary fields populated by the calculate geometry field tool), to set the ONE_WAY attribute for these selected records as follows:
- where y coordinate at start point is < then y coordinate at end point: set oneway = 1
- where y coordinate at start point is > then y coordinate at end point: set oneway = 2
- For the negative (southbound) travel direction for east-west (x) trending routes:
- Find them by making this selection:
- DOT_RTNAME = '0015N' or DOT_RTNAME = '0152N' or DOT_RTNAME = '0154N' or DOT_RTNAME = '0067N' or DOT_RTNAME = '0189N' or DOT_RTNAME = '0191N ' or DOT_RTNAME = '0040N' or DOT_RTNAME = '0006N' or DOT_RTNAME = '0089N'
- Query the coordinate values for these selected records (using two temporary fields populated by the calculate geometry field tool), to set the ONE_WAY attribute for these selected records as follows:
- where y coordinate at start point is > then y coordinate at end point: set oneway = 1
- where y coordinate at start point is < then y coordinate at end point: set oneway = 2
- Add a travel cost field for each direction and inflate the travel code for the wrong direction of travel on oneway segments by a large factor (100 is currently used).
- Select all roads where the ONE_WAY attribute = 1 (in direction of road segment's orientation) and calculate T_F_IMP_MIN = IMPED_MIN * 100
- Select all roads where the ONE_WAY attribute = 2 (in opposite direction of road segment's orientation) and calculate F_T_IMP_MIN = IMPED_MIN * 100
- Building the Network Dataset in ArcCatalog:
- Create 2 different values for the SUB_TYPE field so connectivity can be modeled at endpoints for limited access highways and ramps and at any vertice for other, surface streets:
- Querying for limited access features (CFCC like 'A15' or CFCC like 'A25' or CFCC like 'A35' or CFCC like 'A63') and setting their value to 1
- Switch selection and set remaining records SUB_TYPE field to 2
- In the feature class properties for the roads feature class, define the two subtypes using the SUB_TYPE field.
- Turn on network analysis extension in ArcCatalog, move the roads feature class into its own feature dataset and create a new Network Dataset in the feature dataset and give it a name.
- Supply the following parmaters
- Name: UtahRoadsNetwork
- Feature Classes to Participate: Roads
- Model Turns: Yes
- Connectivity: Click subtypes button and set connectivity to END POINT for Limited Access (SUB_TYPE =1 above) and ANY VERTEX for the other roads subtype (SUB_TYPE =2 )
- Elevation fields = None
- Attributes: Remove the default attribute and then click the Add... button. Add a new attribute named TravelMinutes (Cost, Minutes, Double).
- With TravelMinutes selected, click the Evaluators button and from the Source Values tab, set the From_To Type to Field and Value to F_T_IMP_MIN. Set the To_From Type to Field and its Value to T_F_IMP_MIN. Click the Default Values tab and setthe Type for Turn to Global Turn Delays and then click the properties button and set the Seconds cost for Straight(s) and Right to 0 and the Left and Reverse to 30.
- Back at the New Network Dataset attributes window, click Next
- If you want directions, click yes, then next and finish.
- After the network dataset is created, you'll need to confirm that you want it built.
- Test network solutions extensively and refine approach.