Expand description
Pure Rust coordinate transformation and projection support for OxiGDAL.
This crate provides comprehensive coordinate reference system (CRS) and projection capabilities for the OxiGDAL library. It includes support for:
- EPSG code database with common coordinate reference systems
- WKT (Well-Known Text) parsing
- PROJ string support
- Coordinate transformations between different CRS
- Pure Rust implementation by default using proj4rs
- Optional C bindings to PROJ library (feature-gated)
§Features
std(default): Enable standard library supportproj-sys: Enable optional C bindings to PROJ library for full PROJ support
§Examples
§Transform coordinates from WGS84 to Web Mercator
use oxigdal_proj::{Crs, Coordinate, Transformer};
// Create CRS from EPSG codes
let wgs84 = Crs::from_epsg(4326)?;
let web_mercator = Crs::from_epsg(3857)?;
// Create transformer
let transformer = Transformer::new(wgs84, web_mercator)?;
// Transform a coordinate (London: 0°, 51.5°N)
let london = Coordinate::from_lon_lat(0.0, 51.5);
let transformed = transformer.transform(&london)?;
println!("Transformed: {}", transformed);§Use convenience functions
use oxigdal_proj::{Coordinate, transform_epsg};
let coord = Coordinate::from_lon_lat(-122.4194, 37.7749); // San Francisco
let transformed = transform_epsg(&coord, 4326, 3857)?;
println!("Transformed: {}", transformed);§Work with bounding boxes
use oxigdal_proj::{BoundingBox, Coordinate, Transformer, Crs};
let bbox = BoundingBox::new(-10.0, -10.0, 10.0, 10.0)?;
let transformer = Transformer::from_epsg(4326, 3857)?;
let transformed_bbox = transformer.transform_bbox(&bbox)?;
println!("Original: {:?}", bbox);
println!("Transformed: {:?}", transformed_bbox);§Use common CRS constants
use oxigdal_proj::Crs;
let wgs84 = Crs::wgs84();
let web_mercator = Crs::web_mercator();
let nad83 = Crs::nad83();
let etrs89 = Crs::etrs89();§EPSG Database
The crate includes an embedded database of ~140 common EPSG codes, including:
- WGS84 (EPSG:4326)
- Web Mercator (EPSG:3857)
- All WGS84 UTM zones (EPSG:32601-32660 North, 32701-32760 South)
- Common national datums (NAD83, ETRS89, GDA94, JGD2000, etc.)
- Common projected systems (British National Grid, US National Atlas, etc.)
§Pure Rust Implementation
By default, this crate uses the pure Rust proj4rs library for coordinate transformations.
This ensures:
- No C/C++ dependencies
- Cross-platform compatibility
- Memory safety guarantees
- Easy integration with Rust projects
For applications requiring full PROJ library compatibility, enable the proj-sys feature:
[dependencies]
oxigdal-proj = { version = "0.1", features = ["proj-sys"] }§Accuracy and Limitations
The pure Rust implementation using proj4rs provides accurate transformations for most common use cases. However, it may have limitations compared to the full PROJ library:
- Limited support for some exotic projections
- No dynamic datum grid shift support
- Simplified datum transformations
For high-accuracy geodetic applications, consider using the proj-sys feature.
Re-exports§
pub use crs::Crs;pub use crs::CrsSource;pub use epsg::CrsType;pub use epsg::EpsgDefinition;pub use epsg::available_epsg_codes;pub use epsg::contains_epsg;pub use epsg::lookup_epsg;pub use error::Error;pub use error::Result;pub use grid_shift::DHDN_TO_ETRS89;pub use grid_shift::Helmert7Params;pub use grid_shift::NAD27_TO_NAD83;pub use grid_shift::NTF_TO_RGF93;pub use grid_shift::OSGB36_TO_ETRS89;pub use grid_shift::dhdn_etrs89_helmert;pub use grid_shift::helmert_3d;pub use grid_shift::helmert_7param;pub use grid_shift::nad27_nad83_poly;pub use grid_shift::ostn15_approx;pub use grid_shift::rgf93_approx;pub use transform::AzimuthalEquidistant;pub use transform::CassineSoldner;pub use transform::EckertIV;pub use transform::EckertVI;pub use transform::EquidistantConic;pub use transform::GaussKruger;pub use transform::Gnomonic;pub use transform::LambertAzimuthalEqualArea;pub use transform::LambertConformalConic;pub use transform::Mollweide;pub use transform::Robinson;pub use transform::Sinusoidal;pub use transform::Transformer;pub use transform::TransverseMercator;pub use transform::transform_coordinate;pub use transform::transform_epsg;pub use transform::BoundingBox;pub use transform::Coordinate;pub use transform::Coordinate3D;pub use wkt::WktNode;pub use wkt::WktParser;pub use wkt::parse_wkt;
Modules§
- crs
- Coordinate Reference System (CRS) definitions and operations.
- crs_
registry - CRS Registry — comprehensive coordinate reference system lookup and metadata.
- datum_
transform - Geodetic datum transformation algorithms.
- epsg
- EPSG code database with common coordinate reference systems.
- error
- Error types for projection and coordinate transformation operations.
- grid_
shift - Datum grid shift transformations.
- proj_
string - PROJ string parser and builder.
- projections
- Pure Rust implementations of map projections.
- transform
- Coordinate transformation operations.
- wkt
- Well-Known Text (WKT) parser for CRS definitions.
Constants§
Functions§
- info
- Returns library information.