PROJ
High-level Rust bindings for the latest stable version of PROJ (7.0.x), compatible with the Georust ecosystem.
Requirements
By default, this crate depends on a pre-built library, so PROJ v7.0.x must be present on your system. While this crate may be backwards-compatible with older PROJ 6 versions, this is neither tested nor supported.
Two features are available:
proj = { version = "0.16.1", features = ["pkg_config"] }
proj = = { version = "0.16.1", features = ["bundled_proj"] }
The pkg_config
feature enables the use of pkg-config
when linking against libproj
– note that pkg-config
must be available on your system.
The bundled_proj
feature allows you to link against a PROJ included with (and built from source by) the proj-sys
crate, upon which this crate is built. To do so, enable the bundled_proj
Cargo feature. Currently this feature only supports Linux. Note that this feature requires sqlite3 to be available on your system.
Examples
Convert from NAD 83 US Survey Feet to NAD 83 Meters Using EPSG Codes
use Proj;
extern crate geo_types;
use Point;
let from = "EPSG:2230";
let to = "EPSG:26946";
let ft_to_m = new_known_crs.unwrap;
let result = ft_to_m
.convert
.unwrap;
assert_almost_eq;
assert_almost_eq;
Note that as of v5.0.0, PROJ uses the pipeline
operator, which allows an arbitrary number of steps in a conversion. The example below works as follows:
- define the operation as a
pipeline
operation - define
step
1 as aninv
erse transform, yielding geodetic coordinates - define
step
2 as a forward transform to projected coordinates, yielding metres.
Convert from NAD 83 US Survey Feet to NAD 83 Meters Using the pipeline
Operator
use Proj;
extern crate geo_types;
use Point;
let ft_to_m = new.unwrap;
// The Presidio, approximately
let result = ft_to_m.convert.unwrap;
assert_eq!;
assert_eq!;
Inverse Projection from Stereo70 to Geodetic
use Proj;
extern crate geo_types;
use Point;
// Carry out an inverse projection from Pulkovo 1942(58) / Stereo70 (EPSG 3844)
// into geodetic lon and lat coordinates (in radians)
let stereo70 = new.unwrap;
let rp = stereo70.project.unwrap;
assert_eq!;
Bulk Transformations
The Proj::convert_array()
method is available for bulk conversions. It accepts a mutable slice (or anything that can Deref
to a mutable slice) of Point<T: Float>
or Into<Point<T: Float>
elements.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.