[GIS] Estimating river Channel Width using Python/ArcGIS/MATLAB/R

arcgis-10.0arcgis-desktopMATLABpython-2.6r

I am trying to estimate the river channel width from digitized polygon or poly-lines shapefiles. To do so, I converted poly-line shape files to points.shp at regular intervals (at 1 cm). Later, I calculated distance between corresponding points distance from both bank. However, points distribution are not uniform throughout both bank. Therefore, this method will yield much error in continuous width data set.
I have calculated manually at regular interval of 100 m of 20 km river length using distance tool in ArcGIS but I need this in automation mode which can provide continuously width of the river channel.

I am open to other method. Can we draw perpendicular lines from right bank to left bank or vice-versa? Or can we draw transect lines at user defined interval across the river? If this possible then we can convert these perpendicular lines into shapefile. Later we can use intersect tool to get channel width.
I posted snap of the points from polylines below for which I need to estimate width.This is just small reach of the river.
Has anyone done anything like this before?
If someone have better idea I would be happy to use that.

enter image description here

Best Answer

The crux of the matter is finding a quantitative definition of "width" of the channel. Consider a point P located anywhere within the river. The width certainly cannot be any less than the shortest distance from P to the left bank plus the shortest distance from P to the right bank. A moment's thought suggests this is an excellent candidate for the width of the river at point P.

It is simple to calculate this quantity: sum the Euclidean distance grids for the left and right banks. Call this the [Width] grid.

It is now attractive to use the [Width] grid to find a route through the river passing through points of optimal (that is, minimal) width. Use [Width] as the impedance grid in a cost-distance calculation. (Set the impedance to null or very large values at all points not within the river.) Take as starting point A some location in the channel at the head of the river and as ending point B some location in the channel at the mouth of the river. The cost-distance algorithm will seek paths between A and B that pass through the locally smallest values of [Width]. Any one of these will go as straight as possible through the river from A to B. The values of [Width] encountered along such a path provide the "continuous width of the river channel" you seek.

This evidently is a straightforward costdistance calculation. The whole workflow can therefore be fully automated after A and B are selected. Even determining A and B can be automated, in various ways. For instance, if you already have a polyline representation of the river segment, use its endpoints. If not, simplify the river representation into a polyline and use that. You could also identify the four endpoints of the two river bank polylines and use the midpoints of the upper pair and lower pair. For a river (as opposed to a lake-like waterbody), those two pairs can automatically be identified as the two pairs that are closest to each other.


I apologize that I haven't the time to illustrate this procedure.

Related Question