Skip to content

TimTheBig/geo-3d

Repository files navigation

geo

Coverage Status Documentation

geo-3D

3D Geospatial Primitives, Algorithms, and Utilities

The geo-3d crate provides geospatial primitive types such as Point, LineString, and Polygon, and provides algorithms and operations such as:

  • Volume, area and centroid calculation
  • Simplification and convex hull operations
  • Euclidean distance measurement
  • Intersection checks
  • Affine transforms such as rotation and translation

Please refer to the documentation for a complete list.

Example

// primitives
use geo::{line_string, polygon};

// algorithms
use geo::ConvexHull;

// An L shape
let poly = polygon![
    (x: 0.0, y: 0.0, z: 0.0),
    (x: 4.0, y: 0.0, z: 4.0),
    (x: 4.0, y: 1.0, z: 2.5),
    (x: 1.0, y: 1.0, z: 1.0),
    (x: 1.0, y: 4.0, z: 7.0),
    (x: 0.0, y: 4.0, z: 0.0),
    (x: 0.0, y: 0.0, z: 0.0),
];

// Calculate the polygon's convex hull
let hull = poly.convex_hull().unwrap();

assert_eq!(
    hull.exterior(),
    &line_string![
        (x: 4.0, y: 0.0, z: 4.0),
        (x: 4.0, y: 1.0, z: 2.5),
        (x: 1.0, y: 4.0, z: 7.0),
        (x: 0.0, y: 4.0, z: 0.0),
        (x: 0.0, y: 0.0, z: 0.0),
        (x: 4.0, y: 0.0, z: 4.0),
    ]
);

Contributing

Contributions are welcome! Have a look at the issues, and open a pull request if you'd like to add an algorithm or some functionality.

License

Licensed under either of

at your option.