The goal of reproj is to reproject data between coordinate systems.
proj4 package is the only one available for generic data that will
transform between arbitrary coordinate systems specified by source and
target coordinate systems, and the only one with control over ‘xy’
versus ‘xyz’ input and output. reproj adds some further features by
wrapping the need to convert longitude/latitude data to or from radians.
Other R packages for transforming coordinates are monolithic and do not
expose the underlying facility outside of their specific goals and
contexts. The packages that do this are
all require GDAL by some means, and include many other irrelevant
libraries and restrictions including specific data formats that are
Possible alternatives are
globe but these are variously
too specific or difficult to use. If you know of others please let me
There are a number of limitations to the proj4 package that is used, please use reproj at your own risk. The sf package provides a better supported facility to modern code and for datum transformations. (We have not even checked if proj4 can do datum transforms). If a more generic interface to the PROJ library becomes available we will configure reproj to use it.
You can install the dev version of reproj from github with:
This example shows how to convert between coordinate systems:
library(reproj) (pt <- (reproj(cbind(c(147, 148), c(-42, -45)), target = "+proj=laea +datum=WGS84", source = 4326))) #> [,1] [,2] [,3] #> [1,] 5969744 -9803200 0 #> [2,] 5362760 -10052226 0 ## to another coordinate system (pt1 <- reproj(pt, target = "+proj=lcc +lat_1=-20 +lat_2=-10 +datum=WGS84", source = "+proj=laea +datum=WGS84")) #> [,1] [,2] [,3] #> [1,] 12701201 -9158714 0 #> [2,] 12538357 -9514556 0 ## and back again reproj(pt1, target = "+proj=longlat +datum=WGS84", source = "+proj=lcc +lat_1=-20 +lat_2=-10 +datum=WGS84") #> [,1] [,2] [,3] #> [1,] 147 -42 0 #> [2,] 148 -45 0
Note that the output is always in ‘xyz’ form, even if the z value is implied zero. The input may also be ‘xyz’ and it is the user’s job to ensure this is specified correctly. It’s not possible to automate every case, because among the three main cases:
- longitude latitude and elevation,
- projected xy and elevation,
- geocentric xyz with embedded elevation (an offset to the radius
+a/+bin PROJ terms),
it is not possible to easily capture the intended task. reproj sits at the simplest level of flexibility and control, and doesn’t impose any restrictions of converting between these cases.
Are you interested in reproj or even contributing? Great! Please use the issues tab for discussions.
This is a wishlist / todo.
- wrap modern PROJ in an R package with no other dependencies
- isolate the sf/lwgeom code for PROJ.4 in its own package
- allow choice of engine for
reproj.method(this is already possible for your own classes)
Please note that the ‘reproj’ project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.