랭킹으로 돌아가기
Rust geospatial primitives & algorithms
rustgeospatialgeographygeometrygis
주요 지표
스타 성장
스타
1.9k
포크
261
주간 성장
—
이슈
95
5001k1.5k
2015년 1월2016년 12월2018년 11월2020년 10월2022년 9월2024년 8월2026년 7월
아티팩트crates.io
cargo add geoREADME
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:
- Full DE-9IM support and topological relationship calculations such as containment and intersection
- Affine operations on geometries (scale, rotate, skew, translate)
- Boolean operations on geometries (clip, union, difference, intersection, xor)
- Buffer / offset operations on geometries
- Repair of invalid polygons and multipolygons, using constrained Delaunay triangulation to produce valid geometry
- Clustering operations such as DBSCAN and k-means
- Euclidean, as well as spherical, haversine and other non-planar length and distance calculations
- Support for projecting and converting between coordinate reference systems using PROJ
- IO using the
geojsonandgeozerocrates.
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.
관련 저장소