Provided by: grass-doc_8.3.0-1_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, cost allocation

SYNOPSIS

       r.cost
       r.cost --help
       r.cost [-knrib] input=name  output=name   [solver=name]    [nearest=name]    [outdir=name]
       [start_points=name]                 [stop_points=name]                 [start_raster=name]
       [start_coordinates=east,north[,east,north,...]]
       [stop_coordinates=east,north[,east,north,...]]      [max_cost=value]     [null_cost=value]
       [memory=memory in MB]   [--overwrite]  [--help]  [--verbose]  [--quiet]  [--ui]

   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

       -i
           Print info about disk space and memory requirements and exit

       -b
           Create bitmask encoded directions

       --overwrite
           Allow output files to overwrite existing files

       --help
           Print usage summary

       --verbose
           Verbose module output

       --quiet
           Quiet module output

       --ui
           Force launching GUI dialog

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

       output=name [required]
           Name for output raster map

       solver=name
           Name of input raster map solving equal costs
           Helper variable to pick a direction if two  directions  have  equal  cumulative  costs
           (smaller is better)

       nearest=name
           Name for output raster map with nearest start point

       outdir=name
           Name for output raster map to contain movement directions

       start_points=name
           Name of starting vector points map
           Or data source for direct OGR access

       stop_points=name
           Name of stopping vector points map
           Or data source for direct OGR access

       start_raster=name
           Name of starting raster points map

       start_coordinates=east,north[,east,north,...]
           Coordinates of starting point(s) (E,N)

       stop_coordinates=east,north[,east,north,...]
           Coordinates of stopping point(s) (E,N)

       max_cost=value
           Maximum cumulative cost
           Default: 0

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

       memory=memory in MB
           Maximum memory to be used (in MB)
           Cache size for raster rows
           Default: 300

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 module 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
       start_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 start_coordinates 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_raster 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.

       If the nearest output parameter is specified, the module will calculate for each cell  its
       nearest starting point based on the minimized accumulative cost while moving over the cost
       map.

       The solver option helps to select a particular direction in case  of  multiple  directions
       with  equal  costs.  Sometimes fields with equal cumulative costs exist and multiple paths
       with equal costs would lead from a start point to a stop point. By default, a  path  along
       the  edge  of  such a field would be produced or multiple paths of equal costs with the -b
       flag. An additional variable can be supplied with the solver option to help the  algorithm
       pick a particular direction.

       Example for solving multiple directions:

       A  field  of  equal  cumulative  costs  with  multiple paths
       (black). By default a path along the edge will  be  selected
       (red).  Path  selection  can  be  controlled with the solver
       option (blue).

       Multiple directions can be solved as in the above example with the following steps:

       1      Create multiple directions with r.cost/r.walk using the -b flag

       2      Extract paths using r.path format=bitmask

       3      Calculate  the  distance  from  NULL  cells  to  paths  using  r.grow.distance   -n
              input=<paths from r.path>

       4      Invert  the  sign of the distances with r.mapcalc because for the solver smaller is
              better, and here we want to get the center of an area with multiple directions

       5      Use these negative distances as solver for a second pass of r.cost

       6      Extract paths again with r.path to get a geometrically optimized solution

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

       Paths  from any point to the nearest starting point of r.cost can be extracted with r.path
       by using the direction output map of r.cost.

   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 heap of cells from which costs  to
       the  adjacent  cells are to be calculated. The cell on the heap with the lowest cumulative
       cost is selected for computing costs to the neighboring  cells.  Costs  are  computed  and
       those  cells  are  put  on the heap 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 heap and removing the originating cell from the heap continues until the
       heap is empty.

       The most time consuming aspect of this algorithm is the management of the  heap  of  cells
       for  which  cumulative  costs have been at least initially computed. r.cost uses a minimum
       heap for efficiently tracking the next cell with the lowest 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 heap 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  memory  to  be  used  by r.cost can be controlled with the memory option,
       default is 300 MB. For systems with less memory 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 starting 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.path  , 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 raster=roads -p
         r.mapcalc "area.one = 1"
         r.cost -k input=area.one output=distance start_raster=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. This movement direction surface can be used by r.path to
       recover a path from an end point back to the start point.   The  direction  of  each  cell
       points towards the next cell.  The directions are recorded as degrees CCW from East:
              112.5      67.5         i.e. a cell with the value 135
       157.5  135   90   45   22.5    means the next cell is to the north-west
              180   x   360
       202.5  225  270  315  337.5
              247.5     292.5

   Cost allocation
       Example:  calculation  of  the cost allocation map "costalloc" and the cumulative cost map
       "costsurf" for given starting points (map "sources") and given cost raster map "costs":
       r.cost input=costs start_raster=sources output=costsurf nearest=costalloc

   Find the minimum cost path
       Once r.cost computes the cumulative cost map and an  associated  movement  direction  map,
       r.path can be used to find the minimum cost path.

SEE ALSO

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

AUTHORS

       Antony Awaida, Intelligent Engineering Systems Laboratory, M.I.T.
       James Westervelt, U.S.Army Construction Engineering Research Laboratory
       Updated for Grass 5 by Pierre de Mouveaux (pmx@audiovu.com)
       Markus Metz
       Multiple path directions sponsored by mundialis

SOURCE CODE

       Available at: r.cost source code (history)

       Accessed: Tuesday Jun 27 11:12:47 2023

       Main index | Raster index | Topics index | Keywords index | Graphical index | Full index

       © 2003-2023 GRASS Development Team, GRASS GIS 8.3.0 Reference Manual