Creates either a CRS object or an inla.CRS object, describing a coordinate reference system

## Usage

```
fm_CRS(...)
# S3 method for crs
fm_CRS(x, ...)
# S3 method for fm_crs
fm_CRS(x, ...)
# S3 method for Spatial
fm_CRS(x, ...)
# S3 method for inla.CRS
fm_CRS(x, ..., crsonly = FALSE)
# S3 method for sf
fm_CRS(x, ..., crsonly = FALSE)
# S3 method for sfc
fm_CRS(x, ..., crsonly = FALSE)
# S3 method for sfg
fm_CRS(x, ..., crsonly = FALSE)
# S3 method for inla.mesh
fm_CRS(x, ..., crsonly = FALSE)
# S3 method for inla.mesh.lattice
fm_CRS(x, ..., crsonly = FALSE)
# S3 method for inla.mesh.segment
fm_CRS(x, ..., crsonly = FALSE)
# S3 method for CRS
fm_CRS(x, oblique = NULL, ...)
# S3 method for default
fm_CRS(
projargs = NULL,
doCheckCRSArgs = NULL,
args = NULL,
oblique = NULL,
SRS_string = NULL,
...
)
```

## Arguments

- ...
Additional parameters. Not currently in use.

- x
Object to convert to CRS or to extract CRS information from.

- crsonly
logical; if

`TRUE`

, remove any oblique`information for`

inla.CRS`class objects and return a pure`

CRS`class object. Default:`

FALSE`.- oblique
Vector of length at most 4 of rotation angles (in degrees) for an oblique projection, all values defaulting to zero. The values indicate (longitude, latitude, orientation, orbit), as explained in the Details section below.

- projargs
Either 1) a projection argument string suitable as input to

`sp::CRS`

, or 2) an existing`CRS`

object, or 3) a shortcut reference string to a predefined projection; run`names(fm_wkt_predef())`

for valid predefined projections.- doCheckCRSArgs
ignored.

- args
An optional list of name/value pairs to add to and/or override the PROJ4 arguments in

`projargs`

.`name=value`

is converted to`"+name=value"`

, and`name=NA`

is converted to`"+name"`

.- SRS_string
a WKT2 string defining the coordinate system; see

`sp::CRS`

. This takes precedence over`projargs`

.

## Value

Either an `sp::CRS`

object or an `inla.CRS`

object,
depending on if the coordinate reference system described by the parameters
can be expressed with a pure `sp::CRS`

object or not.

An S3 `inla.CRS`

object is a list, usually (but not necessarily)
containing at least one element:

- crs
The basic

`sp::CRS`

object

## Details

The first two
elements of the `oblique`

vector are the (longitude, latitude)
coordinates for the oblique centre point. The third value (orientation) is a
counterclockwise rotation angle for an observer looking at the centre point
from outside the sphere. The fourth value is the quasi-longitude (orbit
angle) for a rotation along the oblique observers equator.

Simple oblique: `oblique=c(0, 45)`

Polar: `oblique=c(0, 90)`

Quasi-transversal: `oblique=c(0, 0, 90)`

Satellite orbit viewpoint: `oblique=c(lon0-time*v1, 0, orbitangle, orbit0+time*v2)`

, where `lon0`

is the longitude at which a satellite
orbit crosses the equator at `time=0`

, when the satellite is at an
angle `orbit0`

further along in its orbit. The orbital angle relative
to the equatorial plane is `orbitangle`

, and `v1`

and `v2`

are the angular velocities of the planet and the satellite, respectively.
Note that "forward" from the satellite's point of view is "to the right" in
the projection.

When `oblique[2]`

or `oblique[3]`

are non-zero, the resulting
projection is only correct for perfect spheres.

## Author

Finn Lindgren finn.lindgren@gmail.com