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
- 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.
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.