https://github.com/georust/geo
Rust geospatial primitives & algorithms
https://github.com/georust/geo
geography geometry geospatial gis rust
Last synced: 5 months ago
JSON representation
Rust geospatial primitives & algorithms
- Host: GitHub
- URL: https://github.com/georust/geo
- Owner: georust
- License: other
- Created: 2015-01-16T01:00:41.000Z (over 10 years ago)
- Default Branch: main
- Last Pushed: 2025-05-08T16:05:03.000Z (5 months ago)
- Last Synced: 2025-05-08T22:18:07.013Z (5 months ago)
- Topics: geography, geometry, geospatial, gis, rust
- Language: Rust
- Homepage: https://crates.io/crates/geo
- Size: 39.3 MB
- Stars: 1,665
- Watchers: 40
- Forks: 207
- Open Issues: 117
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- Contributing: CONTRIBUTING.md
- License: LICENSE-APACHE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
[](https://github.com/georust)
[](https://crates.io/crates/geo)
[](https://coveralls.io/github/georust/geo?branch=trying)
[](https://docs.rs/geo)
[](https://discord.gg/Fp2aape)# geo
## Geospatial Primitives, Algorithms, and Utilities
### Chat or ask questions on [Discord](https://discord.gg/Fp2aape)
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](https://docs.rs/geo) for a complete list.
The primitive types also provide the basis for other functionality in the `Geo` ecosystem, including:
- [Coordinate transformation and projection](https://github.com/georust/proj)
- Serialization to and from [GeoJSON](https://github.com/georust/geojson) and [WKT](https://github.com/georust/wkt)
- [Geocoding](https://github.com/georust/geocoding)
- [Working with GPS data](https://github.com/georust/gpx)## Example
```rust
// 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](https://github.com/georust/geo/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](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](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.