Learn R Programming

raster (version 1.8-3)

projectRaster: Project a Raster object

Description

Project the values of a Raster* object to a new Raster* object with another projection (coordinate reference system, (CRS)). You can do this by providing the new projection as a single argument in which case the function sets the extent and resolution of the new object. To have more control over the transformation, and, for example, to assure that the new object lines up with other datasets, you can provide a Raster* object with the properties that the input data should be projected to. projecExtent returns a RasterLayer with a projected extent, but without any values. This RasterLayer can then be adjusted (e.g. by setting its resolution) and used as a template 'to' Raster object in projectRaster. projectRaster computes values for the cells of the new Raster object.

Usage

projectRaster(from, to, res, crs, method="bilinear", filename="", ...) 
projectExtent(object, crs)

Arguments

from
Raster* object
to
Raster* object with the parameters to which 'from' should be projected
res
Single or (vector of) two numerics. To, optionally, set the output resolution if 'to' is missing
crs
Character or object of class 'CRS'. PROJ.4 description of the coordinate reference system. In projectRaster this is used to set the output CRS if 'to' is missing, or if 'to' has no valid CRS
method
Method used to compute values for the new RasterLayer. Either 'ngb' (nearest neighbor), which is useful for categorical variables, or 'bilinear' (bilinear interpolation; the default value), which is appropriate for continuous variables.
filename
Character. Output filename
...
Additional arguments. See Details.
object
Raster* object

Value

  • RasterLayer or RasterBrick object.

Details

There are two approaches you can follow to project the values of a Raster object. 1) Provide a crs argument, and, optionally, a res argument, but do not provide a to argument. 2) Create a template Raster with the CRS you want to project to. You can use an existing object, or use projectExtent for this or an existing Raster* object. Also set the number of rows and columns (or the resolution), and perhaps adjust the extent. The resolution of the output raster should normally be similar to that of the input raster. Then use that object as from argument to project the input Raster to. This is the preferred method because you have most control. For example you can assure that the resulting Raster object lines up with other Raster objects. Projection is performed using the PROJ.4 library accesed through the rgdal package. One of the best places to find PROJ.4 coordinate reference system descriptions is http://www.spatialreference.org. You can also consult this page: http://www.remotesensing.org/geotiff/proj_list/ to find the parameter options and names for projections. Also see projInfo('proj'), projInfo('ellps'), and projInfo('datum') for valid PROJ.4 values. The following additional arguments can be passed, to replace default values for this function rll{ overwrite Logical. If TRUE, "filename" will be overwritten if it exists format Character. Output file type. See writeRaster datatype Character. Output data type. See dataType progress Character. "text", "window", or "" (the default, no progress bar) }

See Also

resample CRS-class, projInfo, spTransform

Examples

Run this code
# create a new (not projected) RasterLayer with cellnumbers as values
r <- raster(xmn=-110, xmx=-90, ymn=40, ymx=60, ncols=40, nrows=40)
r <- setValues(r, 1:ncell(r))
projection(r)
# proj.4 projection description
newproj <- "+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100 +ellps=WGS84"

# we need to have rgdal installed for this
if (require(rgdal)) {

#simplest approach
pr1 <- projectRaster(r, crs=newproj)

# alternatively also set the resolution
pr2 <- projectRaster(r, crs=newproj, res=20000)

# inverse projection, back to the properties of 'r'
inv <- projectRaster(pr2, r)

# to have more control, provide an existing Raster object, here we create one
# using projectExtent (no values are transferred)
pr3 <- projectExtent(r, newproj)
# Adjust the cell size 
res(pr3) <- 200000
# now project
pr3 <- projectRaster(r, pr3)

# using a higher resolution
res(pr1) <- 10000
pr <- projectRaster(r, pr1, method='bilinear')
inv <- projectRaster(pr, r, method='bilinear')
dif <- r - inv
# small difference
plot(dif)

# Meuse data to long/lat
meuse <- raster(system.file("external/test.grd", package="raster"))
meusell <- projectRaster(meuse, res=1/1200, crs="+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")
}

Run the code above in your browser using DataLab