CRS-class.Rd
Interface class to the PROJ projection and transformation system. The class is defined as an empty stub accepting value NA in the sp package. The initiation function may call the PROJ library through rgdal to verify the argument set against those known in the library, returning error messages where necessary. If the "CRS"
object is instantiated using CRS()
with rgdal using PROJ >= 6 and GDAL >= 3, the object may also have a WKT2 (2019) string carried as a comment
. The arguments for a Proj.4 string must be entered exactly as in the Proj.4 documentation, in particular there cannot be any white space in +<key>=<value>
strings, and successive such strings can only be separated by blanks. Note that only “+proj=longlat +ellps=WGS84” is accepted for geographical coordinates, which must be ordered (eastings, northings); the “+ellps=” definition must be given (or expanded internally from a given “+datum=” value) for recent versions of the Proj.4 library, and should be set to an appropriate value.
CRS(projargs, doCheckCRSArgs=TRUE, SRS_string=NULL) identicalCRS(x,y)
projargs | A character string of projection arguments; the arguments must be entered exactly as in the PROJ.4 documentation; if the projection is unknown, use |
---|---|
doCheckCRSArgs | default TRUE, must be set to FALSE by package developers including |
SRS_string | default NULL, only used when rgdal is built with PROJ >= 6 and GDAL >= 3; a valid WKT string or SRS definition such as |
x | object having a proj4string method,
or if |
y | object of class Spatial, or having a proj4string method |
Objects can be created by calls of the form CRS("projargs")
, where "projargs" is a valid string of PROJ.4 arguments. If the argument is a zero-length string or a character NA
, the object records NA
. If the "CRS"
object is instantiated using CRS()
with rgdal using PROJ >= 6 and GDAL >= 3, the object may also have a WKT2 (2019) string carried as a comment
. The initiation function may call the PROJ library through rgdal to verify the argument set against those known in the library, returning error messages where necessary. The function CRSargs()
can be used to show the expanded Proj.4 string used by the PROJ library.
projargs
:Object of class "character"
: projection arguments; the arguments must be entered exactly as in the PROJ.4 documentation, in particular there cannot be any white space in +<arg>=<value> strings, and successive such strings can only be separated by blanks.
signature(object = "CRS")
: print projection arguments in object
signature(object = "CRS")
: return WKT comment on object
rebuild a CRS object, usually used to add a WKT comment with PROJ >= 6 and GDAL >= 3
CRS
returns on success an object of class
CRS. identicalCRS
returns a logical, indicating
whether x
and y
have identical CRS, or if y
is missing whether all objects in list x
have identical CRS.
https://github.com/OSGeo/proj.4
Lists of projections may be seen by using the programs installed with the PROJ.4 library, in particular proj and cs2cs; with the latter, -lp lists projections, -le ellipsoids, -lu units, and -ld datum(s) known to the installed software (available in rgdal using projInfo
). These are added to in successive releases, so tracking the website or compiling and installing the most recent revisions will give the greatest choice. Finding the very important datum transformation parameters to be given with the +towgs84 tag is a further challenge, and is essential when the datums used in data to be used together differ. Tracing projection arguments is easier now than before the mass ownership of GPS receivers raised the issue of matching coordinates from different argument sets (GPS output and paper map, for example). See GridsDatums
, make_EPSG
and showEPSG
for help in finding CRS definitions.
The 4.9.1 release of the PROJ library omitted a small file of defaults, leading to reports of “major axis or radius = 0 or not given” errors. From 0.9-3, rgdal checks for the presence of this file (proj_def.dat), and if not found, and under similar conditions to those used by PROJ.4, adds “+ellps=WGS84” to the input string being checked by checkCRSArgs
The “+no_defs” tag ignores the file of defaults, and the default work-around implemented to get around this problem; strings including “init” and “datum” tags also trigger the avoidance of the work-around. Now messages are issued when a candidate CRS is checked; they may be suppressed using suppressMessages
.
From release 6 of the PROJ library, when used in building rgdal with GDAL >= 3, the +datum=
key in the Proj.4 string CRS representation is deprecated, and the +towgs84=
and +nadgrids=
keys may be deprecated soon. For this reason, sp, rgdal and sf are starting to use WKT2 (2019) string representations. In sp, the "CRS"
object in itself remains unchanged, but the content of its "projargs"
slot may be degraded. To work around the degradation, a comment
is added around the "CRS"
object containing a WKT2 (2019) string when rgdal is available and built with PROJ >= 6 and GDAL >=3.
CRS()#> CRS arguments: NACRS("")#> CRS arguments: NA#> CRS arguments: NACRS("+proj=longlat +datum=WGS84")#> CRS arguments: +proj=longlat +datum=WGS84 +no_defsif (require(rgdal)) { print(CRSargs(CRS("+proj=longlat +datum=NAD27"))) print(CRSargs(CRS("+init=epsg:4267"))) print(CRSargs(CRS("+init=epsg:26978"))) print(CRSargs(CRS(paste("+proj=sterea +lat_0=52.15616055555555", "+lon_0=5.38763888888889 +k=0.999908 +x_0=155000 +y_0=463000 +ellps=bessel", " +towgs84=565.237,50.0087,465.658,-0.406857,0.350733,-1.87035,4.0812 +units=m")))) print(CRSargs(CRS("+init=epsg:28992"))) }#>#>#> #> #> #> #> #> #> #> #> #>#> [1] "+proj=longlat +datum=NAD27 +no_defs" #> [1] "+proj=longlat +datum=NAD27 +no_defs" #> [1] "+proj=lcc +lat_0=36.6666666666667 +lon_0=-98.5 +lat_1=38.5666666666667 +lat_2=37.2666666666667 +x_0=400000 +y_0=400000 +datum=NAD83 +units=m +no_defs"#> Warning: Discarded datum Unknown based on Bessel 1841 ellipsoid in CRS definition, #> but +towgs84= values preserved#> Warning: Discarded datum Unknown based on Bessel 1841 ellipsoid in CRS definition, #> but +towgs84= values preserved#> [1] "+proj=sterea +lat_0=52.1561605555556 +lon_0=5.38763888888889 +k=0.999908 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.237,50.0087,465.658,-0.406857,0.350733,-1.87035,4.0812 +units=m +no_defs"#> Warning: Discarded datum Amersfoort in CRS definition#> Warning: Discarded datum Unknown based on Bessel 1841 ellipsoid in CRS definition#> [1] "+proj=sterea +lat_0=52.1561605555556 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs"# see http://trac.osgeo.org/gdal/ticket/1987 o <- new("Spatial") proj4string(o) <- CRS("+init=epsg:27700")#> Warning: Discarded datum OSGB_1936 in CRS definitionif (!is.null(comment(slot(o, "proj4string")))) { cat(strsplit(wkt(o), "\n")[[1]], sep="\n") cat(strsplit(wkt(slot(o, "proj4string")), "\n")[[1]], sep="\n") }#> PROJCRS["OSGB 1936 / British National Grid", #> BASEGEOGCRS["OSGB 1936", #> DATUM["OSGB 1936", #> ELLIPSOID["Airy 1830",6377563.396,299.3249646, #> LENGTHUNIT["metre",1]]], #> PRIMEM["Greenwich",0, #> ANGLEUNIT["degree",0.0174532925199433]], #> ID["EPSG",4277]], #> CONVERSION["British National Grid", #> METHOD["Transverse Mercator", #> ID["EPSG",9807]], #> PARAMETER["Latitude of natural origin",49, #> ANGLEUNIT["degree",0.0174532925199433], #> ID["EPSG",8801]], #> PARAMETER["Longitude of natural origin",-2, #> ANGLEUNIT["degree",0.0174532925199433], #> ID["EPSG",8802]], #> PARAMETER["Scale factor at natural origin",0.9996012717, #> SCALEUNIT["unity",1], #> ID["EPSG",8805]], #> PARAMETER["False easting",400000, #> LENGTHUNIT["metre",1], #> ID["EPSG",8806]], #> PARAMETER["False northing",-100000, #> LENGTHUNIT["metre",1], #> ID["EPSG",8807]], #> ID["EPSG",19916]], #> CS[Cartesian,2], #> AXIS["(E)",east, #> ORDER[1], #> LENGTHUNIT["metre",1, #> ID["EPSG",9001]]], #> AXIS["(N)",north, #> ORDER[2], #> LENGTHUNIT["metre",1, #> ID["EPSG",9001]]], #> USAGE[ #> SCOPE["unknown"], #> AREA["UK - Britain and UKCS 49°46'N to 61°01'N, 7°33'W to 3°33'E"], #> BBOX[49.75,-9.2,61.14,2.88]]] #> PROJCRS["OSGB 1936 / British National Grid", #> BASEGEOGCRS["OSGB 1936", #> DATUM["OSGB 1936", #> ELLIPSOID["Airy 1830",6377563.396,299.3249646, #> LENGTHUNIT["metre",1]]], #> PRIMEM["Greenwich",0, #> ANGLEUNIT["degree",0.0174532925199433]], #> ID["EPSG",4277]], #> CONVERSION["British National Grid", #> METHOD["Transverse Mercator", #> ID["EPSG",9807]], #> PARAMETER["Latitude of natural origin",49, #> ANGLEUNIT["degree",0.0174532925199433], #> ID["EPSG",8801]], #> PARAMETER["Longitude of natural origin",-2, #> ANGLEUNIT["degree",0.0174532925199433], #> ID["EPSG",8802]], #> PARAMETER["Scale factor at natural origin",0.9996012717, #> SCALEUNIT["unity",1], #> ID["EPSG",8805]], #> PARAMETER["False easting",400000, #> LENGTHUNIT["metre",1], #> ID["EPSG",8806]], #> PARAMETER["False northing",-100000, #> LENGTHUNIT["metre",1], #> ID["EPSG",8807]], #> ID["EPSG",19916]], #> CS[Cartesian,2], #> AXIS["(E)",east, #> ORDER[1], #> LENGTHUNIT["metre",1, #> ID["EPSG",9001]]], #> AXIS["(N)",north, #> ORDER[2], #> LENGTHUNIT["metre",1, #> ID["EPSG",9001]]], #> USAGE[ #> SCOPE["unknown"], #> AREA["UK - Britain and UKCS 49°46'N to 61°01'N, 7°33'W to 3°33'E"], #> BBOX[49.75,-9.2,61.14,2.88]]]