Skip to content

Releases: locationtech/jts

JTS Release 1.20.0

30 Aug 06:56
Compare
Choose a tag to compare

Release Date: 09/04/2024

Developer updates:

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 in Geometry 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 and TopologyPreservingSimplifier to handle ring endpoints (#1013)
  • Add Angle functions sinSnap and cosSnap 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 and WKBWriter 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
    (allows PolygonTriangulator, ConstrainedDelaunayTriangulator, and ConcaveHullOfPolygons to work correctly) (#946)
  • Fix OffsetCurve handling of input with repeated points (#956)
  • Fix OffsetCurve handling zero offset distance (#971)
  • Fix MaximumInscribedCircle and LargestEmptyCircle 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 respect BoundaryNodeRule 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

21 Jun 20:10
Compare
Choose a tag to compare

Release Date: 06/21/2022

New Features

  • Add ConstrainedDelaunayTriangulator and PolygonTriangulator (#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 preserve Multi 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 and FeatureCollection 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 appply isKeepCollapsed flag to GeometryCollection 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 fixes GeometryPrecisionReducer) (#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

27 Aug 19:33
Compare
Choose a tag to compare

Version 1.18.2

Release Date: 08/27/2021

API Changes

  • Move IsSimpleOp to org.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 (fixes PreparedPolygon too) (#746)

Bug Fixes

  • Fix InteriorPoint to handle partially-empty collections (#698)
  • Fix MultiPoint.isValid to check validity correctly (#700)
  • Fix WKTReader and WKTWriter 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

26 Feb 20:00
Compare
Choose a tag to compare

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 subclasses create() methods (#637)
  • Ensure OverlayNG input line order is preserved (#665)
  • Add UnaryUnionNG functions that accept Collections (#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 Polygons and LinearRings 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 creates Coordinates 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

23 Dec 15:01
Compare
Choose a tag to compare

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 and Quadrant to org.locationtech.jts.geom package
  • Removed SimpleSnapRounder - use SnapRoundingNoder instead
  • Deprecated MCIndexSnapRounder - use SnapRoundingNoder 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 in Geometry methods (#615)
  • Add SnapRoundingNoder (#599)
  • Add SnappingNoder (#599)
  • Change GeometryPrecisionReducer to use OverlayNG with Snap-Rounding
  • Change GeometryNoder to use SnapRoundingNoder
  • Add KdTree size and depth methods (#603)
  • Improve WKBWriter to write empty Polygons using a more compact representation (#623)
  • Support read and initialize internal structure of STRtree and Quadtree (#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 in Locale.NO (#596)
  • Fix GeoJsonReader to throw a ParseException 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)

JTS TestBuilder

Functionality Improvements

  • Add Geometry Inspector sorting by Area or Length

JTS Release 1.17.1

28 Aug 00:32
Compare
Choose a tag to compare

Version 1.17.1

Release Date: August 27, 2020

Java Version: 1.8

Functionality Improvements

  • Add WKBReader and WKBWriter support for POINT EMPTY (#567)

Performance Improvements

  • Improve performance of PreparedPolygon covers and contains for point inputs (#577)

Bug Fixes

  • Fix IndexedPointInAreaLocator thread-safety (#572)
  • Fix WKTReader to handle MultiPoints containing EMPTY (#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

30 Jun 17:40
Compare
Choose a tag to compare

Java Version: 1.8

API Changes

  • Change Polygon getExteriorRing and getInteriorRingN accessors to return LinearRing.
    • 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 methods getDiameter, 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 adding OverlapUnion
  • 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 and SortedPackedIntervalRTree (#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

19 Feb 21:18
Compare
Choose a tag to compare

Functionality Improvements

  • Added HilbertCode and HilbertCurveBuilder.
  • Added MortonCode and MortonCurveBuilder.
  • 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

19 Sep 03:14
Compare
Choose a tag to compare

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 and CoordinateSequenceFactory with getDimension() and getMeasures() information.
  • Introduced Coordinate methods for getX(), getY(), getZ(), and getM().
  • Deprecated Coordinate.z field, use Coordinate.getZ()
  • Coordinate subclasses introduced for XY, XYM, XYZM representations.

Functionality Improvements

  • Removed PackedCoordinateSequenceFactory constructor used to supply a default dimension, use appropriate create( 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

20 Aug 02:35
Compare
Choose a tag to compare
1.16.0-RC1 Pre-release
Pre-release

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 and CoordinateSequenceFactory with getDimension() and getMeasures() information.
  • Introduced Coordinate methods for getX(), getY(), getZ(), and getM().
  • Deprecated Coordinate.z field, use Coordinate.getZ()
  • Coordinate subclasses introduced for XY, XYM, XYZM representations.

Functionality Improvements

  • Removed PackedCoordinateSequenceFactory constructor used to supply a default dimension, use appropriate create( size, dimension ) instead.
  • WKTReader and WKTWriter support for measures