#3756: r.watershed: flow accumulation wrong with edge contamination -------------------------+------------------------------------------------- Reporter: itati01 | Owner: grass-dev@… Type: defect | Status: new Priority: normal | Milestone: Component: Raster | Version: svn-releasebranch76 Resolution: | Keywords: r.watershed, flow accumulation, CPU: | edge contamination Unspecified | Platform: Unspecified -------------------------+-------------------------------------------------
Comment (by mmetz): Replying to [comment:2 itati01]: > Dear Markus, > > Thank you for your comment. > > I understand the problem with nodata cells in flow accumulation and would normally drop edge-contaminated cells. However, this is an exceptional use case, with nodata cells within the catchment. The same rule applies here too: any cell bordering a nodata cell does not distribute flow because it can not be determined where flow should be distributed to. > So, I used the flag -a hoping to obtain the number of upslope cells. The -a flag simply converts negative flow accumulation (receiving an unknown amount of flow) to positive flow accumulation. > I would like to ignore the nodata cells, and can actually do so because they form a channel (which I burned into the DEM to avoid artifical inflow from outside the watershed). So, there should really be no flow out of these nodata cells. This is correct, there will be no flow out of nodata cells. But there is an unknown amount of flow from nodata cells. > According to your explanation, my flow accumulation of -/+1 for cells 2 and 6 within the rectangle in Figure 2 must be wrong. Cell 6, i.e. the 3rd cell in the 2nd row, only receives input from the 2 cells in row 3 which were correctly - as neighbors of nodata cells - set to -1. So, the weight of cell 6 should also be -1 (only flow from cells with nodata as neighbor) and the flow accumulation should be -/+3 - what I hoped to obtain. The other cells that might contribute to cell 6 are cells 8 and 9, both are edge-contaminated, thus cells 8 and 9 can not distribute flow, and thus flow accumulation of cell 6 is -1. > However, even with "regular" inflow, it would be nice to have an option to ignore edge contamination (feature request?). This would cause flow accumulation to follow edge-contaminated cells which is wrong. This could be easily demonstrated be setting the current region to a small subregion, calculate flow accumulation, then enlarge the region, calculate flow accumulation again, and compare the two results for flow accumulation. The result for the subregion would be obviously wrong. > Just assume, we have 4 upslope cells, of which 2 are edge contaminated. So, currently, we would get a flow accumulation of 1, not 5? No, if the other 2 upslope cells are not edge-contaminated, we would get a flow accumulation of 3 because the not edge-contaminated cells are allowed to distribute flow, also towards edge-contaminated cells. Regarding edge-contaminated cells, flow accumulation and flow direction are treated differently. Edge-contaminated cells can not distribute flow because this can cause flow to incorrectly follow edge-contaminated cells. Flow direction for edge-contaminated cells is set to another not-nodata cell if possible: the other cell is downstream, i.e. has a lower elevation value. The reason is that edge-contaminated cells most likely belong to the same catchment like a neighboring lower lying cell. Otherwise all edge-contaminated cells that do not receive flow accumulation from not edge-contaminated cells would form isolated single-cell catchments. -- Ticket URL: <https://trac.osgeo.org/grass/ticket/3756#comment:3> GRASS GIS <https://grass.osgeo.org>
_______________________________________________ grass-dev mailing list grass-dev@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-dev