2

I have a water feature layer which includes rivers, lakes and streams. I want to create, essentially, a buffer of these features equal to that of a 50cm increase in elevation from its current boundary. I have been toiling with this one for a few hours now, but can't theoretically get through the problem.

The result would be a buffer that is "aware" of the elevation in its determination of the buffer edge.

Any way I think about this, I keep coming back to a looping function addressing each point along the boundary of each water feature. This would be computationally intensive and I don't have all the theory down for that method either.

What do you think?

ArcGIS 10.1, all license levels with LiDAR DEM.

The water is, itself, a constant elevation, but as the land rises, so too does the channel. If this isn't clear, think of a mountain stream flowing to the valley.

enter image description here

  • Have successfully made a layer from suggestions below by Michael.

Update to problem

The result is not ideal (used a 1m elevational increase), thus looking to see if anyone can improve upon this method.

enter image description here

6
  • Sounds like a duplicate of or at least related to gis.stackexchange.com/questions/103868/… You're kind of looking at hydrologic modeling here which isn't nearly as simple as just raising the level, since channel width will also play a role (it will back up higher behind a constriction and less in a wide open channel).
    – Chris W
    Commented Dec 9, 2014 at 23:39
  • 2
    Depending on flow @ChrisW, static water fills to the same level. You could make this incredibly complicated using hydro tools for a refinement of only a few metres on the banks location in heavily eroded channels (as shown) or simplify the problem to its basics and get an approximate solution easily. When modelling the first step is to decide what factors will be considered and those that wont. Commented Dec 9, 2014 at 23:53
  • Hydrologic modelling is nothing overly complicated. I am doing exactly same thing as asked few times a week. Simplified approach based on eucledian distance is Ok in this case, but 'clustering' of a river bank is a must.
    – FelixIP
    Commented Dec 10, 2014 at 0:16
  • What can you suggest @FelixIP to improve? What do you mean by clustering?
    – D_C
    Commented Dec 10, 2014 at 0:33
  • Your allocation looks a bit spiky, perhaps smooth that a bit with focalmean. The allocation should be a fairly gradual raster and not distinct bands. Commented Dec 10, 2014 at 0:39

1 Answer 1

2

To determine what the river currently is outside the existing river use Euclidean Allocation to 'spread' the value of the river out. Then add the river rise value and select cells less than that:

RiverSmear = EucAllocation(Rivers,Arbitrary_Distance,RiverElevation)
RiverRise = RiverSmear + HowHighTheRiver
NewRiver = Con(DEM < RiverRise,1,0)

If you don't currently have the RiverElevation (like it's a vector or binary raster) clip the DEM using the river with Extract by Mask.

As noted, the EucAllocation tool only works with integers. To Spread the river effectively multiply the river by a factor (say 100) and then divide the result by the same factor. This will round the result.

10
  • I have never used the allocation tool before, so bare with me... The allocation tool does not allow floating data. With my vector based water feature layer as the input source data, how does one create your "riversmear"? An I assume that "HowhightheRiver" is just a feature mask extraction of the water feature class?
    – D_C
    Commented Dec 9, 2014 at 23:15
  • No, it allows floating data. If the input source raster is floating point, the {in_value_raster} must be set, and it must be of integer type. it's been a while since I used it so I don't know the exact syntax of the top of my head. You will need to play with it; I know that it's the tool you want. I think you may need to put the rivers in as the 3rd parameter or the first, or perhaps it's a buffer of the rivers... HowHighTheRiver is how far you expect the river to rise (integer or floating point number). Commented Dec 9, 2014 at 23:25
  • The basic solution is 1. to split river banks into short polylines, 2. assign them elevation at the middle point. 3. Calculate catchments for each little segment 4. Transfer elevation to catchment tables+0.5 5. Convert catchments to grid and find out where this grid is above DEM. Before doing normal hydrology things, I'd suggest to assign no data values where the river is. This will work for simple topography shown. More accurate approach is filling along the boundary, it requires defining existing flooded area as raster
    – FelixIP
    Commented Dec 9, 2014 at 23:32
  • We are on the right track Micheal, I can visualize exactly what is supposed to happen, and it would work if I could get this allocation tool to output anything but a constant raster. The input feature class has one value, 1. This value is just populating over the extent.
    – D_C
    Commented Dec 9, 2014 at 23:48
  • 1
    Got it... Turned the DEM to Integer by multiplying by 100 then in the result divided by 100! The result is a little ugly, working with it now to see if I can't improve.
    – D_C
    Commented Dec 10, 2014 at 0:23

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.