Reproject coordinates from a matrix or data frame by explicitly specifying the 'source' and 'target' projections.
# S3 method for class 'sc'
reproj(x, target = NULL, ..., source = NULL)
# S3 method for class 'mesh3d'
reproj(x, target, ..., source = NULL)
# S3 method for class 'quadmesh'
reproj(x, target, ..., source = NULL)
# S3 method for class 'triangmesh'
reproj(x, target, ..., source = NULL)
reproj(x, target, ..., source = NULL, four = FALSE)
# S3 method for class 'matrix'
reproj(x, target, ..., source = NULL, four = FALSE)
# S3 method for class 'data.frame'
reproj(x, target, ..., source = NULL, four = FALSE)
reproj_xy(x, target, ..., source = NULL)
reproj_xyz(x, target, ..., source = NULL)coordinates
target specification (PROJ.4 string or epsg code)
arguments passed to PROJ::proj_trans()
source specification (PROJ.4 string or epsg code)
defunct, was 'if TRUE return four columns xyzt', use the shape of the input instead
numeric matrix of the transformed coordinates, either 2, 3, or 4 columns depending on the
shape of the input. Use reproj_xy() or
reproj_xyz() for those specific 2- and 3-column cases.
The transformation engine is the PROJ package, a wrapper around the PROJ library, so that we can simply give coordinates in data frame or matrix form, with a source projection and a target projection.
reproj accepts a wide variety of source and target strings, not just "proj4string", and we are completely subject to the rules and behaviours of the PROJ library. We always assume "visualization order", i.e. longitude then latitude, easting then northing (as X, Y).
The basic function reproj() takes input in generic form (matrix or data
frame) and returns a matrix with columns matching the coordinate columns
of the input (2, 3, or 4 of x, y, z, m), by
transforming from map projection specified by the source argument to that
specified by the target argument. Only column order is respected, column
names are ignored.
This model of working also allows adding methods for specific data formats
that already carry a suitable source projection string. Currently we
support types from the silicate and quadmesh and rgl packages, and only the
target string need be specified.
This model has obvious flexibility, for packages to import the generic and
call it with the correct source (from the data format) and the target
from user, or process controlled mechanism.
The source argument must be named, and if it is not present a light check
is made that the source data could be "longitude/latitude" and transformation
to target is applied (this can be controlled by setting options).
Functions reproj_xy() and reproj_xyz() are helpers for reproj() and always
return 2- or 3-column matrix respectively.
Note that any integer input for source or target will be formatted to a
character string like "EPSG:<integer_code>" as a simple convenience. Note that
there are other authorities besides EPSG, so the pattern "AUTH:code" is a general
one and you should really be explicit.
Other R packages for transforming coordinates are geared toward data that's in a particular format. It's true that only GDAL provides the full gamut of available geographic map projections, but this leaves a huge variety of workflows and applications that don't need that level of functionality.
The PROJ package (>= 0.7.0) does all transformation work, wrapping the PROJ library (>= 6.3.1).
The behaviour is controlled by user-settable options which on start up are
reproj.assume.longlat = TRUE and
reproj.default.longlat = "OGC:CRS84".
If the option reproj.assume.longlat is set to FALSE then the source
argument must be named explicitly, i.e. reproj(xy, t_srs, source = s_srs),
this is to help catch mistakes being made.
If the option reproj.assume.longlat is set to TRUE and the input data
appear to be sensible longitude/latitude values, then the value of
reproj.default.longlat is used as the assumed source projection.