I need to calculate slope, or stream gradient, two different ways:
Main channel slope from the pour point to the head/source point along the vector stream network
a local slope consisting of 100 meters up from the pour point
I am using NHD High Resolution data (need to use this dataset as some other calculations are dependent on it so I don't want to go the direction of deriving my own streams from DEM data) and have just shy of 500 "pour points" that are snapped to the NHD High Resolution data. I fully understand the intent and concepts but am struggling with how to compose the methods to automate this for all the sites within the confines of ArcGIS (version 9.3.1). I do have 10m DEM data for the whole study area for getting the elevations.
Obstacles I'm wrestling with mentally:
How to deal with identifying all the stream segments that make up the "main channel" so that I can sum their lengths. In some cases near the head of the stream there may be a first-order tributary, but then the main channel also has the same stream order (I've calculated both Strahler and Shreve stream orders using a tool called RivEx so the stream segments are attributed with these as well as their from-nodes and to-nodes via the RivEx tool, and I have the from-nodes and to-nodes). There doesn't seem to be a common attribute in the NHD flowline attributes (e.g., GNIS ID) to essentially dissolve common, or at least to somehow select all of them. Many of the segments simply don't have GNIS ID's.
How to measure just 100 m up from a pour point and then to generate a new "from node" to represent that 100 m upstream location to obtain Elevation data and thus calculate the local stream slope.
I've been working some long hours so my brain is probably making this harder than it is...
and I have come across these two other posts on GIS StackExchange but have been struggling with how to adapt them to my needs:
Workflow for determining stream gradient?
Assigning points to their respective Reaches using Stream Gradient?
It seems like all the pieces are there ("m-aware vector streams"), etc. but I'm starting to wonder if that's not the case without, again, a common identifier to identify which upstream segments should be considered part of the downstream "main channel".
Here is an example:
With the shown example, the darker red dots are the nodes, and the bright red dots are the stream sampling points. To calculate a main channel slope, if I write an automation program I need some sort of attribute to cue off of to be able to identify which of the shown upstream segments are part of the "main channel". This case is an instance where the segment that has the sampling points (bright red) and the upstream segement that branches to the left have the same GNIS ID so I could use that. But the NHD data have many instances where smaller streams of this nature simply don't have GNIS ID's at all. And the from/to node info or even the NHD Flow table which I have simply tells you that both upstream segments flow into the sampling point segment. With this example as a demonstration of other instances that lack a GNIS ID, I need a way to automate the decision of WHICH upstream segment to use for calculating the main channel slope in a scripted program. What else could be used to do this?
Another example of where the GNIS ID could not be used as a way to hydrologically identify all of the segments that make up the main channel is where an upstream section has one GNIS ID and unique GNIS Name (e.g., "stream X", and then it takes on a different name (e.g., stream "y") from a confluence with another trib. A point on stream "y" hydrologically still receives main channel flow from stream x but the GNIS ID can't be used to connect the two.