32 releases
0.7.17 | Jul 25, 2025 |
---|---|
0.7.16 | Mar 24, 2025 |
0.7.15 | Jan 14, 2025 |
0.7.14 | Nov 15, 2024 |
0.1.1 | May 15, 2018 |
#163 in Geospatial
601,510 downloads per month
Used in 621 crates
(195 directly)
235KB
4.5K
SLoC
geo
Geospatial Primitives, Algorithms, and Utilities
Chat or ask questions on Discord
The geo
crate provides 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
- All DE-9IM spatial predicates such as contains, crosses, and touches.
Please refer to the documentation for a complete list.
The primitive types also provide the basis for other functionality in the Geo
ecosystem, including:
- Coordinate transformation and projection
- Serialization to and from GeoJSON and WKT
- Geocoding
- Working with GPS data
Example
// primitives
use geo::{line_string, polygon};
// algorithms
use geo::ConvexHull;
// An L shape
let poly = polygon![
(x: 0.0, y: 0.0),
(x: 4.0, y: 0.0),
(x: 4.0, y: 1.0),
(x: 1.0, y: 1.0),
(x: 1.0, y: 4.0),
(x: 0.0, y: 4.0),
(x: 0.0, y: 0.0),
];
// Calculate the polygon's convex hull
let hull = poly.convex_hull();
assert_eq!(
hull.exterior(),
&line_string![
(x: 4.0, y: 0.0),
(x: 4.0, y: 1.0),
(x: 1.0, y: 4.0),
(x: 0.0, y: 4.0),
(x: 0.0, y: 0.0),
(x: 4.0, y: 0.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
- 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.
Contribution
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.
Dependencies
~0.6–1.4MB
~29K SLoC