geo
Geospatial primitives and algorithms
0.33.1
21M downloads/mo
#2033 most downloaded on crates.io
georust/geo
What this package is like to depend on
Last release 4 months ago
20 Apr 2026
Release timing varies
gaps range from 2 weeks to 8 months
Nearly every release is documented
notes for 86 of 92 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
92 releases · first in 2015
4 releases in the last 12 months
see the full history below
Release timeline
92 releases · Jan 2015 to Apr 2026Releases
latest 60 of 92-
0.33.120 Apr 2026Release notes
Open source →- Fix build breakage introduced by semver incompatible earcut dependency release
-
0.33.015 Apr 2026Release notes
Open source →- Polygon validation now uses
PreparedGeometryto cache R-tree structures for interior/exterior containment checks, improving validation speed for polygons with many holes. - Update
i_overlayto 4.4 and enable OGC-compliant polygon extraction for all boolean operations, fixing cases where holes sharing vertices produced invalid geometry. - Fix
CoordinatePositionforLineStringto handle dimensionally collapsed input e.g.LINESTRING(0 0)is treated likePOINT(0 0). - Fix
CoordinatePositionforTriangleto correctly returnCoordPos::OnBoundaryfor coordinate within vertical segment. - Split
TriangulateDelaunaytrait to support Point collections in addition to existing geometries - Use Coord as DelaunayTriangulation vertex type
- Add Voronoi diagram generation functionality
- Fix Euclidean distance fast path for open
LineStrings to consider the last vertex (avoids incorrectLineString-to-LineStringdistances for separable geometries). - Bump
float_next_afterdependency to 2.0.0 - Bump geo MSRV to 1.88
- Bump geo-types to 0.7.19
- Update
earcutrdependency to 0.5.0 - POSSIBLY BREAKING:
Triangles returned byearcut_trianglesare now oriented CCW. - POSSIBLY BREAKING:
earcut_triangles_rawnow omits the redundant "closing" coordinate fromvertices. It wasn't referenced by thetriangle_indicescut by earcutr, but you may notice a different triangulation for a given input. - Deprecate
StitchTriangulation. Instead convert your triangles to Polygon and use unary_union. - Replace
earcutrcrate with the fasterearcutcrate.- https://github.com/georust/geo/pull/1508
- The high level
TriangulateEarcut::earcut_trianglesAPI hasn't changed, but may return a different triangulation. - BREAKING: The low level
TriangulateEarcut::earcut_triangles_rawAPI now groups coordinates[[x0, y0],[x1 y1]]], previously it was flattened:[x0, y1, x1, y1] - Replace quadratic algorithms in
triangulate_delaunay - Add
MakeValidtrait for (Multi)Polygon repair using the prepair algorithm - Use portable source of randomness for kmeans. The output of kmeans might change slightly vs. previous versions, but it should now be consistent across platforms given a particular seed.
- Update
randdependency to 0.10.0 - kmeans is now deterministic unless provided a random seed.
- Add
MonotoneChain-backed geometry types- Variant of
LineString,MultiLineString,Polygon,MultiPolygonwhich are backed by Monotone Chains - Preprocessing cost to construct these types, but provide a significant performance boost for intersects and contains_properly checks
- https://github.com/georust/geo/issues/1466
- https://github.com/georust/geo/pull/1467
- Variant of
- Add
Substring/SubstringableLinetraits for extracting the section of aLineorLineStringbetween two distance- or ratio-along-line bounds. Generic over any metric space implementingInterpolatePoint + Length(Euclidean, Haversine, Geodesic, Rhumb).
- Polygon validation now uses
-
0.32.005 Dec 2025Release notes
Open source →- Move
PreparedGeometryinto a newindexedmodule intended to provide index-backed geometries.relate::PreparedGeometryhas been deprecated. - Use an interval tree for faster (Multi)Point in MultiPolygon checks
- LOF algorithm efficiency improvements due to caching kth distance
- Add DBSCAN clustering algorithm implementation
- Add
distance_withinmethod with default impl for any geometry that implementsDistance, with similar semantics to the PostGIS ST_DWithin function - Add fast minimum 1D and 2D Euclidean distance algorithm for linearly separable geometries (#1424)
- Add
ContainsProperlytrait to relate and as a standalone operationContainsProperlyis faster forPolygonandMultiPolygonwhen inputs are smaller than about 650 vertices, otherwise useRelate.is_contains_properly- https://github.com/georust/geo/pull/1457
- Add k-means clustering algorithm
- POSSIBLY BREAKING:
minimum_rotated_rectis about 1.3-2x faster, but might return slightly different results. - Renamed features
use-proj,use-serdeto simplyprojandserde(removing theuse-prefix) and deprecated the old spelling. - Update
ConcaveHullalgorithm with implementation of mapbox/concaveman.- BREAKING: The
concave_hullmethod now has noconcavityparameter. - Add
concave_hull_with_optionsmethod which requiresConcaveHullOptionsas a parameter withconcavityandlength_thresholdoptions. - https://github.com/georust/geo/pull/1442
- BREAKING: The
- Add
Coverstrait to relate and as a standalone operation- custom implementations for checking Geometries covered by
Rect,Triangle,Line,Point,Coord - custom implementations for checking Geometries covering
PointandMultiPoint
- custom implementations for checking Geometries covered by
- Move
-
0.31.001 Sep 2025Release notes
Open source →- Added: Geometry buffering to "grow" or "shrink" a geometry by creating a buffer whose boundary is the specified offset from the input.
- BREAKING:
BoolOpsNummust now implement GeoFloat, not just GeoNum. In practice, this shouldn't break for any concrete types (like f32, f64). - BREAKING: The
Simplify,SimplifyVw, andSimplifyVwIdxtraits no longer require a borrowedepsilonparameter as these areCopytypes - Performance: Reduce memory consumption of FrechetDistance calculation.
- Bump geo MSRV to 1.85
- Update i_overlay (dependency of BooleanOps and Buffer).
This is mostly an internal change. However, if you are using i_overlay directly in your project,
you'll notice that the
FillRule,LineCap, andLineJoinoptions, which are re-exported from i_overlay, are now compatible with 4.0 https://github.com/georust/geo/pull/1405 - Simplify test rustc and libproj version specification in CI
- Performance: Avoid running through entire iterator to reach last element in
outlier_detectionwhen calculating LRD and LOF - Add
BearingandDestinationtrait implementations forEuclidean - Add
FillRule-configurable boolean operations toBooleanOpstrait - Fix panic in
algorithm::simplify::compute_rdpwith one point - Fix Clippy warning (surfaced in Rust 1.89) related to lifetime elision
- Silence Clippy warnings related to
old_sweepmodule - Fix false positive convexity check for "star polygon" LineStrings
- BREAKING: previously, an empty LineString was considered non-convex. This has changed: empty LineStrings are now considered convex, in line with tools such as PostGIS
- Update to proj 0.31.0 (libproj 9.6.2)
- Update
Intersectionswith new implementation of the Bentley-Ottmann sweep-line algorithm to efficiently find sparse intersections between groups of lines.- no longer
panic's when given pathological input - BREAKING:
Intersectionsnow computes intersections lazily - BREAKING: The
Crossestrait used byIntersectionsnow returns aLine, not aLineOrPoint. - BREAKING: The
Crossestrait no longer needs to implement Clone
- no longer
- Fix
is_convexto correctly handle duplicate points - Fix
graham_hullto correctly handle duplicate points whenon_hullis set to truegraham_hullnow always returns a boundary with no duplicated points- https://github.com/georust/geo/issues/1383
- BREAKING: Break up blanket implementation of
Intersects<LineString>into specific traits- faster implementations for
Rect,Triangle,MultiPolygon,PolygonintersectsLineString - https://github.com/georust/geo/pull/1379
- faster implementations for
- Added
Containsimplementation for all remaining geometries.
-
0.30.024 Mar 2025Release notes
Open source →- Bump
geoMSRV to 1.81 - BREAKING: Update proj dependency to 0.29.0
- BREAKING:
FrechetDistanceis now defined on the metric space, rather than a method on a Linestring.// before (implicitly Euclidean) line_string_1.frechet_distance(&line_string_2); // after Euclidean.frechet_distance(&line_string_1, &line_string_2); Haversine.frechet_distance(&line_string_1, &line_string_2); - BREAKING:
DensifyandLengthare now defined on the metric space, rather than a generic method on the geometry.// before line_string.length::<Euclidean>() line_string.densify::<Euclidean>() line_string.densify::<Haversine>() // after Euclidean.length(&line_string) Euclidean.densify(&line_string) Haversine.densify(&line_string) - Add configurable
HaversineMeasurefor doing calculations on a custom sphere. Use theHaversineinstance for the default Earth radius.// before Haversine::distance(point1, point2) // after Haversine.distance(point1, point2) // For custom earth (or non-earth!) radius HaversineMeasure::new(3_389_500.0).distance(point1, point2) - Add configurable
GeodesicMeasurefor doing calculations on a custom geoid. Use theGeodesicinstance for the default Earth geoid.// before Geodesic::distance(point1, point2) // after Geodesic.distance(point1, point2) // For custom Earth (or non-earth!) geoids: let nad83_flattening = 1. / 298.257222101; GeodesicMeasure::new(6_378_137, nad83_flattening).distance(point1, point2) - Add
InterpolateLineto interpolate a point along a line using Euclidean, Haversine, Geodesic, Rhumb metric spaces. - Deprecate
LineInterpolatePointwhich was implicitly Euclidean only. - Fix bug in
SegmentizeHaversinewhich caused segments to be unequal lengths - Rename
triangulate_spadeandTriangulateSpadetotriangulate_delaunayandTriangulateDelaunay - Docs: Fix page location of citation for mean earth radius used in Haversine calculations
- Docs: Add top-level doc link for
InteriorPoint - Add Unary Union algorithm for fast union ops on adjacent / overlapping geometries
- Loosen bounds on
RemoveRepeatedPointstrait (num_traits::FromPrimitiveisn't required) - Fix a math error in some rhumb line calculations
- Added:
Validationtrait to check validity ofGeometry.- https://github.com/georust/geo/pull/1279
// use in control flow if polygon.is_valid() { foo() } // raise an error if invalid polygon.check_validation()?; // get all validation errors let errors = polygon.validation_errors(); // error implements Display for human readable explanations println!("{}", errors[0]); - Polygons returned by Boolean Ops are now oriented correctly (ccw shell, cw inner rings)
- Update
i_overlay, which is used by theBoolOpstrait. - BREAKING: Speed up
RelateforPreparedGeometry- this did require changing some trait constraints, but they are unlikely to affect you in practice unless you have your own Relate implementation. - Add: PreparedGeometry::geometry and into_geometry to get at the inner geometry type.
- Add: Clone and Debug implementations for PreparedGeometry.
- Bump
-
0.29.303 Dec 2024 -
0.29.215 Nov 2024Release notes
Open source →- Pin
i_overlayto < 1.8.0 to work around recursion bug. - Add multithreading support to
Multi*geometries
- Pin
-
0.29.102 Nov 2024Release notes
Open source →- Allow configuring of the
i_overlayRayon transitive dependency with a new Cargomultithreadingflag. - Improve handling of InterploatePoint with collapsed Line
- Allow configuring of the
-
0.29.030 Oct 2024Release notes
Open source →-
Implement getter methods on
AffineTransformto access internal elements. -
Fix issue in Debug impl for AffineTransform where yoff is shown instead of xoff
-
PolygoninRectperformance improvements. -
Fix
AffineTransform::composeordering to be conventional - such that the argument is applied after self. -
Add
PreparedGeometryto speed up repeatedRelateoperations. -
Implement Frechet distance using linear algorithm to avoid
fatal runtime error: stack overflowand improve overall performances. -
Bump
geoMSRV to 1.74 and update CI -
Add
StitchTrianglestrait which implements a new kind of combining algorithm forTriangles -
BREAKING: Remove deprecated
Bearingtrait -
Unify various line measurements under new
line_measures::{Bearing, Distance, Destination, InterpolatePoint}traits Before:use geo::{GeodesicBearing, HaversineBearing, GeodesicDistance, HaversineDistance, EuclideanDistance}; p1.geodesic_bearing(p2) p1.haversine_bearing(p2) p1.geodesic_distance(p2) p1.haversine_distance(p2) p1.euclidean_distance(p2)After:
use geo::{Geodesic, Haversine, Euclidean, Bearing, Distance}; Geodesic::bearing(p1, p2) Haversine::bearing(p1, p2) Geodesic::distance(p1, p2) Haversine::distance(p1, p2) Euclidean::distance(p1, p2) -
Deprecated legacy line measure traits in favor of those added in the previous changelog entry:
GeodesicBearing,GeodesicDistance,GeodesicDestination,GeodesicIntermediateRhumbBearing,RhumbDistance,RhumbDestination,RhumbIntermediateHaversineBearing,HaversineDistance,HaversineDestination,HaversineIntermediateEuclideanDistance- https://github.com/georust/geo/pull/1222
- https://github.com/georust/geo/pull/1232
-
Deprecated
HaversineLength,EuclideanLength,RhumbLength,GeodesicLengthin favor of new genericLengthtrait.// Before line_string.euclidean_length(); line_string.haversine_length(); // After line_string.length::<Euclidean>(); line_string.length::<Haversine>(); -
Deprecated
DensifyHaversine -
BREAKING:
Densify::densifyis no longer strictly Euclidean, and now accepts a generic line measure parameter.// Before line_string.densify(); line_string.densify_haversine(); // After line_string.densify::<Euclidean>(); line_string.densify::<Haversine>(); // Additional measures are now supported line_string.densify::<Geodesic>(); line_string.densify::<Rhumb>(); -
Added
InterpolatePoint::point_at_distance_betweenfor line_measures. -
Change IntersectionMatrix::is_equal_topo to now consider empty geometries as equal.
-
Fix
(LINESTRING EMPTY).contains(LINESTRING EMPTY)and(MULTIPOLYGON EMPTY).contains(MULTIPOINT EMPTY)which previously reported true -
Improve
HasDimensions::dimensionsto handle dimensionally collapsed and empty geometries more consistently. A collection (like MultiPolygon) will now have EmptyDimensions when all of its elements have EmptyDimensions. -
Enable i128 geometry types
-
-
0.28.024 Feb 2024Release notes
Open source →- BREAKING: The
HasKerneltrait was removed and it's functionality was merged intoGeoNum. If you are using common scalars for your geometry (f32, f64, i64, i32, i16, isize), this should have no effect on you. If you are using an exotic scalar type, you'll need to implementGeoNumfor it instead ofHasKernel. If you had functionality defined in terms ofHasKernelbefore, define it in terms ofGeoNuminstead. - BREAKING: Added a new
total_cmpmethod toGeoNum. This avoids some potential crashes when working with geometries that contain NaN points. This shouldn't break for any common numeric types, but if you are using something exotic you'll need to manually implementGeoNumfor your numeric type. - POSSIBLY BREAKING:
SimplifyVwPreservetrait implementation moved fromgeo_types::CoordNumtogeo::GeoNumas a consequence of introducing theGeoNum::total_cmp. This shouldn't break anything for common numeric types, but if you are using something exotic you'll need to manually implementGeoNumfor your numeric type. - Implement ChaikinSmoothing to work on Geometry types
- Fix a panic when calculating the haversine closest point to a point intersecting the geometry
- Add
LineStringSegmentizeHaversinetrait as a an alternative toLineStringSegmentizefor geographic coordinates. - Make
SpadeTriangulationConfigactually configurable - PERF: small improvements to TriangulateSpade trait
- POSSIBLY BREAKING: Minimum supported version of Rust (MSRV) is now 1.70
- Add topological equality comparison method:
- Add docs to Relate trait
- Add remaining Relate predicates
- Update rstar to v0.12.0
- Implement
CoordsIterfor arrays and slices. This is useful when you'd like to use traits implemented forCoordsIterwithout re-allocating (e.g., creating aMultiPoint). - Add
compose_manymethod toAffineOps - Point in
TriangleandRectperformance improvemnets - Fix crashes in
BooleanOps
- BREAKING: The
-
0.27.014 Nov 2023Release notes
Open source →- Use
CachedEnvelopein R-Trees when computing euclidean distance between polygons - Add an
inversemethod toAffineTransform - Fix
Densifytrait to avoid panic with empty line string. - Add
DensifyHaversinetrait to densify spherical line geometry. - Add
LineStringSegmentizetrait to split a singleLineStringintonLineStringsas aMultiLineString. - Add
EuclideanDistanceimplementations for all remaining geometries. - Add
HausdorffDistancealgorithm trait to calculate the Hausdorff distance between any two geometries. - Add
matchesmethod to IntersectionMatrix for ergonomic de-9im comparisons. - Simplify
CoordsIterandMinimumRotatedRecttraits with GATs by removing an unneeded trait lifetime. - Add
ToDegreesandToRadianstraits. - Add rhumb-line operations analogous to several current haversine operations:
RhumbBearing,RhumbDestination,RhumbDistance,RhumbIntermediate,RhumbLength. - Fix coordinate wrapping in
HaversineDestination - Add
wkt!macro to define geometries at compile time. - Add
TriangulateSpadetrait which provides (un)constrained Delaunay Triangulations for allgeo_typesvia thespadecrate - Add
len()andis_empty()toMultiPoint
- Use
-
0.26.013 Jul 2023Release notes
Open source →- Implement "Closest Point" from a
Pointon aGeometryusing spherical geometry. https://github.com/georust/geo/pull/958 - Bump CI containers to use libproj 9.2.1
- BREAKING: Bump rstar and robust dependencies https://github.com/georust/geo/pull/1030
- Implement "Closest Point" from a
-
0.25.126 Jun 2023Release notes
Open source →-
Add
TriangulateEarcutalgorithm trait to triangulate polygons with the earcut algorithm. -
Add
Vector2DOpstrait to algorithms module and implemented it forCoord<T::CoordFloat> -
Add a fast point-in-polygon query datastructure that pre-processes a
Polygonas a set of monotone polygons. Ref.crate::algorithm::MonotonicPolygons.
-
-
0.25.017 May 2023Release notes
Open source →- Added
CrossTrackDistancetrait to calculate the distance from a point to the nearest point on a line - Performance improvements for CoordinatePosition
- BREAKING: Remove deprecated methods
- https://github.com/georust/geo/pull/1012
- Instead of
map_coords_inplaceusemap_coords_in_place - Instead of
RotatePointuseRotate - Instead of
Translate#translate_inplaceuseTranslate#translate_mut
- Added
-
0.24.123 Mar 2023Release notes
Open source →- Rename Bearing::bearing to HaversineBearing::haversine_bearing to clarify it uses great circle calculations.
- Speed up intersection checks
- FIX: Simplify no longer skips simplifying minimally sized Polygons and LineString
-
0.24.008 Mar 2023Release notes
Open source →- BREAKING: Make
SimplifyVwnaming consistent - Update the
Polygonimplementation of theSimplifyalgorithm to always returnPolygons with at least four coordinates. - BREAKING: Update to float_next_after-1.0.0 https://github.com/georust/geo/pull/952
- POSSIBLY BREAKING: Minimum supported version of Rust (MSRV) is now 1.63
- BREAKING: Update
rstardependency to0.10.0and enableuse-rstar_0_10feature for `geo-types. https://github.com/georust/geo/pull/987 - Added
MinimumRotatedRecttrait to calculate the MBR of geometry https://github.com/georust/geo/pull/959 - Added
GeodesicAreatrait to support geodesic area and perimeter calculations fromgeographlib-rshttps://github.com/georust/geo/pull/988 - Added
GeodesicDestinationtrait to support geodesic destination calculations https://github.com/georust/geo/pull/991 - Added
GeodesicBearingtrait to support geodesic bearing calculations https://github.com/georust/geo/pull/991
- BREAKING: Make
-
0.23.106 Dec 2022Release notes
Open source →- Update to geo-types-0.7.8 which deprecated
Coordinatein favor ofCoord. https://github.com/georust/geo/pull/924 - Added doc for Transform trait to root docs index.
- Fixed an issues where calculating the convex hull of 3 collinear points would include all 3.
- Added outlier detection algorithm using LOF
- Changed license field to SPDX 2.1 license expression
- Added
RemoveRepeatedPointstrait allowing the removal of (consecutive) repeated points. - Remove polygon-polygon fast path due to ongoing lack of reliability
- Fix RDP recursion bug
- Clarify documentation of bearing on the HaversineDestination
- Update to geo-types-0.7.8 which deprecated
-
0.23.025 Aug 2022Release notes
Open source →- Added
AffineOps,Scale, andSkewtraits allowing the definition and composition of 2-D affine transforms.- Related Cleanup:
- Existing
RotateandTranslatetraits leverage this newAffineOpstrait. - Moved
RotatePoint::rotate_around_pointmethod onto Rotate::rotate_around_pointand removedRotatePointtrait.- Removed deprecated
Rotate::rotatemethod, useRotate::rotate_around_centerorRotate::roate_around_centroidinstead. - Deprecated
Translate::translate_in_placein favor ofTranslate::translate_mutto line up with naming elsewhere in the crate.
- Existing
- Implemented across several PR's:
- Related Cleanup:
- Added
BooleanOps::clipto clip a 1-D geometry with a 2-D geometry. - Added
InteriorPointtrait to calculate a representative point inside aGeometry. - Added
Withintrait to determine if one Geometry is completely within another. - Added
ConvexHullimplementation for all remaining geometries. - Added
Containsimplementation for all remaining geometries. - Removed deprecated
ToGeotrait. Usestd::convert::TryFrom<$geometry>instead.
- Added
-
0.22.104 Jul 2022 -
0.22.024 Jun 2022Release notes
Open source →- Add densification algorithm for linear geometry components
- You may now specify
Geometryrather thanGeometry<f64>since we've added a default trait implementation. You may still explicitly declare the numeric type as f64, or any other implementation ofCoordNum, but this should save you some typing if you're using f64. The same change applies toCoordinatesand all the geometry variants, likePoint,LineString, etc. - Fix fast path euclidean distance
- Reexport everything from the
projcrate - Added a
geometrymodule which re-exports all the inner geometry variants, so you canuse geo::geometry::*to concisely includePoint,LineString, etc. - Use robust predicates everywhere in geo
Windingtrait is rexported under geo::algorithm::Winding (and thus geo::Winding and geo::prelude::Winding)- BREAKING: de-exported
WindingOrderfromgeo::WindingOrder/geo::algorithms::WindingOrder. Instead, go back touse geo::winding_order::WindingOrder- it was briefly rexported asgeo::WindingOrderandgeo::algorithms::WindingOrder.
-
0.21.012 Jun 2022Release notes
Open source →-
Boolean operations for
Polygons andMultiPolygons: intersect, union, xor, and difference. Refer traitbool_ops::BooleanOpsfor more info. -
POSSIBLY BREAKING: Minimum supported version of Rust (MSRV) is now 1.58
-
BREAKING: rstar version upgraded to 0.9.x
-
POSSIBLY BREAKING:
GeoFloattypes must now implementnum_traits::Signedandnum_traits::Bounded. This shouldn't affect you if you are using a standardGeometry<f64>orGeometry<f32>orgeo::GeoFloatgenerically. -
Speed up
RelateandContainstraits for largeLineStringsandPolygonsby using an RTree to more efficiently inspect edges in our topology graph. -
Flatten algorithm namespace. For example:
# Before use geo::algorithm::area::Area; use geo::algorithm::bounding_rect::BoundingRect; # After use geo::{Area, BoundingRect}; -
Speed up
intersectschecks by using a preliminary bbox check -
BREAKING: Remove unneeded reference for
*MapCoords*closure parameter. -
BREAKING: Bump
projdependency to 0.26 which uses PROJ version 9.0 -
rename
Translate::translate_inplace->Translate::translate_in_place -
MapCoordsrestructuring: https://github.com/georust/geo/pull/811- rename
MapCoordsInplace::map_coords_inplace->MapCoordsInPlace::map_coords_in_place - rename
TryMapCoordsInplace::try_map_coords_inplace->TryMapCoordsInPlace::try_map_coords_in_place - Consolidate traits
TryMapCoordsintoMapCoordsandTryMapCoordsInplaceintoMapCoordsInPlace
- rename
-
Implement
ChamberlainDuquetteAreafor all geo types. -
Add
{Convert,TryConvert}traits for coordinate value type conversion. -
BREAKING:
MapCoords/MapCoordsInPlacenow mapCoordinates rather than(x,y)tuples -
Tidy fast-path distance algorithm
-
-
0.20.119 Apr 2022 -
0.20.016 Apr 2022Release notes
Open source →- Add
LinesIteralgorithm to iterate over the lines in geometries.- Very similar to
CoordsIter, but only implemented where it makes sense (e.g., forPolygon,Rect, but notPoint). - https://github.com/georust/geo/pull/757
- Very similar to
- Add
TryMapCoordsInplacealgorithm that is similar toTryMapCoordsbut modifies a geometry in-place
- Add
-
0.19.021 Feb 2022Release notes
Open source →- Bump
projcrate to 0.25.0, using PROJ 8.1.0 - Add
ChaikinSmoothingalgorithm - Fix
rotatefor multipolygons to rotate around the collection's centroid, instead of rotating each individual polygon around its own centroid. - Add
KNearestConcaveHullalgorithm - Remove cargo-tarpaulin due to instability (#676, #677)
- Fix:
ClosestPointfor Polygon's handling of internal points - Implemented
ClosestPointmethod for types Triangle, Rect, GeometryCollection, Coordinate and the Geometry enum. - BREAKING:
TryMapCoordsResult is now generic rather than a Box<dyn Error>. - Add
Transformalgorithm - Add missing
Intersectsimplementations - Note: The MSRV when installing the latest dependencies has increased to 1.55
- Add
get()toIntersectionMatrixfor directly querying DE-9IM matrices
- Bump
-
0.18.019 Apr 2021Release notes
Open source →- Add
line_intersectionto compute point or segment intersection of two Lines. - Add
Relatetrait to topologically relate two geometries based on DE-9IM semantics. - Fix
Containsimplementation for Polygons to match the OGC spec using the newRelatetrait - BREAKING:
Containsno longer supports IntegerPolygonandGeometry. This was a trade-off for aContainsimplementation that was more correct for Floats.
- Add
-
0.17.125 Feb 2021Release notes
Open source →- Rewrite the crate documentation
- Fix
Centroidalgorithm forMultiLineStringwhen all members have only one point. - Implement
Centroidalgorithm onGeometryand its remaining variants. - Add
GeodesicIntermediatealgorithm
-
0.17.013 Jan 2021Release notes
Open source →- BREAKING: update geo-types to 0.7
- Introduce
coords_countmethod onCoordsIter. - Fix non-empty MultiPoint has 0-dimensions, not 1.
- Add new
EuclideanDistanceimplementations:impl EuclideanDistance<Coordinate<T>> for Line,impl EuclideanDistance<Line> for Coordinate,impl EuclideanDistance<Coordinate> for Coordinate - Introduce
geo::GeoFloatandgeo::GeoNumtrait so external crates can implement methods which operate on geometries generically. - Make
HasKernelpublic to allow geo on exotic numeric types. - Fix panic when
simplifyis given a negative epsilon - Performance improvements to
simplify - BREAKING: The
Tgeneric parameter forCoordsIteris now an associated type - Add
CoordsIter::exterior_coords_itermethod to iterate over exterior coordinates of a geometry - BREAKING: The
ExtremeIndicesandExtremePointstraits have been combined into a newExtremestrait containing anextremesmethod. The output of theextremesmethod contains both indices and coordinates. The new implementation is based onCoordsIterinstead ofConvexHull, and now runs 6x faster.
-
0.16.024 Nov 2020Release notes
Open source →- Fix panic when
simplifyis given a negative epsilon - Add
CoordsItertrait for iterating over coordinates in geometries. - Fix edge case handling in
Contains - Fix edge case handling in
line_locate_point - Add
proj-networkfeature enables network grid for optionalprojintegration. - Add
HasDimensionstrait for working with Geometry dimensionality
- Fix panic when
-
0.15.007 Oct 2020Release notes
Open source →- Add
Intersectsimplementations for all pairs of types - Add
ConcaveHullalgorithm - Add robust predicates
- Improve numerical stability in centroid computation
- Add
-
0.14.218 Aug 2020Release notes
Open source →- Bump proj version to 0.20.3
- Change closure for
exterior_mut()andinteriors_mut()to beFnOnce - Bump proj version to 0.20.0 (superseded by 0.20.3)
- Fix numerical stability in area computation
- Fix
containsfor degenerate zero-area triangles - Allow MapCoords on Rect to invert coords
- Centroid impl for MultiLineString
- Fix Area logic for Polygon with interiors
-
0.14.111 Jul 2020 -
0.14.021 Jun 2020Release notes
Open source →- Bump geo-types version to 0.6.0
- Bump rstar version to 0.8.0
- Bump proj version to 16.2
- Extract PostGIS integration out to new
geo-postgiscrate - Add new
GeodesicDistanceandGeodesicLengthalgorithms - Implement
Areafor all types - Implement
BoundingRectfor all types - Add more
Containsimplementations - Fix Vincenty algorithms for equatorial and coincident points
- Separate area algorithms into unsigned and signed methods. For clarity, the existing
Area#area, which can return a negative value depending on winding order, has been renamed toArea#signed_area. Most likely, if you aren't sure which one to use, you'll wantunsigned_areawhich is always positive.
-
0.13.022 Mar 2020Release notes
Open source →- Bump geo-types dependency to 0.5.0
- Bump proj dependency to 0.15.1
- Add a mutable Coordinate iterator to LineString
- Fix for rectangle intersection check
- Bump proj to 0.14.4
- Add
BoundingRectimplementation forRect - Add Chamberlain–Duquette area algorithm
- Make Euclidean Line-Line distance symmetrical
- Bump rstar dependency to 0.4
- Mark
ToGeoas deprecated - Remove usages of 'failure' crate
-
0.12.226 May 2019 -
0.12.105 Apr 2019 -
0.12.017 Feb 2019Release notes
Open source →- Bump
geo-typesdependency to 0.4.0 - Bump
rstarandprojdependencies - Implement
CentroidforMultiPoint
- Bump
-
0.11.003 Dec 2018Release notes
Open source → -
0.10.323 Nov 2018Release notes
Open source →- Add
MapCoordsforRects - Rewrite vincenty/haversine docs; specify param/return units.
Areacan work on some non-Floatgeometries (e.g.Rect<Integer>)
- Add
-
0.10.211 Oct 2018 -
0.10.106 Oct 2018 -
0.10.016 Aug 2018Release notes
Open source →- Remove unnecessary borrows in function params for
Copytypes. - Rename bounding ‘box’ to ‘rect’; move structure to geo-types.
- Remove unnecessary borrows in function params for
-
0.9.119 May 2018Release notes
Open source →- Fix Line-Polygon euclidean distance
- Implement
EuclideanDistanceforMultiPolygontoLineandLinetoMultiPolygon - Add
Line-LineStringeuclidean distance - Add
VincentyDistanceandVincentyLengthalgorithms - Add
HaversineIntermediatealgorithm
-
0.9.015 May 2018Release notes
Open source →- Make serde an optional dependency for
geo, rename feature touse-serde - Use the
projcrate, rename feature touse-proj - Return unboxed iterators from
LineString::lines,Winding::points_cw, andWinding::points_ccw - Fix compilation errors when using the
projfeature - Add
Polygon-PolygonandLineString-LineStringdistance - Update postgis optional dependency to 0.6
- Clarify wording for Contains algorithm.
- Make serde an optional dependency for
-
0.8.303 May 2018 -
0.8.219 Apr 2018 -
0.8.118 Apr 2018 -
0.8.013 Apr 2018Release notes
Open source →- Prefix Euclidean distance/length traits with 'Euclidean'.
- Bump num-traits: 0.1 → 0.2
- Implement
SpatialObjectforLinetype - Implement a
TryMapCoordstrait - Impl Polygon convexity function on the type
- Implement rust-proj as an optional feature within geo
-
0.7.412 Mar 2018 -
0.7.311 Mar 2018 -
0.7.204 Mar 2018Release notes
Open source →- Easy methods to convert a Geometry to the underlying type
- Map coords inplace
- [Added bearing trait]https://github.com/georust/geo/pull/186)
- Winding/Orientation for LineStrings
-
0.7.104 Feb 2018 -
0.7.027 Jan 2018 -
0.6.324 Sep 2017 -
0.6.216 Sep 2017 -
0.6.110 Sep 2017 -
0.6.005 Sep 2017 -
0.5.030 Aug 2017 -
0.4.1314 Aug 2017 -
0.4.1211 Aug 2017 -
0.4.1108 Aug 2017