Releases: locationtech/jts
Releases · locationtech/jts
JTS Release 1.20.0
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)
JTS Release 1.19.0
Release Date: 06/21/2022
New Features
- Add
ConstrainedDelaunayTriangulator
andPolygonTriangulator
(#775, #862) - Add
Tri
data structure for representing triangulations (#775) - Add
DiscreteFrechetDistance
(#764, #783) - Add
OffsetCurve
class (#810, #816) - Add
ConcaveHull
class for points (#823, #829) - Add
ConcaveHullOfPolygons
class (#870) - Add
PolygonHullSimplifier
class (#861, #880) - TWKB read and write implementation (#854)
Functionality Improvements
- Improve
GeometryFixer
behaviour for holes outside polygons (#772) - Simplify and fix logic of
BufferParameters.setQuadSegs
(#778) - Improve
KdTree
query code to avoid recursion (#779) - Add
KdTree
seeding toSnappingNoder
(#780) - Add
GeometryFixer
option to preserveMulti
geometry types when collapses occur (#791) - Make
QuadTree
thread-safe (#792) - Allow specifying a fixed
PrecisionModel
via grid size (#804) - Improve
Densifier
to interpolate Z values (#835) - Add support for GeoJSON
Feature
andFeatureCollection
types (#837) - Add
WKTReader.setFixStructure
to fix WKT input (#848) - Improve
LineSegment.hashCode
to reduce collisions (#872)
Performance Improvements
- Improve performance of
CoveageUnion
by using boundary chains (#891)
Bug Fixes
- Fix
WKTReader
geometry typename parsing (#786) - Fix
CoordinateArrays.reverse
to handle zero-length arrays #787 - Fix
GeometryFixer
to appplyisKeepCollapsed
flag toGeometryCollection
elements (#790) - Fix
RectangleIntersects
to handle XYZM geometry (#794) - Fix various operations to handle XYZM geometry (#795)
- Fix
SnapRoundingNoder
to use tolerance in noding (also fixesGeometryPrecisionReducer
) (#802) - Fix
MaximumInscribedCircle
to avoid infinite-looping on flat collapsed input (#807) - Add
OverlayNG
result area heuristic check (#812) - Fix the buffers generated for mitred joins (#818)
- Fix
WKTReader
to produce correct XY coordinate dimension for POLYGON EMPTY (#828) - Fix
RelateOp
for a snapped line boundary point (#839) - Fix IsValidOp for repeated node points (#845)
- Fix
IsSimpleOp
for repeated endpoints (#851) - Fix
GeometryFixer
via noding check for zero-distance buffers (#867) - Fix
MinimumDiameter.minimumRectangle
for flat inputs (#875) - Fix
BufferOp
inverted ring check optimization (#878) - Fix
STRtree
nearest-neighbour queries on empty trees to avoid NPE (#886) - Remove transitive compile dependency on junit from jts-io-commmon (#855)
JTS Release 1.18.2
Version 1.18.2
Release Date: 08/27/2021
API Changes
- Move
IsSimpleOp
toorg.locationtech.jts.operation.valid
package (#717)
Functionality Improvements
- Add
GeometryFixer
class (#704) - Improve design and performance of
IsSimpleOp
(#717, #754) - Improve design and perforance of
IsValidOp
(#743, #748, #755, #756, #757) - Fix
SortedPackedIntervalRtree
to be thread-safe (fixesPreparedPolygon
too) (#746)
Bug Fixes
- Fix
InteriorPoint
to handle partially-empty collections (#698) - Fix
MultiPoint.isValid
to check validity correctly (#700) - Fix
WKTReader
andWKTWriter
handling of collections with all empty elements (#702) - Fix
HalfEdge.prev()
method (#703) - Fix
BufferOp
to remove invalid elements caused by inverted ring curves (#706) - Fix
IsSimpleOp
duplicate lines bug (#716) - Fix
Angle.interiorAngle
to produce interior angle correctly (#721) - Fix
IsValidOp
to correctly report invalidity for certain kinds of LinearRings (#737) - Fix
GeometryPrecisionReducer
to support the "keep collapsed components" semantics (#738) - Fix
VoronoiDiagramBuilder
to respect user-provided clip envelope (#740)
JTS Release 1.18.1
Version 1.18.1
Release Date: 02/26/2021
Functionality Improvements
- Check for invalid polygonal geometry before fixing in
DouglasPeuckerSimplifier
,VWSimplifier
,Densifier
(#656) - Add
Coordinate
and subclassescreate()
methods (#637) - Ensure OverlayNG input line order is preserved (#665)
- Add
UnaryUnionNG
functions that acceptCollection
s (#669 and #670) - Switch to using compact-SRID WKB format (#664)
- Improve
WKBReader
error checking (#675) - Improve
Densifier
splitting algorithm to create longer segments (#677) - Allow constructing invalid
Polygon
s andLinearRing
s with only 3 vertices (#682) - Ensure invalid 3-point polygons and rings are handled correctly (#683)
- Fix
GeoJSONReader
to parse null and empty coordinates as empty geometry (#687) - Fix
GeoJSONWriter
to emit empty coordinates array for empty point and linestring (#688) - Add
MaximumInscribedCircle
check for invalid tolerance, to avoid infinite loops (#696) - Add
GeoJsonWriter.setForceCCW
method to emit polygons with CCW orientation, as per GeoJSON specification (#694)
Bug Fixes
- Ensure
Densifier
createsCoordinate
s with same class as input (#637) - Fix Relate for cases with closed linear geometry and empty geometry (#671)
- Fix
Densifier
to avoid splitting segments with length equal to distance tolerance (#676) - Fix
Geometry.compareTo
to test polygon holes (#678) - Fix OverlayNG handling of polygons with interior flat lines (#685)
- Fix
Polygonizer
to avoid NPE on invalid input (#692)
WKBDump
- Added utility to dump out formatted WKB (#673)
JTS Release 1.18.0
Version 1.18.0
Release Date: 12/23/2020
API Changes
GeometryPrecisionReducer
is less tolerant of invalid input (but also avoids failing on some valid ones) (#648)- Moved
Position
andQuadrant
toorg.locationtech.jts.geom
package - Removed
SimpleSnapRounder
- useSnapRoundingNoder
instead - Deprecated
MCIndexSnapRounder
- useSnapRoundingNoder
instead
Functionality Improvements
- Improve Orientation.isCCW to handle flat topology collapse (#588)
- Add
KMLReader
(#593) - Add
Densifier.setValidated
method to allow disabling expensive polygon validation (#595) - Add
OverlayNG
codebase (#599) - Add Z support in OverlayNG (#645)
- Add system property
jts.overlay=ng
to enable use of OverlayNG inGeometry
methods (#615) - Add
SnapRoundingNoder
(#599) - Add
SnappingNoder
(#599) - Change
GeometryPrecisionReducer
to use OverlayNG with Snap-Rounding - Change
GeometryNoder
to useSnapRoundingNoder
- Add
KdTree
size
anddepth
methods (#603) - Improve
WKBWriter
to write empty Polygons using a more compact representation (#623) - Support read and initialize internal structure of
STRtree
andQuadtree
(#634) - Improve
GeometryPrecisionReducer
to handle GeometryCollections (#648) - Add
Orientation.isCCWArea
(#655)
Performance Improvements
- Improve performance of
UnaryUnionOp
by removing OverlayUnion optimization (#644)
Bug Fixes
- Fix
RayCrossingCounter
to handle XYZM coordinates (#589) - Fix
PackedCoordinateSequence
to always use XYZM coordinates when dimension is 4 (#591) - Fix
OrdinateFormat
to work around a JDK issue with the minus sign character inLocale.NO
(#596) - Fix
GeoJsonReader
to throw aParseException
for empty arrays (#600) - Fix
WKTFileReader
handling of files with large amount of whitespace (#616) - Fix
WKBWriter
to output 3D empty Points with 3 ordinates (#622) - Fix
Geometry.reverse
to handle all geometry structures (#628) - Fix
GeometryPrecisionReducer
to avoid silently mangling input (#648) - Fix
Geometry.buffer
to avoid dropping large polygon areas in some situations (#655)- also fixes
DouglasPeuckerSimplifier
(#498)
- also fixes
JTS TestBuilder
Functionality Improvements
- Add Geometry Inspector sorting by Area or Length
JTS Release 1.17.1
Version 1.17.1
Release Date: August 27, 2020
Java Version: 1.8
Functionality Improvements
- Add
WKBReader
andWKBWriter
support forPOINT EMPTY
(#567)
Performance Improvements
- Improve performance of
PreparedPolygon
covers
andcontains
for point inputs (#577)
Bug Fixes
- Fix
IndexedPointInAreaLocator
thread-safety (#572) - Fix
WKTReader
to handle MultiPoints containingEMPTY
(#575) - Fix API compile regression by removing deprecation on geometry
reverse
methods (#582)
JTS TestBuilder
Functionality Improvements
- Add per-Layer palette control for Strokes and Fills
JTS TestRunner
Functionality Improvements
- Enhance
-geomfunc
to load multiple function classes - Fix function registry to replace matching loaded functions (#569)
JTS Release 1.17.0
Java Version: 1.8
API Changes
- Change
Polygon
getExteriorRing
andgetInteriorRingN
accessors to returnLinearRing
.- This is a binary incompatible change to the method signature. Recompilation is necessary. No source code changes are required.
Functionality Improvements
- Added
IndexedFacetDistance.isWithinDistance
- Added
OrdinateFormat
to ensure that ordinate text output is accurate and consistent - Added
Triangle.circumcentreDD
- Added
DD.determinant
methods - Added
Envelope
methodsgetDiameter
,copy
,disjoint
(#483) - Added
Intersection
class, refactored library to use it (#468) - Added
CascadedPolygonUnion
union-by-buffer on error capability (#470) - Added
HalfEdge
support for direction points (#479) - Added
CoordinateList.toCoordinateArray(isForward)
(#482) - Addded
HPRtree
Hilbert Packed R-tree (#494) - Added
VariableBuffer
class for computing varying-distance buffers (#495) - Added
LineSegment.reflect
method (#495) - Added
MaximumInscribedCircle
algorithm (#530) - Added
LargestEmptyCircle
algorithm (#530)
Performance Improvements
- Improve performance of
UniqueCoordinateFilter
(#422) - Improve performance of
Polygonizer
(#431) - Avoid use of
ArrayList
in MonotoneChain builders - Add DistanceOp line-line envelope short-circuit optimizations (#534)
Bug Fixes
- Fix
PackedCoordinateSequence.Float
construction methods (#379, #381) - Fix bug in
Quadtree.ensureExtent
(#416) - Fix bugs in
LinearLocation
endpoint handling (#421) - Fix bug in
MinimumBoundingCircle
maximum diameter algorithm, and provide method for it - Improve robustness of
CascadedPolygonUnion
by addingOverlapUnion
- Fix bug in
HalfEdge.insert
method which caused CCW order not to be preserved in some cases - Fix generation of Voronoi diagrams for cases with sites in a square (#447)
- Fix use of clipping envelope in
VoronoiDiagramBuilder
- Fix infinite loop on empty input in
IndexedPointInAreaLocator
andSortedPackedIntervalRTree
(#462) - Fix WKT parsing in Turkish locale (#456)
- Improve accuracy of
LineSegment.lineIntersection
(#468) - Fix
Distance3DOp
coordinate ordering (#480) - Fix
Geometry.reverse()
to have consistent behaviour and to copy all fields (#513) - Fix
MinimumBoundingCircle.farthestPoints
to work correctly (#522 and #533) - Fix
DistanceOp
handling of geometry collections with empty components (#524) - Fix GML parsing of coordinates and SRS name (#553)
JTS TestBuilder
Functionality Improvements
- Add a UI to run external commands
- Allow creating additional view layers
- Add map view title, legend and border options
- Support points in Reveal Topology mode
- Add WKT panel Copy as WKB via Ctl-click
JTS TestRunner
Functionality Improvements
- Allow test files/dirs to be specified as free args
- Only load
.xml
files from directories
JtsOp
- Added command-line utility to run JTS operations
JTS 1.16.1
Functionality Improvements
- Added
HilbertCode
andHilbertCurveBuilder
. - Added
MortonCode
andMortonCurveBuilder
. - Improved
InteriorPointArea
algorithm performance and robustness
Bug Fixes
- Fix
IsValidOp
to handle empty components. - Fix
ShapeWriter
to handle Polygons with empty holes. - Fix
CoordinteArraySequence
to duplicate coordinate array if needed (rather than fix in place)
JTS TestBuilder
- Functionality Improvements
JTS 1.16.0
The JTS team is pleased to share the JTS 1.16.0 release.
If anyone finds issues with this release, please post them to our mailing list or as issues on the JTS GitHub site.
API Changes
- Added XYZM support to
CoordinateSequence
andCoordinateSequenceFactory
withgetDimension()
andgetMeasures()
information. - Introduced
Coordinate
methods forgetX()
,getY()
,getZ()
, andgetM()
. - Deprecated
Coordinate.z
field, useCoordinate.getZ()
Coordinate
subclasses introduced for XY, XYM, XYZM representations.
Functionality Improvements
- Removed
PackedCoordinateSequenceFactory
constructor used to supply a default dimension, use appropriatecreate( size, dimension )
instead. - WKTReader and WKTWriter support for measures
Acknowledgments
- Thanks to Felix Obermaier for testing the release candidate and contributing fixes to the release!
1.16.0-RC1
The JTS team is pleased to share the release candidate JTS 1.16.0-RC1.
If anyone finds issues with this release, please post them to our mailing list or as issues on the JTS GitHub site.
API Changes
- Added XYZM support to
CoordinateSequence
andCoordinateSequenceFactory
withgetDimension()
andgetMeasures()
information. - Introduced
Coordinate
methods forgetX()
,getY()
,getZ()
, andgetM()
. - Deprecated
Coordinate.z
field, useCoordinate.getZ()
Coordinate
subclasses introduced for XY, XYM, XYZM representations.
Functionality Improvements
- Removed
PackedCoordinateSequenceFactory
constructor used to supply a default dimension, use appropriatecreate( size, dimension )
instead. - WKTReader and WKTWriter support for measures