[GRASS-dev] [GRASS GIS] #2368: Python version of r.grow does not support shrinking
GRASS GIS
trac at osgeo.org
Fri Jul 18 14:44:06 PDT 2014
#2368: Python version of r.grow does not support shrinking
----------------------------------------------------------------+-----------
Reporter: wenzeslaus | Owner: grass-dev@…
Type: enhancement | Status: new
Priority: normal | Milestone: 7.1.0
Component: Raster | Version: svn-trunk
Keywords: r.grow, r.grow.distance, r.buffer, r.buffer.lowmem | Platform: Unspecified
Cpu: Unspecified |
----------------------------------------------------------------+-----------
Comment(by glynn):
Replying to [ticket:2368 wenzeslaus]:
> While C version of `r.grow` supports shrinking (negative
distance/radius) since r59735, the Python version of `r.grow` based on C
module `r.grow.distance` and `r.mapcalc` expression supports only growing
(positive distance/radius). Shrinking (negative buffer) is a useful
feature, so I think we should add it.
For me, the question isn't whether it's useful, but whether it belongs in
r.grow, as opposed to a separate r.shrink module. The two operations are
quite different (growing has to determine the correct value for "new"
cells, shrinking only discards data).
> I'm not sure if negative distances can be added to `r.grow.distance`.
Shrinking can be implemented using r.grow.distance by first generating an
"inverted" map (null if the input is non-null, non-null if the input is
null), growing the inverted map, inverting the result, then using it as a
mask.
Whether this will be faster than the C version depends upon the size of
the buffer and the proportion of non-null cells. The worst-case time for
r.grow.distance is proportional to the size of the input, whereas the
worst-case time for the C version of r.grow is also proportional to the
size of the buffer (specifically, to its area, i.e. the square of its
radius).
For a sufficiently large buffer, r.grow.distance will be faster. Unless
the cross-over point is unreasonably large, it may be worth implementing
an r.grow.distance-based version even if the C version of r.grow is
provided.
--
Ticket URL: <https://trac.osgeo.org/grass/ticket/2368#comment:1>
GRASS GIS <http://grass.osgeo.org>
More information about the grass-dev
mailing list