Geo: Geospatial Primitives and Algorithms for Rust
source link: https://www.tuicool.com/articles/hit/iI7V7nj
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
geo
Geospatial Primitives, Algorithms, and Utilities
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
- Transformation to and from PostGIS types
- Affine transforms such as rotation and translation.
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
use geo::{Polygon, LineString}; use geo::convexhull::ConvexHull; // An L shape let coords = vec![(0.0, 0.0), (4.0, 0.0), (4.0, 1.0), (1.0, 1.0), (1.0, 4.0), (0.0, 4.0), (0.0, 0.0)]; // conversions to geo types are provided from several kinds of coordinate sequences let poly = Polygon::new(coords.into(), vec![]); // uses the QuickHull algorithm to calculate the polygon's convex hull let hull = poly.convex_hull(); let correct = vec![(0.0, 0.0), (0.0, 4.0), (1.0, 4.0), (4.0, 1.0), (4.0, 0.0), (0.0, 0.0)] assert_eq!(hull.exterior, correct.into());
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.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK