[GIS] Determining gradient of road segment

analysisgrassraster

I've a shapefile of roads data. It contains information about terrain of road segments, i.e., hilly, flat, undulating, etc. I want to determine gradient of every road segment. I know this might require corresponding raster data and a lot of image processing. I also understand that I can use GRASS for this kind of analysis. But I've never attempted a task like this before.

For those who have, is GRASS my best bet? And, must I get the corresponding raster data? Is there a way I can do this without having to get my hands dirty with image processing algorithms. In case I must get the corresponding raster data, is there a source I can get reliable raster data that is not more than 4 years old?

Your contribution will be highly appreciated.

UPDATE:
There will be a need to split a road segment that has both ascending and descending gradients. Overlaying the roads vector onto a raster layer is one of the options I think can work. But I don't have the raster data. Any idea where I can get raster data with sufficient accuracy and resolution will be appreciated. Can GRASS accomplish the splitting, and the analysis. I'd prefer open source tools for now as I'm still experimenting.

UPDATE:
The purpose of the analysis is to come up with an algorithm that calculates economic well being of a point on a map, taking into account its accessibility (distance from the road, terrain, among other factors). Also, the algorithm is to also aid in decision making in relief food distribution.

UPDATE:
I've got some material here on terrain analysis. Any advice is still welcome.

Best Answer

Heres what i would do:

  1. Overlay the roads layer with a dtm layer, this way, all the vertices of the segments would get a Z coordinate
  2. Calculate the gradient based on the segment length and height difference between the start and end point of the segment
  3. Classify the segments based on the gradient value as required

Tools i would use: FME

PS: When you say road segments, you probably think of them as segments in network topology, ie, one segment may be a polyline, not a simple line. Its up to you to decide wheter you want the gradient calculated for such a segment or perhaps for a single line

Related Question