Provided by: grass-doc_6.4.3-3_all bug

NAME

       r.cost   -  Creates  a  raster  map  showing  the  cumulative cost of moving between different geographic
       locations on an input raster map whose cell category values represent cost.

KEYWORDS

       raster, cost surface, cumulative costs

SYNOPSIS

       r.cost
       r.cost help
       r.cost  [-knrv]  input=name  output=name   [outdir=string]     [start_points=name]     [stop_points=name]
       [start_rast=name]      [coordinate=x,y[,x,y,...]]     [stop_coordinate=x,y[,x,y,...]]     [max_cost=cost]
       [null_cost=null cost]   [percent_memory=percent memory]   [--overwrite]  [--verbose]  [--quiet]

   Flags:
       -k
           Use the 'Knight's move'; slower, but more accurate

       -n
           Keep null values in output raster map

       -r
           Start with values in raster map

       -v
           Run verbosely

       --overwrite
           Allow output files to overwrite existing files

       --verbose
           Verbose module output

       --quiet
           Quiet module output

   Parameters:
       input=name
           Name of raster map containing grid cell cost information

       output=name
           Name for output raster map

       outdir=string
           Name of output raster map to contain movement directions

       start_points=name
           Name of starting vector points map

       stop_points=name
           Name of stop vector points map

       start_rast=name
           Name of starting raster points map

       coordinate=x,y[,x,y,...]
           Map grid coordinates of a starting point (E,N)

       stop_coordinate=x,y[,x,y,...]
           Map grid coordinates of a stopping point (E,N)

       max_cost=cost
           Optional maximum cumulative cost
           Default: 0

       null_cost=null cost
           Cost assigned to null cells. By default, null cells are excluded

       percent_memory=percent memory
           Percent of map to keep in memory
           Default: 100

DESCRIPTION

       r.cost determines the cumulative cost of moving to each cell on a cost surface  (the  input  raster  map)
       from  other  user-specified cell(s) whose locations are specified by their geographic coordinate(s). Each
       cell in the original cost surface map will  contain  a  category  value  which  represents  the  cost  of
       traversing  that cell. r.cost will produce 1) an output raster map in which each cell contains the lowest
       total cost of traversing the space between each cell and the user-specified points  (diagonal  costs  are
       multiplied  by  a  factor  that  depends  on the dimensions of the cell) and 2) a second raster map layer
       showing the movement direction to the next cell on the  path  back  to  the  start  point  (see  Movement
       Direction). This program uses the current geographic region settings.  The output map will be of the same
       data format as the input map, integer or floating point.

OPTIONS

       The input name is the name of a raster map whose category values represent the surface cost.  The  output
       name  is  the  name  of  the  resultant raster map of cumulative cost. The outdir name is the name of the
       resultant raster map of movement directions (see Movement Direction).

       r.cost can be run with three different methods of identifying the starting point(s). One or  more  points
       (geographic coordinate pairs) can be provided as specified coordinates on the command line, from a vector
       points file, or from a raster map.  All non-NULL cells are considered to be starting  points.   Each  x,y
       coordinate  pair  gives  the  geographic location of a point from which the transportation cost should be
       figured. As many points as desired can be entered by the user. These starting points  can  also  be  read
       from  a  vector  points  file through the start_points option or from a raster map through the start_rast
       option.

       r.cost will stop cumulating costs when either max_cost is reached, or one of the stop points  given  with
       stop_coordinates  is  reached.  Alternatively, the stop points can be read from a vector points file with
       the stop_points option. During execution, once the cumulative  cost  to  all  stopping  points  has  been
       determined,  processing  stops.  Both sites read from a vector points file and those given on the command
       line will be processed.

       The null cells in the input map can be assigned a (positive  floating  point)  cost  with  the  null_cost
       option.
       When  input  map  null  cells  are given a cost with the null_cost option, the corresponding cells in the
       output map are no longer null cells. By using the -n flag, the null cells of the input map  are  retained
       as null cells in the output map.

       As r.cost can run for a very long time, it can be useful to use the -v verbose flag to track progress.

       The  Knight's move (-k flag) may be used to improve the accuracy of the output. In the diagram below, the
       center location (O) represents a  grid  cell  from  which  cumulative  distances  are  calculated.  Those
       neighbors  marked  with  an  X are always considered for cumulative cost updates. With the -k option, the
       neighbors marked with a K are also considered.
        . . . . . . . . . . . . . . .
        .   .   . K .   . K .   .   .
        . . . . . . . . . . . . . . .
        .   . K . X . X . X . K .   .
        . . . . . . . . . . . . . . .
        .   .   . X . O . X .   .   .
        . . . . . . . . . . . . . . .
        .   . K . X . X . X . K .   .
        . . . . . . . . . . . . . . .
        .   .   . K .   . K .   .   .
        . . . . . . . . . . . . . . .

       Knight's move example:
            | Flat cost surface without (left pane) and with the knight's move (right pane).  The default is  to
       grow the cost outwards in 8 directions.  Using the knight's move grows it outwards in 16 directions.

NULL CELLS

       By  default  null cells in the input raster map are excluded from the algorithm, and thus retained in the
       output map.

       If one wants r.cost to transparently cross any region of null cells, the null_cost=0.0 option  should  be
       used. Then null cells just propagate the adjacent costs. These cells can be retained as null cells in the
       output map by using the -n flag.

NOTES

       Sometimes, when the differences among integer cell category values in the r.cost cumulative cost  surface
       output are small, this cumulative cost output cannot accurately be used as input to r.drain (r.drain will
       output bad results). This problem can be circumvented by making the  differences  between  cell  category
       values  in  the cumulative cost output bigger. It is recommended that, if the output from r.cost is to be
       used as input to r.drain, the user multiply the input cost surface map to r.cost  by  the  value  of  the
       map's cell resolution, before running r.cost. This can be done using r.mapcalc. The map resolution can be
       found using g.region.  This problem doesn't arise with floating point maps.

   Algorithm notes
       The fundamental approach to calculating minimum travel cost is as follows:

        The user generates a raster map indicating the cost of traversing each cell in the north-south and east-
       west  directions.   This  map,  along with a set of starting points are submitted to r.cost. The starting
       points are put into a list cells from which costs to the adjacent cells are to be calculated. The cell on
       the  list with the lowest cumulative cost is selected for computing costs to the neighboring cells. Costs
       are computed and those cells are put on the list and the originating cell is finalized. This  process  of
       selecting the lowest cumulative cost cell, computing costs to the neighbors, putting the neighbors on the
       list and removing the originating cell from the list continues until the list is empty.

       The most time consuming aspect of this algorithm is the  management  of  the  list  of  cells  for  which
       cumulative  costs have been at least initially computed. r.cost uses a binary tree with an linked list at
       each node in the tree for efficiently holding cells with identical cumulative costs.

       r.cost, like most all GRASS raster programs, is also made to be run  on  maps  larger  that  can  fit  in
       available  computer  memory.  As the algorithm works through the dynamic list of cells it can move almost
       randomly around the entire area. r.cost divides the entire area into a number of pieces and  swaps  these
       pieces  in  and  out  of  memory  (to  and  from disk) as needed. This provides a virtual memory approach
       optimally designed for 2-D raster maps.  The amount of  map  to  hold  in  memory  at  one  time  can  be
       controlled  with  the  percent_memory  option.  For  large maps this value will have to be set to a lower
       value.

EXAMPLES

       Consider the following example:
              Input:
                COST SURFACE
              . . . . . . . . . . . . . . .
              . 2 . 2 . 1 . 1 . 5 . 5 . 5 .
              . . . . . . . . . . . . . . .
              . 2 . 2 . 8 . 8 . 5 . 2 . 1 .
              . . . . . . . . . . . . . . .
              . 7 . 1 . 1 . 8 . 2 . 2 . 2 .
              . . . . . . . . . . . . . . .
              . 8 . 7 . 8 . 8 . 8 . 8 . 5 .
              . . . . . . . . . . _____ . .
              . 8 . 8 . 1 . 1 . 5 | 3 | 9 .
              . . . . . . . . . . |___| . .
              . 8 . 1 . 1 . 2 . 5 . 3 . 9 .
              . . . . . . . . . . . . . . .
       Output (using -k):                Output (not using -k):
          CUMULATIVE COST SURFACE           CUMULATIVE COST SURFACE
        . . . . . . . . . . . . . . .     . . . . * * * * * . . . . . .
        . 21. 21. 20. 19. 17. 15. 14.     . 22. 21* 21* 20* 17. 15. 14.
        . . . . . . . . . . . . . . .     . . . . * * * * * . . . . . .
        . 20. 19. 22. 19. 15. 12. 11.     . 20. 19. 22* 20* 15. 12. 11.
        . . . . . . . . . . . . . . .     . . . . . . * * * * * . . . .
        . 22. 18. 17. 17. 12. 11.  9.     . 22. 18. 17* 18* 13* 11.  9.
        . . . . . . . . . . . . . . .     . . . . . . * * * * * . . . .
        . 21. 14. 13. 12.  8.  6.  6.     . 21. 14. 13. 12.  8.  6.  6.
        . . . . . . . . . .  _____. .     . . . . . . . . . . . . . . .
        . 16. 13.  8.  7.  4 | 0 | 6.     . 16. 13.  8. 7 .  4.  0.  6.
        . . . . . . . . . .  |___|. .     . . . . . . . . . . . . . . .
        . 14.  9.  8.  9.  6.  3.  8.     . 14.  9.  8. 9 .  6.  3.  8.
        . . . . . . . . . . . . . . .     . . . . . . . . . . . . . . .

       The user-provided ending location in the above example is the boxed 3 in the above input map.  The  costs
       in  the  output  map represent the total cost of moving from each box ("cell") to one or more (here, only
       one) starting location(s). Cells surrounded by asterisks are those that are different between  operations
       using and not using the Knight's move (-k) option.

   Output analysis
       The output map can be viewed, for example, as an elevation model in which the starting location(s) is/are
       the lowest point(s). Outputs from  r.cost can be used as inputs to r.drain with the direction flag -d, in
       order  to  trace  the  least-cost path given by this model between any given cell and the r.cost starting
       location(s). The two programs, when used together, generate least-cost paths or corridors between any two
       map locations (cells).

   Shortest distance surfaces
       The  r.cost  module  allows  for computing the shortest distance of each pixel from raster lines, such as
       determining the shortest distances of households to the nearby road. For this  cost  surfaces  with  cost
       value 1 are used. The calculation is done with r.cost as follows (example for Spearfish region):
         g.region rast=roads -p
         r.mapcalc "area.one=1"
         r.cost -k input=area.one output=distance start_rast=roads
         d.rast distance
         d.rast.num distance
         #transform to metric distance from cell distance using the raster resolution:
         r.mapcalc "dist_meters=distance * (ewres()+nsres())/2."
         d.rast dist_meters

Movement Direction

       The  movement  direction  surface  is  created  to record the sequence of movements that created the cost
       accumulation surface. Without it r.drain would not correctly create a path from an end point back to  the
       start  point.  The  direction  shown  in  each  cell  points  away from the cell that came before it. The
       directions are recorded as
              112.5 90  67.5         i.e. a cell with the value 135
       157.5  135   0   45   22.5    means the cell before it is
              180   x   0            to the south-east.
       202.5  225  270  315  337.5
              247.5     292.5

       Once r.cost computes the cumulative cost map, r.drain can be used to find the  minimum  cost  path.  Make
       sure  to use the -d flag and the movement direction raster map when running r.drain to ensure the path is
       computed according to the proper movement directions.

BUGS

       The percentage done calculation reported in verbose mode is often not linear and ends well  before  100%.
       This does not affect output.

SEE ALSO

       r.drain, r.walk, r.in.ascii, r.mapcalc, r.out.ascii

AUTHOR

       Antony Awaida,
       Intelligent Engineering
       Systems Laboratory,
       M.I.T.
       James Westervelt,
       U.S.Army Construction Engineering Research Laboratory

       Updated for Grass 5
       Pierre de Mouveaux (pmx@audiovu.com)

       Last changed: $Date: 2013-03-26 14:18:02 -0700 (Tue, 26 Mar 2013) $

       Full index

       © 2003-2013 GRASS Development Team