georust/geo

Rust geospatial primitives & algorithms

Rust

1,941

3,173 commits

updated Sep 30, 2026

See the code

README

geo

geo on Crates.io Coverage Status Documentation Discord

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 geojson and geozero crates.

Please refer to the documentation for a complete list.

The primitive types also provide the basis for other functionality in the Geo ecosystem, including:

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

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.

geography
geometry
geospatial
gis
rust

georust/geo

Rust geospatial primitives & algorithms

Rust

1,941

3,173 commits

updated Sep 30, 2026

See the code

README

geo

geo on Crates.io Coverage Status Documentation Discord

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 geojson and geozero crates.

Please refer to the documentation for a complete list.

The primitive types also provide the basis for other functionality in the Geo ecosystem, including:

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

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.

geography
geometry
geospatial
gis
rust

Project health

Overall

6.3/10

Maintained

10/10

Code review

10/10
OpenSSF Scorecard

crates.io

Latest release

0.33.1 · Apr 20, 2026

Releases this year

3

Significant stargazers

(top 24 of 45)

Andrew Kane

6,938 followers · starred May 2026

Andrew Gallant

13,078 followers · starred Apr 2019

Jakub Beránek

1,106 followers · starred Dec 2023

Birk Skyum

212 followers · starred Jan 2026