Skip to content

Latest commit

 

History

History
768 lines (605 loc) · 32.3 KB

CHANGES.md

File metadata and controls

768 lines (605 loc) · 32.3 KB

Changes

Unreleased

  • Implement getter methods on AffineTransform to access internal elements.
  • Fix issue in Debug impl for AffineTransform where yoff is shown instead of xoff
  • Polygon in Rect performance improvements.
  • Fix AffineTransform::compose ordering to be conventional - such that the argument is applied after self.
  • Add PreparedGeometry to speed up repeated Relate operations.

0.28.0

  • BREAKING: The HasKernel trait was removed and it's functionality was merged into GeoNum. 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 implement GeoNum for it instead of HasKernel. If you had functionality defined in terms of HasKernel before, define it in terms of GeoNum instead.
  • BREAKING: Added a new total_cmp method to GeoNum. 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 implement GeoNum for your numeric type.
  • POSSIBLY BREAKING: SimplifyVwPreserve trait implementation moved from geo_types::CoordNum to geo::GeoNum as a consequence of introducing the GeoNum::total_cmp. This shouldn't break anything for common numeric types, but if you are using something exotic you'll need to manually implement GeoNum for 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 LineStringSegmentizeHaversine trait as a an alternative to LineStringSegmentize for geographic coordinates.
  • Make SpadeTriangulationConfig actually 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 CoordsIter for arrays and slices. This is useful when you'd like to use traits implemented for CoordsIter without re-allocating (e.g., creating a MultiPoint).
  • Add compose_many method to AffineOps
  • Point in Triangle and Rect performance improvemnets

0.27.0

  • Use CachedEnvelope in R-Trees when computing euclidean distance between polygons
  • Add an inverse method to AffineTransform
  • Fix Densify trait to avoid panic with empty line string.
  • Add DensifyHaversine trait to densify spherical line geometry.
  • Add LineStringSegmentize trait to split a single LineString into n LineStrings as a MultiLineString.
  • Add EuclideanDistance implementations for all remaining geometries.
  • Add HausdorffDistance algorithm trait to calculate the Hausdorff distance between any two geometries.
  • Add matches method to IntersectionMatrix for ergonomic de-9im comparisons.
  • Simplify CoordsIter and MinimumRotatedRect traits with GATs by removing an unneeded trait lifetime.
  • Add ToDegrees and ToRadians traits.
  • 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 TriangulateSpade trait which provides (un)constrained Delaunay Triangulations for all geo_types via the spade crate
  • Add len() and is_empty() to MultiPoint

0.26.0

  • Implement "Closest Point" from a Point on a Geometry using spherical geometry. #958
  • Bump CI containers to use libproj 9.2.1
  • BREAKING: Bump rstar and robust dependencies #1030

0.25.1

  • Add TriangulateEarcut algorithm trait to triangulate polygons with the earcut algorithm.

  • Add Vector2DOps trait to algorithms module and implemented it for Coord<T::CoordFloat>

  • Add a fast point-in-polygon query datastructure that pre-processes a Polygon as a set of monotone polygons. Ref. crate::algorithm::MonotonicPolygons.

0.25.0

  • Added CrossTrackDistance trait to calculate the distance from a point to the nearest point on a line
  • Performance improvements for CoordinatePosition
  • BREAKING: Remove deprecated methods
    • #1012
    • Instead of map_coords_inplace use map_coords_in_place
    • Instead of RotatePoint use Rotate
    • Instead of Translate#translate_inplace use Translate#translate_mut

0.24.1

  • 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.0

  • BREAKING: Make SimplifyVw naming consistent
  • Update the Polygon implementation of the Simplify algorithm to always return Polygons with at least four coordinates.
  • BREAKING: Update to float_next_after-1.0.0 #952
  • POSSIBLY BREAKING: Minimum supported version of Rust (MSRV) is now 1.63
  • BREAKING: Update rstar dependency to 0.10.0 and enable use-rstar_0_10 feature for `geo-types. #987
  • Added MinimumRotatedRect trait to calculate the MBR of geometry #959
  • Added GeodesicArea trait to support geodesic area and perimeter calculations from geographlib-rs #988
  • Added GeodesicDestination trait to support geodesic destination calculations #991
  • Added GeodesicBearing trait to support geodesic bearing calculations #991

0.23.1

  • Update to geo-types-0.7.8 which deprecated Coordinate in favor of Coord. #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 RemoveRepeatedPoints trait 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

0.23.0

  • Added AffineOps, Scale, and Skew traits allowing the definition and composition of 2-D affine transforms.
    • Related Cleanup:
      • Existing Rotate and Translate traits leverage this new AffineOps trait.
      • Moved RotatePoint::rotate_around_point method onto
      • Rotate::rotate_around_point and removed RotatePoint trait.
      • Removed deprecated Rotate::rotate method, use Rotate::rotate_around_center or Rotate::roate_around_centroid instead.
      • Deprecated Translate::translate_in_place in favor of Translate::translate_mut to line up with naming elsewhere in the crate.
    • Implemented across several PR's:
  • Added BooleanOps::clip to clip a 1-D geometry with a 2-D geometry.
  • Added InteriorPoint trait to calculate a representative point inside a Geometry.
  • Added Within trait to determine if one Geometry is completely within another.
  • Added ConvexHull implementation for all remaining geometries.
  • Added Contains implementation for all remaining geometries.
  • Removed deprecated ToGeo trait. Use std::convert::TryFrom<$geometry> instead.

0.22.1

  • Fix some floating point issues with BoolOps

0.22.0

  • Add densification algorithm for linear geometry components
  • You may now specify Geometry rather than Geometry<f64> since we've added a default trait implementation. You may still explicitly declare the numeric type as f64, or any other implementation of CoordNum, but this should save you some typing if you're using f64. The same change applies to Coordinates and all the geometry variants, like Point, LineString, etc.
  • Fix fast path euclidean distance
  • Reexport everything from the proj crate
  • Added a geometry module which re-exports all the inner geometry variants, so you can use geo::geometry::* to concisely include Point, LineString, etc.
  • Use robust predicates everywhere in geo
  • Winding trait is rexported under geo::algorithm::Winding (and thus geo::Winding and geo::prelude::Winding)
  • BREAKING: de-exported WindingOrder from geo::WindingOrder/geo::algorithms::WindingOrder. Instead, go back to use geo::winding_order::WindingOrder - it was briefly rexported as geo::WindingOrder and geo::algorithms::WindingOrder.

0.21.0

  • Boolean operations for Polygons and MultiPolygons: intersect, union, xor, and difference. Refer trait bool_ops::BooleanOps for more info.

  • POSSIBLY BREAKING: Minimum supported version of Rust (MSRV) is now 1.58

  • BREAKING: rstar version upgraded to 0.9.x

  • POSSIBLY BREAKING: GeoFloat types must now implement num_traits::Signed and num_traits::Bounded. This shouldn't affect you if you are using a standard Geometry<f64> or Geometry<f32> or geo::GeoFloat generically.

  • Speed up Relate and Contains traits for large LineStrings and Polygons by 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 intersects checks by using a preliminary bbox check

  • BREAKING: Remove unneeded reference for *MapCoords* closure parameter.

  • BREAKING: Bump proj dependency to 0.26 which uses PROJ version 9.0

  • rename Translate::translate_inplace -> Translate::translate_in_place

  • MapCoords restructuring: #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 TryMapCoords into MapCoords and TryMapCoordsInplace into MapCoordsInPlace
  • Implement ChamberlainDuquetteArea for all geo types.

  • Add {Convert,TryConvert} traits for coordinate value type conversion.

  • BREAKING: MapCoords/MapCoordsInPlace now map Coordinates rather than (x,y) tuples

  • Tidy fast-path distance algorithm

0.20.1

  • FIX: update to proper minimum geo-types version

0.20.0

  • Add LinesIter algorithm to iterate over the lines in geometries.
    • Very similar to CoordsIter, but only implemented where it makes sense (e.g., for Polygon, Rect, but not Point).
    • #757
  • Add TryMapCoordsInplace algorithm that is similar to TryMapCoords but modifies a geometry in-place

0.19.0

  • Bump proj crate to 0.25.0, using PROJ 8.1.0
  • Add ChaikinSmoothing algorithm
  • Fix rotate for multipolygons to rotate around the collection's centroid, instead of rotating each individual polygon around its own centroid.
  • Add KNearestConcaveHull algorithm
  • Remove cargo-tarpaulin due to instability (#676, #677)
  • Fix: ClosestPoint for Polygon's handling of internal points
  • Implemented ClosestPoint method for types Triangle, Rect, GeometryCollection, Coordinate and the Geometry enum.
  • BREAKING: TryMapCoords Result is now generic rather than a Box.
  • Add Transform algorithm
  • Add missing Intersects implementations
  • Note: The MSRV when installing the latest dependencies has increased to 1.55
  • Add get() to IntersectionMatrix for directly querying DE-9IM matrices

0.18.0

  • Add line_intersection to compute point or segment intersection of two Lines.
  • Add Relate trait to topologically relate two geometries based on DE-9IM semantics.
  • Fix Contains implementation for Polygons to match the OGC spec using the new Relate trait
  • BREAKING: Contains no longer supports Integer Polygon and Geometry. This was a trade-off for a Contains implementation that was more correct for Floats.

0.17.1

  • Rewrite the crate documentation
  • Fix Centroid algorithm for MultiLineString when all members have only one point.
  • Implement Centroid algorithm on Geometry and its remaining variants.
  • Add GeodesicIntermediate algorithm

0.17.0

  • BREAKING: update geo-types to 0.7
  • Introduce coords_count method on CoordsIter.
  • Fix non-empty MultiPoint has 0-dimensions, not 1.
  • Add new EuclideanDistance implementations: impl EuclideanDistance<Coordinate<T>> for Line, impl EuclideanDistance<Line> for Coordinate, impl EuclideanDistance<Coordinate> for Coordinate
  • Introduce geo::GeoFloat and geo::GeoNum trait so external crates can implement methods which operate on geometries generically.
  • Make HasKernel public to allow geo on exotic numeric types.
  • Fix panic when simplify is given a negative epsilon
  • Performance improvements to simplify
  • BREAKING: The T generic parameter for CoordsIter is now an associated type
  • Add CoordsIter::exterior_coords_iter method to iterate over exterior coordinates of a geometry
  • BREAKING: The ExtremeIndices and ExtremePoints traits have been combined into a new Extremes trait containing an extremes method. The output of the extremes method contains both indices and coordinates. The new implementation is based on CoordsIter instead of ConvexHull, and now runs 6x faster.

0.16.0

  • Fix panic when simplify is given a negative epsilon
  • Add CoordsIter trait for iterating over coordinates in geometries.
  • Fix edge case handling in Contains
  • Fix edge case handling in line_locate_point
  • Add proj-network feature enables network grid for optional proj integration.
  • Add HasDimensions trait for working with Geometry dimensionality

0.15.0

  • Add Intersects implementations for all pairs of types
  • Add ConcaveHull algorithm
  • Add robust predicates
  • Improve numerical stability in centroid computation

0.14.2

  • Bump proj version to 0.20.3
  • Change closure for exterior_mut() and interiors_mut() to be FnOnce
  • Bump proj version to 0.20.0 (superseded by 0.20.3)
  • Fix numerical stability in area computation
  • Fix contains for degenerate zero-area triangles
  • Allow MapCoords on Rect to invert coords
  • Centroid impl for MultiLineString
  • Fix Area logic for Polygon with interiors

0.14.1

  • Fix bug in Line-Polygon Euclidean distance

0.14.0

  • 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-postgis crate
  • Add new GeodesicDistance and GeodesicLength algorithms
  • Implement Area for all types
  • Implement BoundingRect for all types
  • Add more Contains implementations
  • 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 to Area#signed_area. Most likely, if you aren't sure which one to use, you'll want unsigned_area which is always positive.

0.13.0

  • 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 BoundingRect implementation for Rect
  • Add Chamberlain–Duquette area algorithm
  • Make Euclidean Line-Line distance symmetrical
  • Bump rstar dependency to 0.4
  • Mark ToGeo as deprecated
  • Remove usages of 'failure' crate

0.12.2

  • Introduce point!, line_string!, and polygon! macros.

0.12.1

  • Add FrechetDistance algorithm

0.12.0

  • Bump geo-types dependency to 0.4.0
  • Bump rstar and proj dependencies
  • Implement Centroid for MultiPoint

0.11.0

  • Replace the spade crate with the rstar crate
  • Remove unnecessary algorithm trait bounds

0.10.3

0.10.2

  • Add to_degrees and to_radians methods on Points

0.10.1

  • Fix some edge case on centroid computation

0.10.0

  • Remove unnecessary borrows in function params for Copy types.
  • Rename bounding ‘box’ to ‘rect’; move structure to geo-types.

0.9.1

  • Fix Line-Polygon euclidean distance
  • Implement EuclideanDistance for MultiPolygon to Line and Line to MultiPolygon
  • Add Line-LineString euclidean distance
  • Add VincentyDistance and VincentyLength algorithms
  • Add HaversineIntermediate algorithm

0.9.0

0.8.3

  • Reexport core types from geo-types

0.8.2

  • Fix documentation generation on docs.rs

0.8.1

  • Fix centroid calculation for degenerate polygons

0.8.0

  • Prefix Euclidean distance/length traits with 'Euclidean'.
  • Bump num-traits: 0.1 → 0.2
  • Implement SpatialObject for Line type
  • Implement a TryMapCoords trait
  • Impl Polygon convexity function on the type
  • Implement rust-proj as an optional feature within geo

0.7.4

0.7.3

0.7.2

0.7.1

0.7.0

0.6.3

0.6.2

0.6.1

0.6.0

0.5.0

0.4.13

0.4.12

0.4.11

0.4.10

0.4.9

0.4.8

0.4.7

0.4.6

0.4.5

0.4.4

0.4.3

0.4.2

0.4.1

0.4.0

0.3.2

0.3.1

0.3.0

0.2.8

0.2.7

0.2.6

0.2.5

0.2.4

0.2.3

0.2.2

0.2.1

0.2.0

0.1.1

0.1.0

0.0.7