Release Date: 09/04/2024
Developer updates:
- Polygonal Coverages and Operations in JTS
- Validating Polygonal Coverages in JTS
- Simplifying Polygonal Coverages with JTS
- Fast Coverage Union in JTS
- JTS Topological Relationships - the Next Generation
- RelateNG Performance
Eclipse: LocationTech JTS Topology Suite 1.20.0 and release review / #794
New Features
- Add
CoverageValidator
CoveragePolygonValidator
(#900) - Add
CoverageGapFinder
(#900) - Add
CoverageUnion
(#900) - Add
CoverageSimplifier
(#911) - Add
OverlayNG
support for simple GeometryCollection inputs (#915) - Add
Geometry.hasDimension(int dim)
method {#944} - Add
ConcaveHull.alphaShape
function (#952) - Add
OffsetCurve
Joined mode (#956) - Add
PointLocation.isOnSegment
function (#1048) - Add
RelateNG
API for improved topological relationship functionality and performance (#1052, #1055) - Add system property
jts.relate=ng
to enable use of RelateNG inGeometry
methods (#1073)
Functionality Improvements
- Improve
TopologyPreservingSimplifier
to prevent edge-disjoint line collapse (#925) - Improve
OffsetCurve
to return more linework for some input situations (#956) - Reduce buffer curve short fillet segments (#960)
- Added ability to specify boundary for
LargestEmptyCircle
(#973) - Improve
DouglaPeuckerSimplifier
andTopologyPreservingSimplifier
to handle ring endpoints (#1013) - Add
Angle
functionssinSnap
andcosSnap
to avoid small errors, e.g. with buffer operations (#1016) - Improve Buffer input simplification for rings (#1022)
- Improve CoverageSimplifier with ring removal, smoothing, inner/outer and per-feature tolerances (#1060)
Bug Fixes
- Fix
WKBReader
andWKBWriter
handling of M measures when writing to WKB and reading from WKB (#734) - Fix
PreparedGeometry
handling of EMPTY elements (#904) - Fix
WKBReader
parsing of WKB containing multiple empty elements (#905) - Fix
LineSegment.orientationIndex(LineSegment)
to correct orientation for non-collinear segments on right (#914) - Fix
DepthSegment
compareTo method (#920) - Ensure
GeometryFixer
does not change coordinate dimension (#922) - Improve
ConvexHull
radial sort robustness (#927) - Improve robustness of Delaunay Triangulation frame size heuristic (#931)
- Fix
PreparedLineString.intersects
to handle mixed GCs correctly (#944) - Fix
QuadEdgeSubdivision.TriangleEdgesListVisitor
(#945) - Fix
PolygonHoleJoiner
to handle all valid inputs
(allowsPolygonTriangulator
,ConstrainedDelaunayTriangulator
, andConcaveHullOfPolygons
to work correctly) (#946) - Fix
OffsetCurve
handling of input with repeated points (#956) - Fix
OffsetCurve
handling zero offset distance (#971) - Fix
MaximumInscribedCircle
andLargestEmptyCircle
to avoid long looping for thin inputs (#978) - Fix
OffsetCurve
to use a minimum QuadrantSegs value (#981) - Fix
HilbertEncoder
Y extent handling - Fix
Geometry.getCoordinate
to return non-null coordinate for collections with empty first element (#987) - Fix
LargestEmptyCircle
to handle polygonal obstacles (#988) - Make intersection computation more robust (#989)
- Fix
VariableBuffer
to handle zero vertex buffer distances correctly (#997) - Fix
IncrementalDelaunayTriangulator
to ensure triangulation boundary is convex (#1004) - Fix OverlayNG Area Check heuristic for difference (#1005)
- Fix
InteriorPointPoint
to handle empty elements - Fix
DistanceOp
for empty elements (#1010) - Fix predicates for MultiPoint with EMPTY (#1015)
- Fix
InteriorPoint
for MultiLineString with EMPTY (#1023) - Fix TopologyPreservingSimplifier to prevent incorrect topology from jumping components (#1024)
- Fix OffsetCurve to ensure end segments are included (#1029)
- Fix
PointLocator
to respectBoundaryNodeRule
for single lines (#1031) - Fix
BufferOp
Inverted Ring Removal check (#1038) - Improve
VariableBuffer
segment buffer cap generation (#1041) - Fix
TopologyPreservingSimplifier
ring endpoint removal indexing (#1059)
Performance Improvements
- Improve
Polygonizer
performance in some cases with many islands (#906) - Improve Convex Hull performance by avoiding duplicate uniquing (#985)
- Improve
HPRtree
performance (#1012) - Improve performance of noding and overlay via
HPRtree
(#1012) - Improve
DistanceOp
performance for Point-Point (#1049) - Improve
CoveragePolygonValidator
via section performance optimization (#1053)