Obtain an `sf::crs`

or `fm_crs`

object from a spatial object, or
convert crs information to construct a new `sf::crs`

object.

## Usage

```
# S3 method for fm_crs
is.na(x)
# S3 method for inla.CRS
is.na(x)
fm_crs_is_null(x)
fm_crs(x, ..., crsonly = FALSE)
fm_crs_oblique(x)
fm_crs_oblique(x) <- value
# S3 method for fm_crs
print(x, ...)
# S3 method for default
fm_crs(x, ..., crsonly = FALSE)
# S3 method for fm_crs
st_crs(x, ...)
# S3 method for fm_crs
$(x, name)
# S3 method for fm_crs
fm_crs(x, ..., crsonly = FALSE)
# S3 method for inla.CRS
fm_crs(x, ..., crsonly = FALSE)
# S3 method for character
fm_crs(x, ..., crsonly = FALSE)
# S3 method for Spatial
fm_crs(x, ..., crsonly = FALSE)
# S3 method for SpatVector
fm_crs(x, ..., crsonly = FALSE)
# S3 method for SpatRaster
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)
fm_wkt_predef()
```

## Arguments

- x
Object to convert to

`crs`

or to extract`crs`

information from. If`character`

, a string suitable for`sf::st_crs(x)`

, or the name of a predefined`wkt`

string from ``names(fm_wkt_predef())`.- ...
Additional parameters. Not currently in use.

- crsonly
logical; if

`TRUE`

, remove any`oblique`

information for`fm_crs`

class objects and return a pure`crs`

class object. Default:`FALSE`

.- value
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.

- name
element name

## Value

Either an `sf::crs`

object or an `fm_crs`

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

object or not.

A `crs`

object (`sf::st_crs()`

) or a `fm_crs`

object.
An S3 `fm_crs`

object is a list with elements `crs`

and `oblique`

.

`fm_wkt_predef`

returns a WKT2 string defining a projection

## 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.

## Methods (by generic)

`is.na(fm_crs)`

: Check if a`fm_crs`

has`NA`

crs information`st_crs(fm_crs)`

:`st_crs(x, ...)`

is equivalent to`fm_crs(x, ..., crsonly = TRUE)`

when`x`

is a`fm_crs`

object.`$`

: For a`fm_crs`

object`x`

,`x$name`

calls the accessor method for the`crs`

object inside it. If`name`

is "crs", the internal crs object itself is returned. If`name`

is "oblique", the internal oblique angle parameter vector is returned.

## Functions

`is.na(inla.CRS)`

: Check if a`inla.CRS`

has`NA`

crs information`fm_crs_is_null()`

: Check if an object is or has`NULL`

or`NA`

CRS information. If not`NULL`

,`is.na(fm_crs(x))`

is returned. This allows the input to be e.g. a proj4string or epsg number, since the default`fm_crs()`

method passes its argument on to`sf::st_crs()`

.

## Author

Finn Lindgren finn.lindgren@gmail.com

## Examples

```
crs1 <- fm_crs("longlat_globe")
crs2 <- fm_crs("lambert_globe")
crs3 <- fm_crs("mollweide_norm")
crs4 <- fm_crs("hammer_globe")
crs5 <- fm_crs("sphere")
crs6 <- fm_crs("globe")
if (FALSE) {
names(fm_wkt_predef())
}
```