## DESCRIPTION

The GRASS program r.patch allows the user to build a new raster map the size and resolution of the current region by assigning known data values from input raster maps to the cells in this region. This is done by filling in "no data" cells, those that do not yet contain data, contain NULL data, or, optionally contain 0 data, with the data from the first input map. Once this is done the remaining holes are filled in by the next input map, and so on.

This program is useful for making a composite raster map layer from two or more adjacent map layers, for filling in "holes" in a raster map layer's data (e.g., in digital elevation data), or for updating an older map layer with more recent data. The current geographic region definition and mask settings are respected.

Figure: Result of patching two raster maps containing NULLs using the default settings

The first name listed in the string input=name,name,name, ... is the name of the first map whose data values will be used to fill in "no data" cells in the current region. The second through last input name maps will be used, in order, to supply data values for for the remaining "no data" cells.

Figure: Result of patching two raster maps using the -z flag to treat zeros as NULLs

### Relation to SQL COALESCE() function

The module is corresponds to the SQL COALESCE() function. This function takes two or more arguments and returns a copy of its first non-NULL argument. If all arguments are NULL, the function returns NULL.

The r.patch module iterates over all cells and for each cell of the output raster map uses the first corresponding non-NULL cell in the series of the input raster maps.

### Example of filling areas

Below, the raster map layer on the far left is patched with the middle (patching) raster map layer, to produce the composite raster map layer on the right. The example assumes zero values to be treated as NULLs (-z flag).

      1 1 1 0 2 2 0 0    0 0 1 1 0 0 0 0    1 1 1 1 2 2 0 0
      1 1 0 2 2 2 0 0    0 0 1 1 0 0 0 0    1 1 1 2 2 2 0 0
      3 3 3 3 2 2 0 0    0 0 0 0 0 0 0 0    3 3 3 3 2 2 0 0
      3 3 3 3 0 0 0 0    4 4 4 4 4 4 4 4    3 3 3 3 4 4 4 4
      3 3 3 0 0 0 0 0    4 4 4 4 4 4 4 4    3 3 3 4 4 4 4 4
      0 0 0 0 0 0 0 0    4 4 4 4 4 4 4 4    4 4 4 4 4 4 4 4

Switching the patched and the patching raster map layers produces the following results:

      0 0 1 1 0 0 0 0    1 1 1 0 2 2 0 0    1 1 1 1 2 2 0 0
      0 0 1 1 0 0 0 0    1 1 0 2 2 2 0 0    1 1 1 1 2 2 0 0
      0 0 0 0 0 0 0 0    3 3 3 3 2 2 0 0    3 3 3 3 2 2 0 0
      4 4 4 4 4 4 4 4    3 3 3 3 0 0 0 0    4 4 4 4 4 4 4 4
      4 4 4 4 4 4 4 4    3 3 3 0 0 0 0 0    4 4 4 4 4 4 4 4
      4 4 4 4 4 4 4 4    0 0 0 0 0 0 0 0    4 4 4 4 4 4 4 4

## NOTES

Frequently, this program is used to patch together adjacent map layers which have been digitized separately. The program v.mkgrid can be used to make adjacent maps align neatly.

The user should check the current geographic region settings before running r.patch, to ensure that the region boundaries encompass all of the data desired to be included in the composite map and to ensure that the region resolution is the resolution of the desired data. To set the geographic region settings to one or several raster maps, the g.region program can be used:

    g.region raster=map1[,map2[,...]]

Use of r.patch is generally followed by use of the GRASS programs g.remove and g.rename; g.remove is used to remove the original (un-patched) raster map layers, while g.rename is used to then assign to the newly-created composite (patched) raster map layer the name of the original raster map layer.

r.patch reads the existing category label files and color tables from the input maps and creates these files for the patched, composite output map. This can be quite time consuming for certain maps, especially if there are many different category values across the patched maps. The -s flag allows disabling the reading and creation of these support files, meaning that the output map will have no category labels and no explicit color table.

Number of raster maps to be processed is given by the limit of the operating system. For example, both the hard and soft limits are typically 1024. The soft limit can be changed with e.g. `ulimit -n 1500` (UNIX-based operating systems) but not higher than the hard limit. If it is too low, you can as superuser add an entry in

    /etc/security/limits.conf
    # <domain>      <type>  <item>         <value>
    your_username  hard    nofile          1500

This would raise the hard limit to 1500 file. Be warned that more files open need more RAM. See also the Wiki page Hints for large raster data processing.

Operating systems usually limit the length of the command line which limits the number of input raster maps user can pass to the module using the option input. In that case, r.series can be used instead of r.patch.

## EXAMPLES

### Example with three maps

The input are three maps called roads, water and forest. Primarily, we want to use the values from roads, then from water and if no other values are available we want to use forest. First we set the computation region assuming that the all three maps fully overlap and have the same resolution (so we can safely use the just the one without further modifications of the region). Then we perform the patching.

    g.region raster=roads
    r.patch input=roads,water,forest output=result

### Example using Bash syntax

Create a list of maps matching a pattern, extend the region to include them all, and patch them together to create a mosaic. Overlapping maps will be used in the order listed.

    MAPS=`g.list type=raster sep=, pat="map_*"`
    g.region raster=$MAPS
    r.patch in=$MAPS out=mosaic

## SEE ALSO

g.region, g.remove, g.rename, r.mapcalc, r.support, r.series, v.mkgrid

Hints for large raster data processing

## AUTHOR

Michael Shapiro, U.S. Army Construction Engineering Research Laboratory
-z flag and performance improvement by Huidae Cho

Last changed: $Date: 2017-07-30 06:15:07 +0200 (Sun, 30 Jul 2017) $