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.
// 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),
]
);
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.
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.