Transform or convert coordinates of simple feature
st_transform(x, crs, ...)
# S3 method for sfc
st_transform(
x,
crs = st_crs(x),
...,
aoi = numeric(0),
pipeline = character(0),
reverse = FALSE,
desired_accuracy = -1,
allow_ballpark = TRUE,
partial = TRUE,
check = FALSE
)
# S3 method for sf
st_transform(x, crs = st_crs(x), ...)
# S3 method for sfg
st_transform(x, crs = st_crs(x), ...)
st_wrap_dateline(x, options, quiet)
# S3 method for sfc
st_wrap_dateline(x, options = "WRAPDATELINE=YES", quiet = TRUE)
# S3 method for sf
st_wrap_dateline(x, options = "WRAPDATELINE=YES", quiet = TRUE)
# S3 method for sfg
st_wrap_dateline(x, options = "WRAPDATELINE=YES", quiet = TRUE)
sf_proj_info(type = "proj", path)object of class sf, sfc or sfg
target coordinate reference system: object of class `crs`, or input string for st_crs
ignored
area of interest, in degrees: WestLongitude, SouthLatitude, EastLongitude, NorthLatitude
character; coordinate operation pipeline, for overriding the default operation
boolean; has only an effect when pipeline is defined:
if TRUE, the inverse operation of the pipeline is applied
numeric; Only coordinate operations that offer an accuracy of at least the one specified will be considered; a negative value disables this feature (requires GDAL >= 3.3)
logical; are ballpark (low accuracy) transformations allowed? (requires GDAL >= 3.3)
logical; allow for partial projection, if not all points of a geometry can be projected (corresponds to setting environment variable OGR_ENABLE_PARTIAL_REPROJECTION to TRUE)
logical; if TRUE, perform a sanity check on resulting polygons
character; should have "WRAPDATELINE=YES" to function; another parameter that is used is "DATELINEOFFSET=10" (where 10 is the default value)
logical; print options after they have been parsed?
character; one of have_datum_files, proj, ellps, datum, units or prime_meridians; see Details.
character; PROJ search path to be set
Transforms coordinates of object to new projection.
Features that cannot be transformed are returned as empty geometries.
Transforms using the pipeline= argument may fail if there is
ambiguity in the axis order of the specified coordinate reference system;
if you need the traditional GIS order, use "OGC:CRS84", not
"EPSG:4326". Extra care is needed with the ESRI Shapefile format,
because WKT1 does not store axis order unambigiously.
The st_transform method for sfg objects assumes that the CRS of the object is available as an attribute of that name.
For a discussion of using options, see https://github.com/r-spatial/sf/issues/280 and https://github.com/r-spatial/sf/issues/541
sf_proj_info lists the available projections, ellipses, datums, units, or data search path of the PROJ library when type is equal to proj, ellps, datum, units or path; when type equals have_datum_files a boolean is returned indicating whether datum files are installed and accessible (checking for conus).
for PROJ >= 6, sf_proj_info does not provide option type = "datums".
PROJ < 6 does not provide the option type = "prime_meridians".
for PROJ >= 7.1.0, the "units" query of sf_proj_info returns the to_meter
variable as numeric, previous versions return a character vector containing a numeric expression.
Projecting simple feature geometries to projections not supported by GDAL may be done by st_transform_proj, part of package lwgeom.
sf_project projects a matrix of coordinates, bypassing GDAL altogether
p1 = st_point(c(7,52))
p2 = st_point(c(-30,20))
sfc = st_sfc(p1, p2, crs = 4326)
sfc
#> Geometry set for 2 features
#> Geometry type: POINT
#> Dimension: XY
#> Bounding box: xmin: -30 ymin: 20 xmax: 7 ymax: 52
#> Geodetic CRS: WGS 84
#> POINT (7 52)
#> POINT (-30 20)
st_transform(sfc, 3857)
#> Geometry set for 2 features
#> Geometry type: POINT
#> Dimension: XY
#> Bounding box: xmin: -3339585 ymin: 2273031 xmax: 779236.4 ymax: 6800125
#> Projected CRS: WGS 84 / Pseudo-Mercator
#> POINT (779236.4 6800125)
#> POINT (-3339585 2273031)
st_transform(st_sf(a=2:1, geom=sfc), "+init=epsg:3857")
#> Simple feature collection with 2 features and 1 field
#> Geometry type: POINT
#> Dimension: XY
#> Bounding box: xmin: -3339585 ymin: 2273031 xmax: 779236.4 ymax: 6800125
#> Projected CRS: WGS 84 / Pseudo-Mercator
#> a geom
#> 1 2 POINT (779236.4 6800125)
#> 2 1 POINT (-3339585 2273031)
try(st_transform(sfc, 3857, aoi = c(-280,-90,180,90)))
#> Warning: GDAL Error 1: Invalid dfWestLongitudeDeg
#> Error in CPL_transform(x, crs, aoi, pipeline, reverse, desired_accuracy, :
#> values for area of interest not accepted
if (sf_extSoftVersion()["GDAL"] >= "3.0.0") {
st_transform(sfc, pipeline =
"+proj=pipeline +step +proj=axisswap +order=2,1") # reverse axes
st_transform(sfc, pipeline =
"+proj=pipeline +step +proj=axisswap +order=2,1", reverse = TRUE) # also reverse axes
}
#> Geometry set for 2 features
#> Geometry type: POINT
#> Dimension: XY
#> Bounding box: xmin: -30 ymin: 20 xmax: 7 ymax: 52
#> CRS: NA
#> POINT (7 52)
#> POINT (-30 20)
nc = st_read(system.file("shape/nc.shp", package="sf"))
#> Reading layer `nc' from data source
#> `/tmp/Rtmpmf71ju/temp_libpath12f841176e62f/sf/shape/nc.shp'
#> using driver `ESRI Shapefile'
#> Simple feature collection with 100 features and 14 fields
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
#> Geodetic CRS: NAD27
st_area(nc[1,]) # area from long/lat
#> 1137107793 [m^2]
st_area(st_transform(nc[1,], 32119)) # NC state plane, m
#> 1137598162 [m^2]
st_area(st_transform(nc[1,], 2264)) # NC state plane, US foot
#> 12244955726 [US_survey_foot^2]
library(units)
#> udunits database from /usr/share/xml/udunits/udunits2.xml
set_units(st_area(st_transform(nc[1,], 2264)), m^2)
#> 1137598162 [m^2]
st_transform(structure(p1, proj4string = "+init=epsg:4326"), "+init=epsg:3857")
#> POINT (779236.4 6800125)
st_wrap_dateline(st_sfc(st_linestring(rbind(c(-179,0),c(179,0))), crs = 4326))
#> Geometry set for 1 feature
#> Geometry type: MULTILINESTRING
#> Dimension: XY
#> Bounding box: xmin: -180 ymin: 0 xmax: 180 ymax: 0
#> Geodetic CRS: WGS 84
#> MULTILINESTRING ((-179 0, -180 0), (180 0, 179 0))
if (require(maps, quietly = TRUE)) {
wrld <- st_as_sf(maps::map("world", fill = TRUE, plot = FALSE))
wrld_wrap <- st_wrap_dateline(wrld, options = c("WRAPDATELINE=YES", "DATELINEOFFSET=180"),
quiet = TRUE)
wrld_moll <- st_transform(wrld_wrap, "+proj=moll")
plot(st_geometry(wrld_moll), col = "transparent")
}
#> Warning: GDAL Error 1: IllegalArgumentException: Points of LinearRing do not form a closed linestring
#> Warning: GDAL Error 1: IllegalArgumentException: Points of LinearRing do not form a closed linestring
sf_proj_info("datum")
#> data frame with 0 columns and 0 rows