Skip to main content

Crate oxigdal_proj

Crate oxigdal_proj 

Source
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 support
  • proj-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§

NAME
Library name
VERSION
Library version

Functions§

info
Returns library information.