I'm working on a project to develop a simple model for tidal flooding. I have a high resolution (2 meter) DEM of the area of interest, and I'd like to produce a series of maps showing the extent of inundation at various water levels.
My first approach was to use Raster Calculator to select all cells with a value <= the high tide value. This worked, but it still has problems. In my study area there are numerous water control features; dikes, seawalls etc. that protect areas that would otherwise be flooded at high tide. The raster calculator is not aware of this, and selects all cells below the high tide value, regardless of which side of the seawall they are on. None of the tools in the Hydrology toolbox seem suitable; they seem to assume water flowing downhill.
I'm a complete novice to python, but I'd like to write some code to solve this problem. The process I'm imagining is as follows:
1) Identify the lowest cell in the raster
2) Examine the adjacent cells. If the cell value is <= to the high tide threshold, then Value=1, otherwise, Value=NODATA.
3) loop this process until there is no change.
The idea is that by starting from the lowest point in the DEM and selecting additional cells based on adjacency and cell value, I can constrain the selection process to cells that are contiguous with the ocean.
Is this a sensible approach? Can this be done in Python? I'm doing a few of ESRI's intro to python courses, but I don't have a good sense for what the limitations are yet.
Alternatively, is there a tool or toolbox that would work better that I haven't found yet? Any advice is appreciated.
Edit: I have access to ArcGIS 2.5 and 2.7.
Edit 2: I've done some more googling, and it sounds like a flood fill algorithm might be what I'm looking for. Does anyone have advice on how best to implement a flood fill up to a certain threshold on a raster with variable cell values?
Solved! Go to Solution.
You may get what you need by doing a Region Group on the results and selecting the zone that is connected to the ocean. That sounds a lot more efficient for a simple model!
You may get what you need by doing a Region Group on the results and selecting the zone that is connected to the ocean. That sounds a lot more efficient for a simple model!
That works! I think I'm getting more or less the same results that flood fill would have given me. I'd still like to experiment with flood fill in Python just to develop the skills, but Region Group is effective enough for now. I'm trying to set it up in ModelBuilder to automate the process a bit.
Dear GC00227,
I am looking for a similar code - where I want to incremently fill the cells that have an elevation below a given tide level but that are also connected by an already filled cell (to simulate tidal flooding and cell connectivity). I am quite new to Python too.. Would you mindsharing your code with me?
Thank you very much.