You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
eeeeeta a1b0e3a92c reexport haversine length and postgis algorithms in prelude 5 years ago
examples centroid of the centroid 7 years ago
src reexport haversine length and postgis algorithms in prelude 5 years ago
.gitattributes Fix Github language detection 5 years ago
.gitignore Initial project 8 years ago
.travis.yml Ditch docs building on Travis. 6 years ago Prepare for 0.6.3 release. 6 years ago
Cargo.toml get rid of GeoJSON conversions 5 years ago
LICENSE-APACHE Update license to MIT/Apache-2.0 7 years ago
LICENSE-MIT Prepare for 0.4.13 release. 6 years ago Fix README typo 6 years ago


Build Status geo on


Geospatial Primitives, Algorithms, and Utilities

The geo crate provides a number of geospatial primitive types such as Point, LineString, and Polygon, and provides algorithms and operations such as:

  • Area and centroid calculation
  • Simplification and convex hull operations
  • Euclidean and Haversine distance measurement
  • Intersection checks
  • Affine transforms such as rotation and translation.

Please refer to the documentation for a complete list.


use geo::{Polygon, LineString};
use geo::convexhull::ConvexHull;

// An L shape
let coords = vec![(0.0, 0.0), (4.0, 0.0), (4.0, 1.0), (1.0, 1.0), (1.0, 4.0), (0.0, 4.0), (0.0, 0.0)];
// conversions to geo types are provided from several kinds of coordinate sequences
let poly = Polygon::new(coords.into(), vec![]);

// uses the QuickHull algorithm to calculate the polygon's convex hull
let hull = poly.convex_hull();
let correct = vec![(0.0, 0.0), (0.0, 4.0), (1.0, 4.0), (4.0, 1.0), (4.0, 0.0), (0.0, 0.0)]
assert_eq!(hull.exterior, correct.into());


Contributions are welcome! This crate is work in progress, and a great deal of work remains to be done. Have a look at the issues, and open a pull request if you'd like to add an algorithm or some functionality.


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.