I'm trying to make a service area network analysis containing the time that is needed using a bike starting from one point. The attached map shows this service area when the bicycle speed is 20km/t, and a travel time interval of 5, 10, 15, 20 and 30 minutes.

enter image description here

But I want to include slope as a cost in the analysis, and calculate a speed based on the slope. The speed will then be used to calculate a travel time for each segment.

The slope/speed calculation can be something like this (interpolation between):

downhill steeper than minus 8% = 40 km/t

-4% = 30 km/t

0 % = 20 km/t

4% = 10 km/t

upphill steeper than 8% = no bicycle

My biggest issue is that I don't know how to define the road links' direction.

What I've done so far:

1) Import road network

2) Dissolve road network, and split network into sections of 50m (since I will calculate the average slope by intervall of 50 metres)

3) Extract start and end point of each section (will be used to define altitude data for startpoint and endpoint)

4) Get xy-coordinate for each point

5) Get elevation data for each point from DEM model (metres above sea level)

6) Copy elevation data and xy-coordinate from each point to the 50m lines

I now have a network consisting of road segments of 50 metres with xy-coordinates and altitude data for each start and end point. I now want to calculate the slope based on (elevation end-point minus elevation start-point) divided by segment lenght. This will give me the slope (average), BUT I do not know the direction (upphill/downhill).

I thought about using the coordinates, but the road can curve a lot so based on xy-coordinates I actually do not know if I am travelling from or towards the starting point..

Any idea how to define the direction of the roads away starting from one point?

For example, is there a method to sequentially number nodes/points starting from one point?

1 Answer 1


In Network Analyst (NA), there is a concept of cost associated with traversing (that is, going through) a road link (edge). Such cost is calculated based on the direction in which a road link was digitized. In NA terms, it is referred to as FT and TF (from-to, to-from) directions. This means that the very same road link can have different cost associated with it depending on which direction it is being traversed through. In transportation modelling, this is to be able to model cases when there are different speed limits on a road depending on the travel direction.

In your case, you would need find out the direction in which road link was digitized. You can calculate the slope for each polyline feature in your feature class using plain math and field calculator. If you have to transfer the altitude value back to the polyline as an attribute using the Spatial Join or simple Python scripting:

  1. Get the first and the last vertices of each polyline. Can be done using a GP Tool Feature vertices to points or using arcpy geometry SHAPE@ token.
  2. Get the altitude associated with each of these two points (using your DEM).
  3. Transfer back to the polyline feature the altitudes into two fields, eg. start_point_z and end_point_z.
  4. Calculate the slope for each polyline feature into two fields, eg. FT_z and TF_z.
  5. Calculate the cost associated with each polyline feature using your uphill and downhill speed increase/decrease estimations into a two new fields, eg FT_cost_with_slope and TF_cost_with_slope.

Now you should have a polyline feature class with each link having a cost calculated based on its slope. When you run the Service Area solver, the NA will do the calculations for you and will use the cost attribute you specified and depending on which direction a link is being traversed, the corresponding cost field will be used. You can learn about setting those cost attributes in the Assigning evaluators section.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.