Saturday 24 December 2016

arcgis 10.1 - Obtaining average value around polygon in raster for different cross sections?


I have elevation data in a raster, river (blue line) and the flooded area (black polygon) as shown in the image below:


enter image description here


I want to find the water depth in the flooded area (inside the black polygon). Outside of the polygon, water depth is obviously zero. Inside the polygon, the land elevation is lower than outside (At least it should be)


What I tried to do and did NOT work was this: I assigned nodata value to the points inside the polygon. Then I used Eucilidean Allocation to find the closest points just outside the polygon and assign it to nodata points. Then, I Subtracted the original land elevation raster from this new raster. However, I get big negative values because after all, it was not a good method at all.


Now, I am thinking: I need to follow the water stream line. At each point, draw a perpendicular line to the river and let it intersect minimum two times with the polygon. Find the average value of cells inside a circle (with those intersections as center). Find the mean of these averages. apply this value too all points in that cross section (perpendicular line to the river). Now, is there any way on earth I can do this? Hopefully I don't need a for loop for this? Do you guys have any other suggestions, perhaps easier ways?


I am using ArcGIS 10.1 with Spatial Analyst and 3D Analyst extensions.




Answer



To do this you would need a 3d Analyst and Spatial Analyst license.


First, elevate your waterbody using Interpolate Shape, this will give the baseline for your elevations by attributing the polygon with the Z values from the DEM to each vertex.


Build a terrain with your waterbodies as the elevation data source (perhaps buffer by a small amount and include that as hard clip) and use Extract by Mask to get only the water area by using the waterbodies as the mask; we only want the elevation inside the waterbodies because, as you said, outside the waterbody boundary the depth is 0.


Convert your terrain to raster using Terrain to Raster which will give raster inside the waterbodies at the same level as the baseline (edges).


Now do raster calculation and subtract the original DEM with the rivers. The difference raster should be now the depth of the water, or more correctly the bed below the bank.


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...