Select to view content in your preferred language

Determine Floodplain: Based on known flood level

9833
5
Jump to solution
11-13-2013 10:55 AM
PeterWilson
Frequent Contributor
I have delineated a river centreline and interpolated the Z values from a DEM (SRTM 90m) to generate a 3D polyline that represents the river centreline. I have then adjusted the Z values within the 3D river centreline and increased it by 20m and 40m respectively. I've tried to use Visibility Analysis tool to try to generate the floodplain, but the results aren't great even after adjusting the vertical, horizontal and radius parameters. Any alternative would appreciated.

So as explained, I'm trying to delineate the expected inundated surface areas coarsely from the river centreline, based on an adjusted Z value, then trying to determine the horizontal impact area of the DEM that is covered by water.

Regards
0 Kudos
1 Solution

Accepted Solutions
XanderBakker
Esri Esteemed Contributor
I have delineated a river centreline and interpolated the Z values from a DEM (SRTM 90m) to generate a 3D polyline that represents the river centreline. I have then adjusted the Z values within the 3D river centreline and increased it by 20m and 40m respectively. I've tried to use Visibility Analysis tool to try to generate the floodplain, but the results aren't great even after adjusting the vertical, horizontal and radius parameters. Any alternative would appreciated.

So as explained, I'm trying to delineate the expected inundated surface areas coarsely from the river centreline, based on an adjusted Z value, then trying to determine the horizontal impact area of the DEM that is covered by water.

Regards


I came across a nice post where William Huber (Esri forum senior member and MVP) wrote about simulating a flood:
http://www.quantdec.com/SYSEN597/studies/flood/index.htm

It's an interesting article and I recommend you to read it. He also included an avenue script to calculate the change in flood plains over time. I translated this into a small python script (10.x) and it seems to works.

William uses for his demo area (relatively flat) the following settings:
nSourceElevation = 200
nFloodMax = 205
nIncrement = 0.25
nExtent = 200      

In my case I used a more mountainous area, so the values area different. Investigate your data to see what setting fit your needs.

This is what resulted, before:
[ATTACH=CONFIG]29100[/ATTACH]

and after:
[ATTACH=CONFIG]29101[/ATTACH]


#-------------------------------------------------------------------------------
# Name:        SimulateFlood.py
# Purpose:     Simulate a Flood
#
# Source:      William A. Huber (Quantitive Decisions)
#              http://www.quantdec.com/SYSEN597/studies/flood/index.htm
#
# Created:     14-11-2013
#-------------------------------------------------------------------------------

def main():
    import arcpy,os
    arcpy.CheckOutExtension("Spatial")
    arcpy.env.workspace = r'C:\Project\_Forums\Flooding\fgdb\testflooding.gdb'

    source = r'C:\Project\_Forums\Flooding\fgdb\testflooding.gdb\source' # The source water body (raster)
    dem = r'C:\Project\_Forums\cost\fgdb\test.gdb\elevutm16n'           # The elevation DEM (raster)
    floodname = r'C:\Project\_Forums\Flooding\fgdb\testflooding.gdb\Flood_' # outputs

    # settings
    nSourceElevation = 100 # The elevation corresponding to the source body
    nFloodMax = 400        # The maximum flood elevation; must not be less then nSourceElevation
    nIncrement = 20        # The flooding elevation increment
    nExtent = 750          # Do not flood outwards more than this many cells.
    nTiny = 0.9/nExtent    # Used for limiting flood extents

    sourceRas = arcpy.Raster(source)
    demRas = arcpy.Raster(dem)

    steps = int((nFloodMax - nSourceElevation) / nIncrement) + 1
    for i in range(0,steps):
        xElevation = (i * nIncrement) + nSourceElevation
        outname = "{0}{1}".format(floodname,i)
        cost = (demRas > xElevation)+nTiny
        costdist = arcpy.sa.CostDistance(sourceRas, cost, "#", "#")
        flood = costdist <= (nExtent*nTiny)
        if arcpy.Exists(outname):
            arcpy.Delete_management(outname)
        flood.save(outname)
        sourceRas = arcpy.sa.Log10(outname) # Converts 1 to 0, 0 to NoData

    del cost, costdist, flood
    print "ready..."

if __name__ == '__main__':
    main()



Kind regards,

Xander

View solution in original post

0 Kudos
5 Replies
XanderBakker
Esri Esteemed Contributor
I have delineated a river centreline and interpolated the Z values from a DEM (SRTM 90m) to generate a 3D polyline that represents the river centreline. I have then adjusted the Z values within the 3D river centreline and increased it by 20m and 40m respectively. I've tried to use Visibility Analysis tool to try to generate the floodplain, but the results aren't great even after adjusting the vertical, horizontal and radius parameters. Any alternative would appreciated.

So as explained, I'm trying to delineate the expected inundated surface areas coarsely from the river centreline, based on an adjusted Z value, then trying to determine the horizontal impact area of the DEM that is covered by water.

Regards


I came across a nice post where William Huber (Esri forum senior member and MVP) wrote about simulating a flood:
http://www.quantdec.com/SYSEN597/studies/flood/index.htm

It's an interesting article and I recommend you to read it. He also included an avenue script to calculate the change in flood plains over time. I translated this into a small python script (10.x) and it seems to works.

William uses for his demo area (relatively flat) the following settings:
nSourceElevation = 200
nFloodMax = 205
nIncrement = 0.25
nExtent = 200      

In my case I used a more mountainous area, so the values area different. Investigate your data to see what setting fit your needs.

This is what resulted, before:
[ATTACH=CONFIG]29100[/ATTACH]

and after:
[ATTACH=CONFIG]29101[/ATTACH]


#-------------------------------------------------------------------------------
# Name:        SimulateFlood.py
# Purpose:     Simulate a Flood
#
# Source:      William A. Huber (Quantitive Decisions)
#              http://www.quantdec.com/SYSEN597/studies/flood/index.htm
#
# Created:     14-11-2013
#-------------------------------------------------------------------------------

def main():
    import arcpy,os
    arcpy.CheckOutExtension("Spatial")
    arcpy.env.workspace = r'C:\Project\_Forums\Flooding\fgdb\testflooding.gdb'

    source = r'C:\Project\_Forums\Flooding\fgdb\testflooding.gdb\source' # The source water body (raster)
    dem = r'C:\Project\_Forums\cost\fgdb\test.gdb\elevutm16n'           # The elevation DEM (raster)
    floodname = r'C:\Project\_Forums\Flooding\fgdb\testflooding.gdb\Flood_' # outputs

    # settings
    nSourceElevation = 100 # The elevation corresponding to the source body
    nFloodMax = 400        # The maximum flood elevation; must not be less then nSourceElevation
    nIncrement = 20        # The flooding elevation increment
    nExtent = 750          # Do not flood outwards more than this many cells.
    nTiny = 0.9/nExtent    # Used for limiting flood extents

    sourceRas = arcpy.Raster(source)
    demRas = arcpy.Raster(dem)

    steps = int((nFloodMax - nSourceElevation) / nIncrement) + 1
    for i in range(0,steps):
        xElevation = (i * nIncrement) + nSourceElevation
        outname = "{0}{1}".format(floodname,i)
        cost = (demRas > xElevation)+nTiny
        costdist = arcpy.sa.CostDistance(sourceRas, cost, "#", "#")
        flood = costdist <= (nExtent*nTiny)
        if arcpy.Exists(outname):
            arcpy.Delete_management(outname)
        flood.save(outname)
        sourceRas = arcpy.sa.Log10(outname) # Converts 1 to 0, 0 to NoData

    del cost, costdist, flood
    print "ready..."

if __name__ == '__main__':
    main()



Kind regards,

Xander
0 Kudos
DanPatterson_Retired
MVP Emeritus

Thanks for posting this code...Bill's original references on the forum are now gone and all that remains is this thread and his quantdec reference.

0 Kudos
DuncanHornby
MVP Notable Contributor
Xander,

Thanks for converting the Avenue to Python!
0 Kudos
larryzhang1
Occasional Contributor
Hi, Xander,

Obviously, you are more expertise on ESRI products. Very happy to listen to your comments and advices on any practical 3D /analysis questions related to ArcGIS Explorer.

Firstly, pls look at the post at http://forums.arcgis.com/threads/91914-any-updates-with-�??USGS-Flood-Path-Project�??-with-ArcGIS-Ex... . Have any ideas how effectively to simulate flooding in ArcGIS Explore?

Secondly, can you share any experiences on the question at http://forums.arcgis.com/threads/91760-3D-surface-area-calculation-from-DEM?p=334951&viewfull=1#post... ?


Thx in advance
LARRY
0 Kudos
PeterWilson
Frequent Contributor
Morning Xander

Thank you so much for the following. I'll go through it and post my results once I've got it working.

Regards
0 Kudos