I am using ArcGIS 10.4.1.
I am trying to extract watersheds for a number of random locations along a river network. These locations represent points where certain physio-chemical qualities of the river water are measured and I am interested in knowing for which cells in the DEM the water is flowing to this cell.
The datasets i have are:
- A (filled) DEM (5m resolution) covering the entire study area (the whole of Flanders, a comparatively large area and thus a heavy file).
- A polyline dataset containing the locations of all flemish rivers & waterways. This dataset is divided into many small segments which all have a unique code and contain beginning and end points consistent with the flow direction.
- A shapefile containing the measuring points, I snapped these locations using the Near tool to ensure they're located on the rivers.
At first this seemed to be a straightforward problem as I have extracted watersheds many times before using the following sequence of tools: Fill->Flow Direction->Flow Accumulation->Snap Pour Points->Watersheds.
However the problem with the data is that the waterways are not consistent with the DEM: they do not necessarily follow the topography (Flanders has artificially changed the course of many rivers and also has many canals). A colleague advised me to 'burn' the rivers into the DEM (By converting them into a raster, giving them all an arbitrary low value (e.g. -2000) and adding that raster to the DEM). Thus my model has come to look like this (notice I have split up the last part of the analysis because there are two categories of points and otherwise there would be overlap between the watersheds of the different points):
Unfortunately, this approach does not seem to work and it yields very small, nonsensical watersheds that sometimes even violate the flow direction of the rivers. As such I myself with the help of colleagues have tried several other approaches:
- A colleague suggested that I simply try to extract the watersheds using the polyline dataset directly rather than using pour points. I have tried this, by first dissolving the polyine dataset so it becomes just one element and then breaking it up at the locations of the measuring points using the 'Split Line at Point' tool. This however splits the dissolved polyline not only at those points but also at all junctions (nodes) as well some random vertices. (I have tried to run the integrate tool first but to no avail.) I have no idea why the tool does this but it makes this approach useless. I have also tried to split the lines at the points manually but this still aggregates the lines in strange ways, leading to the following, bizarre pattern of watersheds:
- Since a shapefile containing the watersheds of all the small segments individually already exists, a possible approach would be to determine all the upstream segments and then add up all the small watersheds to one large one that would correspond to the watershed of the start point of the section on which the measuring point is located. To achieve this, I converted the rivers polyline dataset to a geometric network and subsequently used the trace upstream functionality that exists for this type of datasets. However, this yields no output and the group layer which is supposed to be created by the tool does not show up anywhere. I have never worked with networks before though so maybe (probably) I am doing something wrong.
- I imagine it must be possible to use Python to circumvent the experienced problems and extract the watersheds in a method uniquely suited to this situation. While I have limited experience in working with Python, I have never used it in conjunction with ArcGIS and would like to avoid this scenario since I imagine there is fairly steep learning curve and I simply do not have the time for that right now.
I'm at a loss as to how to proceed at this point.