Skip to content

Fast geodesic distance approximations via flat surface projection

License

Notifications You must be signed in to change notification settings

Turbo87/flat-projection-rs

Repository files navigation

flat-projection

Build Status

Fast geodesic distance approximations via flat surface projection

The FlatProjection struct can by used to project geographical coordinates from WGS84 into a cartesian coordinate system. In the projected form approximated distance and bearing calculations can be performed much faster than on a sphere. The precision of these calculations is very precise for distances up to about 500 km.

Usage

extern crate flat_projection;

use flat_projection::FlatProjection;

fn main() {
    let (lon1, lat1) = (6.186389, 50.823194);
    let (lon2, lat2) = (6.953333, 51.301389);

    let proj = FlatProjection::new(51.05);

    let p1 = proj.project(lon1, lat1);
    let p2 = proj.project(lon2, lat2);

    let distance = p1.distance(&p2);
    // -> 75.648 km
}

Benchmark

$ cargo bench

distance/flat           time:   [322.21 ps 323.82 ps 326.41 ps]
distance/haversine      time:   [12.604 ns 12.831 ns 13.162 ns]
distance/vincenty       time:   [346.79 ns 348.00 ns 349.61 ns]

According to these results the flat surface approximation is about 40x faster than the Haversine formula.

Related

License

This project is released under the MIT license.

About

Fast geodesic distance approximations via flat surface projection

Topics

Resources

License

Stars

Watchers

Forks

Languages