Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/georust/geo
Geospatial primitives and algorithms for Rust
https://github.com/georust/geo
geography geometry geospatial gis rust
Last synced: 28 days ago
JSON representation
Geospatial primitives and algorithms for Rust
- Host: GitHub
- URL: https://github.com/georust/geo
- Owner: georust
- License: other
- Created: 2015-01-16T01:00:41.000Z (almost 10 years ago)
- Default Branch: main
- Last Pushed: 2024-04-13T16:47:49.000Z (7 months ago)
- Last Synced: 2024-04-13T21:01:32.583Z (7 months ago)
- Topics: geography, geometry, geospatial, gis, rust
- Language: Rust
- Homepage: https://crates.io/crates/geo
- Size: 10.1 MB
- Stars: 1,392
- Watchers: 36
- Forks: 186
- Open Issues: 119
-
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
[![geo](https://avatars1.githubusercontent.com/u/10320338?v=4&s=50)](https://github.com/georust)
[![geo on Crates.io](https://img.shields.io/crates/v/geo.svg?color=brightgreen)](https://crates.io/crates/geo)
[![Coverage Status](https://img.shields.io/coverallsCoverage/github/georust/geo.svg)](https://coveralls.io/github/georust/geo?branch=trying)
[![Documentation](https://img.shields.io/docsrs/geo/latest.svg)](https://docs.rs/geo)
[![Discord](https://img.shields.io/discord/598002550221963289)](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.