Gradient and Sinuosity Calculations #563
Replies: 13 comments 6 replies
-
arcGNAT previously generated:
These tools can be run at any scale, but tend to work better for longer reaches (less 'noise' and fewer geometry special cases). We never quite figured out the idea segmentation to use during the arcGNAT era. Shopping list for GNAT inputs (as we develop the GNAT rs project)
|
Beta Was this translation helpful? Give feedback.
-
@lauren-herbine you should chime in on this one... GradientWe should differentiate
We should also look into what we did in BRAT a long time ago to smooth and get reasonable gradients. I vaguely recall:
SinuosityA few things: And, way back in 2016 Kirstie and I drew this on my whiteboard when we were trying to clarify these things. Primary Planform MeasuresOut of it comes the idea that we need direct measures of:
A big challenge is whether we calculate channel distances as total of all anabranches in multithreaded system or mainstems? Primary Sinuosity MetricsTo calculate primary sinuosity metrics:
Note similarity to @KellyMWhitehead :
Why do we need all this?Well the various sinuosity measures are useful by themselves for discriminating different conditions. However, it is the intercomparing of some of these sinuosity values at the riverscape setting that helps us discriminate different settings really well. For example:
|
Beta Was this translation helpful? Give feedback.
-
What length scale are wee going to measure reach sinuosity? All rivers are straight if measured at some silly minute scale. We are already segmenting NHD+ HR at 300m, land ownership, roads and rail. There's also talk of segmenting at ecoregions (#236 ). The length over which we measure sinuosity affects the result. How do we pick the right length if our reaches are so fragmented that they are nearly all straight? |
Beta Was this translation helpful? Give feedback.
-
SinuosityInputs:From @joewheaton :
Metrics:from @joewheaton Scale@philipbaileynar let's start segmenting at 500m. I think level IV ecoregions would be too long in some cases and could "pinch" a reach in others: Multithreaded systems... coming soon... GradientQuestion for you all (@philipbaileynar @KellyMWhitehead @joewheaton)- the NHD+ has slope as an attribute. Could this be used? |
Beta Was this translation helpful? Give feedback.
-
an update for moving forward:Let's calculate those things that are easy:
For this first run I am interested in seeing how well channel sinuosity discriminates between river styles. This is what we were using in the MHFD, and for that "small" area it worked well. For multi-threaded systems, we will use the mainstem (if it is anastomosing/the NHD shows multiple channels). For braided systems, we will use the length of the channel belt. See figure below: |
Beta Was this translation helpful? Give feedback.
-
SlopePlease see how we calculate and display symbology for reach slope in BRAT. The slope in NHD+HR could be good, but it will be based on its segmentation, which may suffice. We also need to think about valley bottom slope and this would be valley bottom centerline length divided by the difference in "nearest min elevation in a window (e.g. 10 x 10) at top and bottom. Sinuosity MeasuresI like what you have proposed for sinuosity measures. I would suggest NOT presupposing the sinuosity segmentation of channel netowork to 500 m to start. Start with existing NHD +HR segmentation and see how bad or different it is. I think for bigger rivers we may want to have longer segmentation. @KellyMWhitehead please lay out as you start doing this exactly what the choices are in making these calculations and or give us some different examples so we can make some informed decisions. The thing I don't think we're considering here yet is the discrepancy between NHD+HR channel segmentation (default) or our additional segmentaton, and our VBET cl segmentation. Any insights @KellyMWhitehead ? Please also see @lauren-herbine what @kbartelt came up with in RIM for her Relative Flow Length metric, which was very good for multi-threaded systems (i.e. total channel(s) CL or thalweg length divided by riverscape length). |
Beta Was this translation helpful? Give feedback.
-
Thinking about @philipbaileynar :
and
So another approach is with @KellyMWhitehead and Carol stole from the Fluvial Corridor Tool, in which some metrics can be calculated at length scales other than their segmentation with a moving window (also facilitates calculating at multiple scales). In other words, it doesn't matter what your segmentation length scale is, you choose a "metric length" calculation scale appropriate for the calculation (e.g. a fixed length window of VB for example). This is the approach laid out in Notebaert & Piegay (2013) of using DGOs and AGOs...
|
Beta Was this translation helpful? Give feedback.
-
Reigniting. We have a lot of good discussion on here, I will attempt to narrow everything down into what we actually need, starting with Channel Gradient Stream Gradient
ElevationIf polygon is wider than DEM raster cell size, find the mid-point of the ChannelArea polygon segment at the top and bottom of the segment. If not, use DEM cells that the top and bottom of the ChannelArea polygon fall into. LengthThree approaches possible:
@philipbaileynar @joewheaton @KellyMWhitehead Please let me know if these are making sense or if you think they should be further discussed! |
Beta Was this translation helpful? Give feedback.
-
Valley Gradient
Some previous discussion points: Is valley gradient stupid to base off of top of polygon/bottom of polygon?Top of polygon/bottom of polygon would just find the center of the valley bottom polygons at both ends, and base the gradient calculations off of these elevations. In the figure above, the pink dots are the valley bottom polygon elevations if these were to be chosen where the channel intersects the VB polygon. The teal dots are if the VB polygon elevations were taken from where the VB centerline intersects with the polygon. I am tempted to lean towards the channel intersection method, as there are instances where the VB centerline could intersect at elevations that would artificially raise or lower the VB gradient (ie one elevation is taken from inactive floodplain, the other happens to be where the channel crosses). After some discussion with @joewheaton : Sample across the top of the valley bottom polygon for the lowest elevation (do same for bottom of polygon) to calculate valley bottom gradient. Do I even want valley gradient?In most cases, valley gradient will likely be redundant with the combination of stream order and bankful width. I thought that, however, it could still be useful in some cases. I flew around to places I thought might be "odd" (a mainstem Mississippi HUC; Flambeau, WI; Kansas River). I was looking for places where the steeper part of basins were not co-located with the headwaters. I thought perhaps incision through terraces/legacy sediment might provide that. Flambeau, WI. Very little relief across the entire basin. Headwaters are low slope, but bankful width is also still lowest here. I thought I'd try where Mississippi tributaries come off the higher hills and enter the floodplain. Perhaps here we'd see a drastic change in slope mid-longitudinal profile? Here, from the headwaters of Knob Creek (the perennial stream in the above diagram) to the point where it spills onto the Mississippi floodplain, the valley bottom gradient is 0.7% and the channel gradient is 0.6%. The 500 meter segment (outlined in black) right where this transition occurs has a 0.5% valley bottom gradient. So- another strike out in trying to find places where VB gradient would be useful. Any thoughts? After some discussion with @joewheaton: Minnesota- where multiple order tribs come into the mainstem with a range of bankfuls at steep slopes through the bluffs |
Beta Was this translation helpful? Give feedback.
-
Channel Sinuosity
This is currently relevant to single channel systems. See #565 Similar to LengthThree approaches possible:
Straight line distanceCan we calculate distances from nodes? I've noticed whenever we are discussing topology, we reference nodes that will result at segment breaks. These seem like good places to measure our straight line distance from. Would these only occur where centerlines break/overlap (like in the figure below)? Or will nodes also be produced were the stream network and/or ChannelArea polygons break/overlap? For example, from @joewheaton in #419: |
Beta Was this translation helpful? Give feedback.
-
An update on initial GNAT Stream Gradient: Stream Gradient QA/QCAn initial look at GNAT stream gradient calculations. HUC: 17060304 I asked @KellyMWhitehead to give me a range of stream orders to look at how everything is working at this point. Mainstems were still a struggle at this point, so those aren't included. I classified on a continuous scale with 10 bins for visualization. Doing some data wrangling in R, it looks like there are 990 observations. Some visual QA/QC: Looking at these different types of regions, things are lining up the way I would expect them to be.
I did manual testing at a few places (using the closest DEM pixel value and measuring distances with the measure tool), and the values I am finding are falling within a reasonable range of the GNAT calculated values! |
Beta Was this translation helpful? Give feedback.
-
@philipbaileynar @lauren-herbine Metrics:
Improvements
Known issues
|
Beta Was this translation helpful? Give feedback.
-
@philipbaileynar @lauren-herbine This release includes a total of 9 metrics. Additional Metrics: Improvements
Known Issues (includes previously mentioned issues)
|
Beta Was this translation helpful? Give feedback.
-
We need gradient and sinuosity calculations for reach typing.
The goal of this ticket is to produce standalone Python modules for calculating gradient and sinuosity. (Other calculations will follow soon...) Essentially this code takes a polyline feature class and adds the gradient and sinuosity attributes (dropping them first if they are already present) and populates them with the new values.
We already have gradient as part of the BRAT reach geometry module. So I recommend that this is simply moved up to rscommons and called from there. Then refactor to BRAT to call it from rscommons as well.
Sinuosity does not use an underlying raster, but it can essentially be written as a new standalone module that mimics some of the pattersn from the reach geometry code.
Important Notes
Beta Was this translation helpful? Give feedback.
All reactions