Version History
This document lists the change history of release versions of the JTS Topology Suite.
- Project site: LocationTech JTS
- Code repo: Github JTS
- Distribution: Github JTS Releases
Distributions for older JTS versions can be obtained at the SourceForge JTS project
Release Date: TBD*
- Fix
ConcaveHullOfPolygons
nested shell handling (#1081) - Fix
ConvexHull
to avoid modifying input (#1083) - Fix
TopologyPreservingSimplifier
to avoid jumping components (#1096)
- Fix RelateNG to cache in prepared A-L cases (#1099)
- Add
GeometryCollection
dimension cache (#1103)
Release Date: 09/18/2024
- 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)
- 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)
- 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)
- 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)
Release Date: 06/21/2022
- 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)
- Add
CubicBezierCurve
class
- 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)
- Improve performance of
CoverageUnion
by using boundary chains (#891)
- 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
fromjts-io-commmon
(#855)
Release Date: 08/27/2021
- Move
IsSimpleOp
toorg.locationtech.jts.operation.valid
package (#717)
- 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)
- 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)
Release Date: 02/26/2021
- 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)
- 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)
- Added utility to dump out formatted WKB (#673)
Release Date: 12/23/2020
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
- Add
KMLReader
(#593) - 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) - Add
Orientation.isCCWArea
(#655)
- Improve
Orientation.isCCW
to handle flat topology collapse (#588) - Add
Densifier.setValidated
method to allow disabling expensive polygon validation (#595) - 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)
- Improve performance of
UnaryUnionOp
by removing OverlayUnion optimization (#644)
- 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
- Add Geometry Inspector sorting by Area or Length
Release Date: August 27, 2020
Java Version: 1.8
- Add
WKBReader
andWKBWriter
support forPOINT EMPTY
(#567)
- Improve performance of
PreparedPolygon
covers
andcontains
for point inputs (#577)
- Fix
IndexedPointInAreaLocator
thread-safety (#572) - Fix
WKTReader
to handle MultiPoints containingEMPTY
(#575) - Fix API compile regression by removing deprecation on geometry
reverse
methods (#582)
- Add per-Layer palette control for Strokes and Fills
- Enhance
-geomfunc
to load multiple function classes - Fix function registry to replace matching loaded functions (#569)
- Added
-limit
and-offset
options for reading from file inputs (#617)
Release Date: July 1, 2020
Java Version: 1.8
- 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.
- 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
CoordinateList.toCoordinateArray(isForward)
(#482) - Added
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)
- Added
CascadedPolygonUnion
union-by-buffer on error capability (#470) - Added
HalfEdge
support for direction points (#479)
- 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)
- 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)
- 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
- Allow test files/dirs to be specified as free args
- Only load
.xml
files from directories
- Added command-line utility to run JTS operations
Release Date: Febuary 19, 2019
- Added
HilbertCode
andHilbertCurveBuilder
. - Added
MortonCode
andMortonCurveBuilder
. - Improved
InteriorPointArea
algorithm performance and robustness - Add
IndexedFacetDistance
methodsnearestLocations
andnearestPoints
- Make
IndexedFacetDistance
thread-safe - Add
SimplePointInAreaLocator
envelope check
- Fix
IsValidOp
to handle empty components. - Fix
ShapeWriter
to handle Polygons with empty holes. - Fix
CoordinateArraySequence
to duplicate coordinate array if needed to make coordinates consistent (rather than fix in place) - Fix
AffineTransformation.rotate
- Added per-layer style control
- Change UI terminology to Reveal Topology
- Add undo capability
- Add more functions to Delete Components tool
- Add Save Image to PNG button
- Add Scalar Function panel logging
- Add Pan capability to Zoom Tool
- Improve arrow styling
- Add meta-function options Each and Repeat
Release Date: September 10, 2018
- Added XYZM support to
CoordinateSequence
andCoordinateSequenceFactory
withgetDimension()
andgetMeasures()
information. - Added
Coordinate
methods forgetX()
,getY()
,getZ()
, andgetM()
. - Deprecated
Coordinate.z
field. UseCoordinate.getZ()
. Coordinate
subclasses introduced for XY, XYM, XYZM representations.
- Removed
PackedCoordinateSequenceFactory
constructor used to supply a default dimension. Use appropriatecreate( size, dimension )
instead. - Added
WKTReader
andWKTWriter
support for measures
Release Date: November 30, 2017
- Changed licensing to dual-licensed EDL or EPL
- Changed source hosting to GitHub
- Changed distro hosting to GitHub
- Changed build chain to use Maven
- Changed code module structure
- Changed Java package root to
org.locationtech.jts
- Refactored
CGAlgorithms
into function-specific classesOrientation
,PointLocation
,Distance
,Length
,Area
- Deprecated
NonRobustCGAlgorithms
; use function-specific classes refactored fromCGAlgorithms
- Deprecated
RobustDeterminant
; useCGAlgorithmsDD
- Deprecated
Geometry.clone
; useGeometry.copy
- Deprecated
GeometryFactory.createX(null)
methods; Use no-argumentGeometryFactory.createX
methods - Deprecated overloaded
GeometryFactory.createMultiPoint
; useGeometryFactory.createMultiPointFromCoords
- Improve
Quadtree
to handle queries with null envelopes - Add
STRtree
K-Nearest Neighbours query - Add
Serializable
to ``PackedCoordinateSequence` - Add
Envelope.intersects
- Add
Geometry.intersects
forGeometryCollection
- Improve
WKBReader
to handle the OGC 06-103r4 specification. - Improve
WKTReader
to handleZ
,M
,ZM
modifiers.
- Add optimization for
Geometry.contains
andGeometry.covers
- Improve robustness of
RayCrossingCounter
andGeometry.contains
- Improve robustness of
MultiPolygon
centroid computation
- Eliminated
LineString.normalize
side-effects
- Added function
Writer.writeGeoJSON
- Added tree view of scalar functions
- Added ability to repeat functions
- Added custom fill styling
- Added
SelectionFunctions
for metrics (area, length) - Added function documentation driven by annotations
- Some changes to layout of GUI elements (such as toolbar)
Release Date: September 23, 2015
- Added
Envelope.compareTo
method - Fixed
SegmentSetMutualIntersector
classes to be thread-safe - Fixed
PreparedGeometry
classes to be thread-safe - Added
LineDissolver
class - Added
edgegraph
package - Added
CoordinateSequences.isEqual
method - Extended
CoordinateSequences.copy
andCoordinateSequences.copy
to handle inputs of different dimension - Added
CoordinateArrays.envelope()
function - Added
CoordinateArrays.intersection()
function - Added
Polygonizer.setCheckValidRings()
method for optimizing performance in some situations - Added
KMLWriter
to convert Geometry to KML representation - Added
Coordinate
equals3D
,equals2D(Coordinate, tolerance)
, andequalInZ
methods. - Added
VWSimplifier
to perform Visvalingam-Whyatt simplification - Enhanced
WKBReader
to handle Spatialite WKB format - Added
DD.setValue()
methods - Added
getGeometry()
methods toLinearComponentExtracter
andLineStringExtracter
- Added
BufferParameters
simplifyFactor
setting - Added node counting and ability to not keep intersection points to
InteriorIntersectionFinder
- Added
Polygonizer
functionality to extract only polygons forming a valid polygonal geometry - Added
KdTree.toCoordinates
- Added
MinimumBoundingCircle.getFarthestPoints
method
- Performance & memory improvement in
PreparedPolygonIntersects
by short-circuiting point input case - Allow for memory usage optimization in
CascadedPolygonUnion
, by avoiding retaining input collection - Fix
Point.isEmpty()
to avoid allocating a coordinate - Fix
Geometry.equalsExact()
to short-circuit when the inputs are identical objects - Add short-circuit to
PointExtracter
to improve performance for Points
- Fixed
RobustLineIntersector
heuristic for handling invalid intersection points (computed as outside envelope of input segments due to numeric precision issues) - Fixed
CGAlgorithmsDD.intersection
to compute intersection correctly - Fixed
Geometry.interiorPoint()
to compute a true interior point in certain cases - Fixed
Geometry.equals
to handle null argument - Fixed
DistanceToPoint
to be thread-safe - Fixed
Geometry.interiorPoint()
andInteriorPointArea
to handle zero-area geometries - Fixed
STRtree
classes to be thread-safe (by synchronizing theAbstractSTRtree.build()
method) - Fixed
STRtree.remove()
method to avoid a NPE - Fixed
DouglasPeuckerSimplifier
andTopologyPreservingSimplifier
to handle empty geometry components in the input - Fixed
ConvexHull
to handle input of array of identical coordinates - Fixed
GeometryTransformer.transformLinearRing()
to handle null inputs - Fixed the
extractPoint(distance, offset)
methods inLocationIndexedLine
andLengthIndexedLine
to handle offsets from endpoints correctly. - Fixed
GeometryCollectionIterator
to correctly handle atomic geometries - Fixed
InteriorIntersectionFinder
to not short-circuit when finding all nodes - Fixed
SubgraphDepthLocator
to work with Java 7+ by avoiding sorting with an inconsistent ordering - Fixed
FontGlyphReader
to use correct Java font value of "SansSerif", and added new constant to match. - Fixed
KdTree
to correctly implement distance tolerance-based coordinate matching - Fixed
LineString.normalize()
to correctly handle CoordinateSequences - Fixed
CommonBitsRemover
to correctly handle CoordinateSequences - Fixed bug in
CoordinateArraySequence.clone()
- Changed interface of
SegmentSetMutualIntersector
to support thread-safety by removing state - Provided
InteriorIntersectionFinderAdder
to replace the poorly namedIntersectionFinderAdder
- Changed some classes in
com.vividsolutions.jts.operation.buffer
to be package-private
- Added
GeometryTestCase
base class to simplify unit tests
- Added
GeoJsonReader
andGeoJsonWriter
classes
- In
OraWriter
the connection is now provided to thewrite()
method, not the constructors
- Fixed
OraReader
to handle readingGeometryCollection
withPoint
as second element - Many improvements to Oracle API code and performance
- Added
OraWriter.setOptimizePoint
andOraWriter.setOptimizeRectangle
methods
- Added ability to read multiple WKBHex geometries from a text file
- Added AutoZoom to input
- Added Oracle text output
- Added more function sets
- Removed dependency on Acme GIF encoder library
- Improved zooming logic
- Added mouse wheel zooming
- Improved UI for editing A/B geometries
- Added Compute New button to Geometry Functions panel
- Added SpatialIndex functions
- Added User Data labelling
- Moved Options menu items to View menu
- Removed Tools menu items (they are available as functions)
- Fixed to correctly handle changing Swing Look&Feel
Release Date: December 13, 2012
- Changed
GeometryFactory.createGeometry()
to make a deep copy of the argument Geometry, using the CoordinateSequenceFactory of the factory - Added ability to specify a dimension in
CoordinateArraySequence
- Changed
Geometry.getEnvelopeInternal()
to return a copy of the cached envelope, to prevent modification - Added
GeometryEditor.CoordinateSequenceOperation
to allow easy editing of constituent CoordinateSequences - Added
GeometryFactory.createPolygon
convenience methods which do not require holes to be specified Geometry
overlay methods now return empty results as atomic types of appropriate dimension- Added
RectangleLineIntersector
to provide efficient rectangle-line intersection testing - Added
getOrdinate
andsetOrdinate
toCoordinate
Quadtree
isSerializable
STRtree
isSerializable
- Added
max
,average
andwrap
functions toMathUtil
- Improved
WKTReader
parse error reporting to report input line of error - Improved
WKBReader
to repair structurally-invalid input - Made
TopologyPreservingSimplifier
thread-safe - Added
AbstractSTRtree.isEmpty()
method - Added
QuadTree.isEmpty()
method - Added
KdTree.isEmpty()
method - Added decimation and duplicate point removal to
ShapeWriter
. ScaledNoder
now preserves Z values of input- Added instance methods for all Triangle` static methods
- Added
CGAlgorithmsDD
containing high-precision versions of some basic CG algorithms - Added
IntersectionMatrix.isTrue()
method for testing IM pattern matches - Added
getRawCoordinates
methods toPackedCoordinateSequence
concrete classes - Modified
Geometry.isSimple()
to explicity check for simplicity for all types, and supportGeometryCollections
- Improved
MCIndexSnapRounder
to add nodes only where they are necessary - Added
CoordinateArrays.removeNull()
method - Enhanced
GeometryEditor
to handle null geometries returned from operation - Added
WKBHExFileReader
- Added
Distance3D
operation
- Simplified & improved performance of
RectangleIntersects
by using newRectangleLineIntersector
- In
RandomPointsInGridBuilder
eliminated redundantArrayList
usage - In
PreparedPolygonIntersects
andPreparedLineStringIntersects
added check to avoid creating segment index if all test inputs are points - In
AbstractSTRtree
switched to using indexed list access for better performance than using iterators - In
AbstractSTRtree
freed inserted item array after index is built - Improved performance of
Polygonizer
for cases with many potential holes - Improved performance for some
DD
methods by making themfinal
- Added fast filter for
CGAlgorithmsDD.orientationIndex
, and switched to self-operations for DD determinant - Changed
STRtree.createNode()
to use a static class for nodes - Changed
QuadTree Node
to use scalar x and y variables rather than aCoordinate
to reduce memory allocation - Fixed
PreparedGeometry
concrete classes to be thread-safe. - Fixed
SortedPackedIntervalRTree
so that it is thread-safe.
- Switched to using DD extended-precision arithmetic to compute orientation predicate
CGAlgorithms.distanceLineLine()
improved to be more robust and performant- Fixed robustness issue causing
Empty Stack
failure inConvexHull
for some nearly collinear inputs CGAlgorithms.signedArea()
uses a more accurate algorithm
- Fixed
Geometry.equalsExact()
to avoid NPE when comparing empty and non-emptyPoint
s - Fixed
CascadedPolygonUnion
to discard non-polygonal components created during unioning, to avoid failures and provide more desirable behaviour - Fixed
CentralEndpointIntersector
to initialize result correctly - Fixed
DelaunayTriangulationBuilder.extractUniqueCoordinates(Geometry)
to avoid mutating the vertex order of the input Geometry - Fixed
ConformingDelaunayTriangulationBuilder
to allow non-disjoint site and constraint vertex sets - Fixed
RandomPointsInGridBuilder
point generation to use circle constraint correctly - Fixed Linear Referencing API to handle MultiLineStrings consistently, by always using the lowest possible index value, and by trimming zero-length components from results
- Fixed bug in
LocationIndexedLine
andLengthIndexLine
which was causing an assertion failure when the indexOfAfter() method was called with a constraint location which is at the end of the line - Fixed bug in
STRtree.query(Envelope, ItemVisitor)
causing an NPE when tree is empty - Fixed issue with creating zero-length edges during buffer topology building under fixed precision, by: adding filter to remove zero-length edges; using a better estimate of scale factor for reducing to fixed precision after initial failure.
- Fixed
TopologyPreservingSimplifier
to return a valid result for closedLineString
s with large distance tolerances - Fixed
TopologyPreservingSimplifier
to return an empty result for an empty input - Fixed
DouglasPeuckerSimplifier
to return an empty result for an empty input - Fixed
MinimumBoundingCircle
to correctly compute circle for obtuse triangles. - Fixd
GeometryPrecisionReducer
to use input GeometryFactory when polygon topology is fixed - Fixed
GeometryNoder
bug that was failing to snap to end vertices of lines - Fixed
Geometry.getCentroid()
andGeometry.getInteriorPoint()
to returnPOINT EMPTY
for empty inputs - Fixed
DelaunayTriangulationBuilder
to correctly extract unique points - Fixed
KdTree
to correctly handle inserting duplicate points into an empty tree - Fixed
LineSegment.projectionFactor()
to handle zero-length lines (by returning Double.POSITIVE_INFINITY) - Fixed
LocationIndexedLine
to handle locations on zero-length lines - Fixed
LengthIndexedLine
andLocationIndexedLine
to handleindexOfAfter()
correctly - Fixed
WKBReader
to handle successive geometrys with different endianness - Fixed
GeometricShapeFactory
to correctly handle setting the centre point - Fixed
GeometryFactory.createMultiPoint(CoordinateSequence)
to handle sequences of dimension > 3
- Changed visibility of
TaggedLineStringSimplifier
back topublic
due to user demand
- Added Performance Testing framework (
PerformanceTestRunner
andPerformanceTestCase
) - Added named predicate tests to all Relate test cases
- Peter Hopfgartner - improved area computation
- Michael Michaud - snap-rounding improvements
- Added segment index visualization styling
- Improved Geometry Inspector
- Added stream digitizing for Polygon and LineString tools
- Added output of Test Case XML with WKB
- Added Extract Component tool
- Added Delete Vertices Or Components tool
- Added Geometry Edit Panel pop-up menu, with operations
- Added Halton sequence functions
- Added sorting functions
- Added function for selection of first N components
- Added CGAlgorithms functions
- Added ability to paste and load multiple WKBHex geometries
- Using decimation substantially improves rendering time for large geometries.
- Fixed bug in saving XML test files
Release Date: June 30, 2011
- Added new names for methods for computing
Geometry
equality:equals(Object)
is a synonym forequalsExact(Geometry)
equalsNorm(Geometry)
automatically normalizes the operandsequalsTopo(Geometry)
computes topological equality, and is a synonym for the originalequals(Geometry)
- Added
Geometry.norm()
to provide non-mutating normalization - Added
Geometry.hashCode()
to fulfill Java conventions - Added
LineIntersector.getEndpoint()
method - Added methods to
CoordinateSequences
to test for and create valid rings - Added
minExtent
andmaxExtent
toEnvelope
- Added ability to compute Single-Sided Buffers (invoked via
BufferOp
andBufferParameters
) - Added
GeometryPrecisionReducer
- Added ExtendedWKB SRID support to
WKBWriter
(thanks to Justin Deoliviera) - Improved
PolygonShape
to support floating-point coordinates - Added
GeometryShapeFactory.setRotation(double radians)
method - Added
GeometricShapeBuilder
API to support shape builder development - Added
RandomPointsBuilder
to allow generating various random point sets - Added
RandomPointsInGridBuilder
to allow generating various random point sets constrained to a grid - Added
KochSnowflakeBuilder
- Added
SierpinskiCarpetBuilder
- Added
MathUtil
containing mathematics and numerical utility functions - Added
Vector2D
class providing vector operations - Added
DirectedEdgeStar.getNextCWEdge()
method toplanargraph
API - Improved
AffineTransformation
to avoid numeric precision issues in case of reflection in X=Y (coordinate flipping) - Added
LineSequencer.sequence()
static convenience method - Added error indicators to
BufferDistanceValidator
andBufferResultValidator
- Added
MinimumClearance
class - Added
nearestNeighbours
methods toSTRtree
- Improved memory performance of
ShapeWriter
conversions (by tuning coordinate and polygon conversion) - Improved performance of
RectangleIntersects
by refiningSegmentIntersectionTester
- Delaunay triangulation uses more robust formulation for the inCircle test
- Voronoi computation now uses more robust formulation for the circumcentre computation
- Force
RectangleIntersects
to always use segment-scanning to improve robustness
- Reduced visibility of internal classes in
com.vividsolutions.jts.geom.prep
- Reduced visibility of internal classes in
com.vividsolutions.jts.simplify
- Moved
Matrix
class intojts.math
package - Refactored internal offset curve generation classes
in
com.vividsolutions.jts.operation.buffer
package
- Fixed
CoordinateArraySequence
andPackedCoordinateSequence
to correctly handle Z ordinate ingetCoordinate(int, Coordinate)
- Fixed
LinearRing
to haveisClosed()
returntrue
for empty rings - Fixed
Geometry.union()
to use more robust union algorithm. This provides behaviour consistent withunion(Geometry)
. - Fixed
Point.isValid()
to validate POINT EMPTY correctly - Fixed
SnapIfNeededOverlayOp
to throw the originating exception,which contains meaningful coordinates - Fixed
GeometrySnapper
to allow final vertices of LineStrings to snap correctly - Fixed buffer (
OffsetCurveSetBuilder
) to handle "flat" rings correctly - Fixed
IsValidOp
to handle reporting "Not Closed" errors on empty rings correctly - Fixed
NestedRingTester
(used byIsValidOp
) to correctly handle the case where a hole touches all the vertices of another hole (which is invalid) - Fixed
ConvexHull
to handle large geometries with fewer than 3 unique points - Fixed
GeometryGraph
to ignore empty hole rings when building graph - Fixed
LineMerger
to skip lines with only a single unique coordinate - Fixed
ByteArrayInStream
to pad byte buffers with zeroes - Corrected spelling of
SquarePointShapeFactory
- Fixed tolerance check in
KdTree
- Updated
MasterTester
to include more unit tests
- Added
[Zoom To Result]
button - Improved mark display, with floating point label
- Added more random geometry creation functions
- Added fractal geometry creation functions
- Improved threaded rendering handling to ensure only one frame drawn
- Added Magnify Topology capability
- Added Geometry Inspector dialog
- Better startup script, with auto-home directory detection and JTS_LIB_DIR environment variable (thanks to strk)
- Added logging Info window behaviour
- Improved saving PNG to allow specifying file name
- Fixed Stats panel to update when current test changes
- Fixed deleting single test case
Release Date: March 1, 2010
- Added
CoordinateArrays.isRing
- Added
CGAlgorithms.signedArea(CoordinateSequence)
- Added
CoordinateArrays.copyDeep(...)
method to copy sections of arrays - Added
CoordinateList.add(Coordinate[], boolean, int, int)
method to add sections of arrays - Added
LineSegment.toGeometry()
,LineSegment.lineIntersection()()
- Added
LineSegment.hashCode()
- Added geometric similarity classes (
HausdorffSimilarityMeasure
,AreaSimilarityMeasure
) - Added
MinimumDiameter.getMinimumRectangle()
- Added
MinimumBoundingCircle
class - Added
Densifier
class - Added triangulation API, including
QuadEdgeSubdivision
,IncrementalDelaunayTriangulator
,ConformingDelaunayTriangulator
and supporting classes - Added
VoronoiDiagramBuilder
to perform Voronoi diagram generation - Added
scaleInstance(scaleX, scaleY, x, y)
toAffineTransformation
- Added
AffineTransformationFactory
to allow generating transformations from various kinds of control inputs - Added
BinTree.remove()
method - Fixed
BinTree.query()
to allow null interval arguments - Added
ShapeReader
API to convert Java2D Shapes into JTS Geometry - Added
ShapeWriter
API to convert JTS geometry into Java2D Shapes - Added
FontGlyphReader
API to render Java2D text font glyphs into geometry - Added
SdeReader
to jtsio library - Added
Debug
break methods - Added
Memory
utility for reporting memory statistics - Added
ObjectCounter
utility for counting objects - Added
createSquircle
andcreateSuperCircle
toGeometricShapeFactory
- Improved performance of
Geometry.getArea()
andGeometry.getLength()
when used with customCoordinateSequence
s
- Deprecated
WKBWriter.bytesToHex
in favour ofWKBWriter.toHex
to regularize and simplify method name
- Fixed Point.isValid() to check for invalid coordinates (ie with Nan ordinates)
- Fixed
Geometry.distance()
andDistanceOp
to return 0.0 for empty inputs - Fixed
Buffer
to handle degenerate polygons with too few distinct points correctly - Added illegal state check in
LineSegment.pointAlongOffset()
- Fixed exception strategy in
BufferSubgraph
to handle certain robustness failures correctly - Fixed robustness problem in
OffsetCurveBuilder
in computing mitred joins for nearly parallel segments - Fixed minor bug in
BufferInputLineSimplifier
which prevented simplification of some situations - Fixed bug in
BufferInputLineSimplifier
which caused over-simplification for large tolerances - Fixed bug in
Angle.normalizePositive
to handle values > 2PI correctly - Fixed
WKTWriter
to emit correct syntax for MULTIPOINTs - Fixed
WKTReader
to accept correct syntax for MULTIPOINTs CGAlgorithms.isCCW
now checks for too few points in the ring and throws anIllegalArgumentException
- Fixed bug in
AffineTransformation#eqals
(logic bug) - Fixed bug in
CoordinateList#closeRing
(cloning closing Coordinate)
- WKT input is cleaned automatically when loaded (illegal chars are removed)
- Added WKT-Formatted option to Test Case View dialog
- Many new geometry functions added
- Geometry functions are displayed in tree
- Geometry functions can be implemented as Java static class methods.
- Geometry function classes can be loaded dynamically from command-line
- Improved handling of very large geometry inputs and results
- Threaded rendering allows display of very large geometries without limiting usability
- Added Draw Rectangle tool
- Added Drag-n-drop loading of .SHP files
- Added Info tool to provide persistent display of geometry point/segment information
- Added display of memory usage
Release Date: December 31, 2008
- Added
Geometry.reverse()
method for all geometry types - Added
setSrsName
,setNamespace
,setCustomRootElements
methods toGMLWriter
- Added
Envelope.getArea
method - Added
copy
,copyCoord
methods toCoordinateSequences
- Added
area
method toEnvelope
- Added
extractPoint(pt, offset)
methods toLengthIndexedLine
andLocationIndexedLine
- Added
CoordinatePrecisionReducerFilter
- Added
UnaryUnionOp(Collection, GeometryFactory)
constructor to handle empty inputs more automatically - Added
DiscreteHausdorffDistance
class - Made
LineMerger
able to be called incrementally - Added
GeometricShapeFactory.createArcPolygon
to create a polygonal arc - Enhanced
Geometry.buffer()
to preserve SRID
- Improved performance for
EdgeList
(by using a more efficient technique for detecting duplicate edges) - Improved performance for
ByteArrayInStream
(by avoiding use ofjava.io.ByteArrayInputStream
) - Unrolled intersection computation in
HCoordinate
to avoid object allocation - Improved performance for buffering via better offset curve generation and simplification.
- Improved performance for
IsValidOp
by switching to useSTRtree
for nested hole checking
- Fixed
Geometry.getClassSortIndex()
to lazily initialize the sorted class list. This fixes a threading bug. - Fixed
RectangleContains
to return correct result for points on the boundary of the rectangle - Fixed error in
com.vividsolutions.jts.simplify.LineSegmentIndex
which caused polygons simplified usingTopologyPreservingSimplifier
to be invalid in certain situations - Fixed error in
DouglasPeuckerSimplifier
which caused empty polygons to be returned when they contained a very small hole - Fixed
PackedCoordinateSequence
to returnNaN
for null ordinate values - Fixed
Geometry.centroid()
(CentroidArea
) so that it handles degenerate (zero-area) polygons - Fixed
Geometry.buffer()
(OffsetCurveBuilder
) so that it handles JOIN_MITRE cases with nearly collinear lines correctly - Fixed
GeometryFactory.toGeometry(Envelope)
to return a CW polygon - Fixed
UnaryUnionOp
to correctly handle heterogeneous inputs with P/L/A components - Fixed
UnaryUnionOp
to acceptLINEARRING
s - Fixed
CentroidArea
to handle zero-area polygons correctly - Fixed
WKBWriter
to always output 3D when requested, and to handle 2DPackedCoordinateSequences
correctly in this case - Fixed
NodedSegmentString
to handle zero-length line segments correctly (viasafeOctant
) - Cleaned up code to remove unneeded
CGAlgorithms
objects - Fixed
GeometricShapeFactory.createArc
to ensure arc has requested number of vertices
- Moved GML I/O classes into core JTS codebase
- Changed
GMLWriter
to not write thesrsName
attribute by default - In
DistanceOp
switched to usingnearestPoints
method names - Exposed
STRtree.getRoot()
method
- Added ability to read GML from input panel
- Added GML output to View dialog
- Added file drag'n'drop to Geometry Input text areas
- Add display of computation time
- Added Stats panel
- Added Scalar functions panel, with extensible function list
- Added Save as PNG...
- Added stream digitizing to Polygon and Line Draw tools
- Added
-testCaseIndex
command-line option
Release Date: January 2, 2008
- Added
Polygonal
,Lineal
,Puntal
tag interfaces to better categorize geometry classes - Added
Geometry.union()
method,UnaryUnionOp
class for efficient unioning of geometrys - Added
Triangle.area3D
method - Added
LineSegment.pointAlongOffset
method - Added
LineSegment.orientationIndex(Coordinate)
method - Added
PreparedGeometry
classes and methods to optimize some geometry functions in batch situations - Added
Envelope.covers
methods, for preciseness - Added
OctagonalEnvelope
class - Improved
CGAlgorithms.isPointInRing
method to handle case where point lies on the ring - Added
CGAlgorithms.locatePointInRing
method - Added
PointInAreaLocator
interface, enhancedSimplePointInAreaLocator
to extend this - Added
RayCrossingCounter
,IndexedPointInAreaLocator
classes for more efficient Point-In-Polygon testing - Added
GeometryCombiner
class - Enhanced
BufferOp
with join styles - Enhanced
WKTReader
to accept any case forNaN
number symbols - Added
WKTFileReader
class - Improved performance of
CoordinateList
constructors - Added
CascadedPolygonUnion
class - Added
LinearLocation.isOnSameSegment
method - Added
LinearLocation.getSegment
method - Added
LocationIndexedLine.indexOfAfter
method - Added interpolation of Z value to linear referencing methods
- Added methods to rotate around a given point to
AffineTransformation
- Allowed
GeometricShapeFactory
to be subclassed to add new shapes - Added
SineStarFactory
(primarily to support testing) - Added
SortedPackedIntervalRTree
class - Added
SegmentSetMutualIntersector
interface and implementations - Added
Node.remove(DirectedEdge)
method inplanargraph
package
- Improved performance for
SimplePointInAreaLocator
(by checking ring envelopes as a filter)
Geometry.buffer
operation fixed to always return polygonal geometries- Fixed bug in
Geometry.buffer(distance, quadrantSegs)
causing failure for some cases withquadrantSegs = 1
- Fixed bug in
GeometryFactory.toGeometry(Envelope)
which was returning invalid Polygons for "linear" envelopes - Fixed bug in
MonotoneChainBuilder
which caused failures in situations with segments of zero length - Fixed
PointLocator
to handle locating in Point geometries - Fixed
GeometricShapeFactory
to always use provided PrecisionModel - Fixed
LinearLocation.clone
method - Fixed
LinearLocation.isValid
method - Fixed
Polygonizer
to accept single-point linestrings (which are ignored)
- Deprecated
RobustCGAlgorithms
- Deprecated
BufferOp
cap style constants (these are now provided inBufferParameters
) - Removed
SIRPointInRing
- Added ability to specify GeometryOperation in XML file
- Added
BufferValidatedGeometryOperation
- Added ability to specify custom result matching via
resultMatcher
parameter in XML files - Added
BufferResultMatcher
- Improved rendering of geometries
- Improved symbology for orientation
- Simplified Geometry creation
- Improved vertex move/add
- Added tooltip for coordinate location
- Added more geometry functions
- Added Copy Result to Test button
- Restructured code for more flexibility, better Swing functionality
- Made it easier to add geometry functions
Release Date: December 19, 2006
- Improved robustness for overlay operations, via using geometry snapping
- Added
Angle
class - Added methods to
Triangle
class - Added
LineSegment.midPoint
method - Added ability to specify output of Z values to
WKTWriter
- Added
setFormatted
,setTab
,setMaxCoordinatesPerLine
methods toWKTWriter
- Added
BoundaryNodeRule
classes, and ability to specify a Boundary Node Rule inRelateOp
,IsSimpleOp
,BoundaryOp
- Added ability to get the failure location to
IsSimpleOp
- Added
BoundaryOp
with improved algorithm for lineal geometries. Changed lineal Geometry classes to use it. - Enhanced
Geometry
overlay methods to accept emptyGeometryCollections.
- Enhanced Error Handling for
WKTReader
- Added
CoordinateSequenceFilter
- Added
AffineTransformation
andAffineTransformationBuilder
- Changed API for
IsSimpleOp
(required to support returning failure location)
- Fixed bug in
GeometryFactory.buildGeometry
causing failure if input contained all GeometryCollections of the same subclass - Changed AssertFailure to TopologyException in
PolygonBuilder
- Improved correctness of
RobustLineIntersector
in certain cases where segment endpoints intersect - Eliminated duplicate method execution in
TestRunner
- Zoom tool can now draw zoom box as well as click
- Cut, Copy and Paste buttons for Input WKT
- added ability to specify custom Geometry Operations
- added ability to specify custom Geometry Operations
- Eliminated duplicate method execution
Release Date: June 22, 2006
- Added support for EWKB (SRIDs only) to
WKBReader
- Fixed bug in
CoordinateArrays.ptNotInList
. Changedpolygonize.EdgeRing
to used corrected code. - Fixed bug causing duplicate points in
ScaledNoder
- Fixed bug causing Null Pointer for empty geometries in
OraWriter
- Changed AssertFailure to TopologyException in
EdgeNode
Release Date: March 20, 2006
- Added Hex string conversion to
WKBReader
andWKBWriter
- Fixed null point cloning bug in
TopologyValidationError
(thanks to Markus Gebhard) - Fixed bug in
PointLocator
fix for LinearRings - Fixed bug in
Geometry.isValid
andIsValidOp
causing some valid polygons to be reported as having a Disconnected Interior (specifically, polygons containing holes touching at a single point, where the point is the highest point in the hole rings, and where the holes have a specific orientation) - Fixed bug in
Polygon.isRectangle
, which reported some valid rectangles as false
- Improved performance for
Geometry#withinDistance
(via short-circuiting)
- Dave Blasby
- Koen van Dijken
Release Date: December 7, 2005
- Added
JTSVersion
class to provide access to the API version information - Added
covers
andcoveredBy
predicates toGeometry
- Added
Geometry#buffer(distance, quadSegs, endCapStyle)
method to expose buffer end cap styles - Added
LineString#reverse
andMultiLineString#reverse
methods - Added
centre
,intersection
,translate
,expandBy(distance)
,expandBy(dx, dy)
methods toEnvelope
- Added
CollectionUtil
class for performing operations over collections - Added
CoordinateArrays
comparators - Added
CoordinateSequence#getDimension
- Added convenience methods
toPoint
andtoLineString
toWKTWriter
- Added WKB API (
WKBReader
andWKBWriter
classes incom.vividsolutions.jts.io
WKTReader
has better handling of numeric parsing, including support for scientific notation- Added
IsValidOp#setSelfTouchingRingFormingHoleValid
to allow validating SDE-style polygons - Added check for non-closed rings in
IsValidOp
- Added Linear Referencing API (
com.vividsolutions.jts.linearref
- Added
LineSequencer
class tocom.vividsolutions.jts.operation.linemerge
- Added
Subgraph
class tocom.vividsolutions.jts.planargraph
- Added
isRemoved
method toGraphComponent
- Added
ConnectedSubgraphFinder
class tocom.vividsolutions.jts.planargraph.algorithm
- Added
setVisited
,getComponentWithVisitedState
,setVisited
,getComponentWithVisitedState
methods tocom.vividsolutions.jts.planargraph.GraphComponent
- Added classes to perform Snap Rounding (in
com.vividsolutions.jts.noding.snapround
> - Improved buffering speed and robustness by using Snap Rounding
- Added buffer optimization for results with large numbers of polygons and/or holes
- Added
STRtree#query(Envelope, ItemVisitor)
method - Added
Debug#toLine
methods - Added
ConvexHull(Coordinate[])
constructor
- Fixed decimal formatting in
WKTWriter
to force a leading 0 in decimal numbers - Fixed bug in
CoordinateArraySequence#setOrdinate
- Fixed bug when checking validity of polygon with hole (
IsValidOp#checkHolesInShell
) - Improved correctness of computated intersections in
RobustLineIntersector
- Fixed bugs in
CoordinateList.clone
(thanks to Matthias Bobzien) - Fixed bug in
Envelope.equals
(thanks to John Cartwright) - Fixed
PointLocator
for LinearRings
- Improved performance for overlay operations (point inclusion, identical edge detection)
- Improved Convex Hull performance
- Added
SpatiaIndex#query(Envelope, ItemVisitor)
method signature - Added
CoordinateSequence#getDimension()
method signature - Marked
GeometryEditor.CoordinateOperation#edit(Geometry, GeometryFactory)
method asfinal
, to prevent incorrect use
- CoordinateArraySequence#setOrdinate now checks that the ordinate index is in range
Release Date: February 3, 2005
- Changed to using
CoordinateArraySequence
instead ofDefaultCoordinateSequence
(to provide a more descriptive name).
- PrecisionModel#makePrecise changed to use Symmetric Arithmetic Rounding rather than Banker's Rounding
- Added ability to enable
Debug
methods by setting a system property - Added
getNumGeometries
andgetGeometryN
methods to Geometry class, to make API more uniform - Improved API for
CoordinateSequence
allows more options for improving memory usage and handling custom coordinate storage methods - Added
PackedCoordinateSequence
to provide reduced memory footprint for geometry objects if desired - Added optimized spatial predicates for rectangles
- Added Debug#isDebugging method
- Fixed bug in
Geometry#within()
short circuiting - Fixed bug causing
Geometry#isValid
to throw IllegalArgumentException for certain kinds of holes with invalid rings - Fixed bug causing redundant linestrings to be returned in the result of overlaying polygons containing holes touching their shell.
Polygon#getBoundary
now returns aLinearRing
if the polygon does not have holes
- Removed a proliferation of references to the default
CoordinateSequenceFactory
- Andrea Aime
Release Date: September 22, 2004
This version is upwards compatible with Version 1.4
- None
- None
CGAlgorithms#isCCW
now handles coordinate lists with repeated points. Also throws an IllegalArgumentException if the input ring does not have 3 distinct pointsisValid
now checks for invalid coordinates (e.g. ones with Nan or infinite numbers)- added copyDeep() method to
CoordinateArrays
- added geometry simplification operations
DouglasPeuckerSimplifier
andTopologyPreservingSimplifier
- added methods to
Quadtree
andSTRtree
to remove items and query using the Visitor pattern
- Added short-circuit tests in geometry named predicates based on envelope tests
- Fixed bugs in
Geometry
serialization - Fixed bug in
ValidOp
which reported some MultiPolygons with shells nested inside a hole as invalid - Fixed bug in buffer which caused buffers of some polygons with small & large holes to not contain any holes
- Fixed bug in
Polygonizer
which caused exception if no lines were supplied
- Basic CG algorithm methods made static in the
CGAlgorithms
class - Various utility methods made public in
CoordinateArrays
class
- More examples provided in
com.vividsolutions.jtsexamples package
Release Date: November 4, 2003
- none
- Added "LINEARRING" tag to WKT syntax
- Added GeometryEditor class to allow easy copy/modify of Geometrys
- Added GeometricShapeFactory class to easily create standard geometric shapes
- Geometries can now carry arbitrary user-defined data objects (via Geometry#get/setUserData(Object) method)
- Added CoordinateSequence and CoordinateSequenceFactory interfaces, and default implementations (BasicCoordinateSequence, BasicCoordinateSequenceFactory)
- Added Geometry#getFactory
- Added new PrecisionModel type of FLOATING_SINGLE, for rounding to single precision floating point
- Added DistanceOp#getClosestPoints method, which returns the closest points between two Geometries
- Added com.vividsolutions.jts.noding package containing classes to perform fast indexed noding of linestrings
- Added com.vividsolutions.jts.operation.polygonize package containing classes to perform polygonization
- Added com.vividsolutions.jts.operation.linemerge package containing classes to perform line merging
- Added SimpleGeometryPrecisionReducer to allow reducing precision of coordinates of a Geometry
- Added LineSegment#closestPoints method to compute the closest points between two line segments
- Added MinimumDiameter class to compute minimum diameters of Geometries
- Added geom.Triangle class to contain algorithms for Triangles
- BufferOp now allows end cap styles to be specified. Three types are supported: round, butt and square.
- EdgeList now provides a findEqualEdge method which is substantially faster than findEdgeIndex, for large lists
- Buffering is now faster and much more robust
- Overlap operations are now more robust
- Envelope#init(Envelope) now handles null Envelopes correctly
- CoordinateList#add() now correctly ignores the z-value of Coordinates in determining equality
- Geometry#isValid now correctly handles checking validity of LinearRings
- Fixed infinite loop bug causing Out Of Memory errors during polygon intersection
- Geometry#clone now correctly clones the Geometry's Envelope
- LineIntersector#computeEdgeDistance now correctly computes a non-zero edge distance in certain situations when a fixed precision model was being used and the line segment was a single unit in length
- Fixed incorrect calculation of depths in DirectedEdgeStar#computeDepths
- Fixed BufferSubgraph#addReachable to use explicit stack to avoid stack overflow problems
- Fixed various bugs causing some kinds of buffers to be computed incorrectly
- WKTReader/Writer: changed protected members to private
- PrecisionModel type is now an object rather than an int
- ConvexHull API changed to remove requirement to pass in CGAlgorithms object
- geom.util package added for utility classes which parse and modify geometries
- More examples provided in com.vividsolutions.jtsexamples package
- Added JTS Developers Guide
Release Date: April 4, 2003
- all Geometry methods are now reentrant (thread-safe)
- Fixed-precision coordinates are now stored in a rounded but non-scaled form. This makes them compatible with non-precise (Floating) coordinates, and simplifies working with precise coordinates directly. Mixed precision models are now supported in Geometry methods; method results are in the more precise of the input precision models.
- Offsets are no longer supported in the Fixed precision model. This is necessary to allow storing fixed precision coordinates in a non-scaled form. This does not reduce the total precision available, since coordinates are stored in a floating-point format.
- SRID and Precision Model are no longer checked for equality during Geometry operations. This removes a limitation which provided little semantic benefit.
- added Geometry.isWithinDistance(Geometry g, double distance) method, to provide optimized proximity queries
- added Geometry.buffer(double distance, int quadrantSegments) method, allowing control over accuracy of buffer approximation
- added Geometry.getCentroid() method
- added Geometry.getInteriorPoint() method, which uses heuristic methods to return a point in the interior of a Geometry
- GeometryFactory.toGeometryArray now returns null if the argument is null
- Removed unnecessary string construction in EdgeEndStar.propagateSideLabels()
- Eliminated unnecessary computation of self-intersections in rings during relate and spatial functions. This provides a large increase in speed when working with large rings and polygons. (Note that IsValid still checks for these self-intersections, which are illegal in LinearRings)
- Add short-circuit code to RobustLineIntersector to detect non-intersections more efficiently
- Fixed ClassCastException occurring in GeometryCollection.getLength()
- Fixed bug in Edge Intersection insertion (replaced Coordinate#equals with equals2D to ensure that intersection creation is not sensitive to Z-value).
- Fixed handling LineStrings with too few points in GeometryGraph.addLineString
- Fixed: was not checking that MultiPolygons don't contain components with too few points.
- Fixed Envelope.distance() to return correct distance for all envelopes.
- Fixed a few Geometry methods to make them re-entrant.
- Fixed CoordinateList.closeRing() to ensure endpoints are not duplicated
- Fixed CGAlgorithms.signedArea() to use a simpler algorithm which is more robust and faster.
- Fixed bug preventing validating Rings containing an initial repeated point.
- Added default constructor to WKTReader. It uses the default GeometryFactory
- Add two static intersects() methods to Envelope, to allow computing intersections with envelopes defined by points only.
- Dropped BinaryPower; its functionality is provided by DoubleBits in a more robust fashion.
- Removed a couple of redundant private static methods from Geometry; they have been replaced by methods in CoordinateArrays
- The Geometry class is now marked as Serializable
Release Date: 7 October 2002
- JTS now allows Geometrys to have repeated points. All operations will continue to perform as before. This removes a significant incompatibility with the OGC spatial data model.
- TopologyExceptions may now be thrown by spatial overlay methods. This helps to distinguish between code bugs and known robustness problems. It also provides a machine-readable coordinate for the error location.
- RobustLineIntersector now uses "normalized" coordinates to maximize the accuracy of intersection computation.
- Upgraded Quadtree with more robust implementation
- Replaced IntervalTree with a more robust implementation of BinTree
- Added STRTree 2-D spatial index, which exhibits better performance than QuadTrees in many situations.
- Added EnhancePrecisionOp, which uses precisioning enhancing techniques to reduce the number of failure cases due to robustness problems.
- fixed ConvexHull to use TreeSet instead of HashSet for coordinates
- Fixed isValid for GeometryCollections containing Polygons, which were sometimes erroneously returning a validity failure for correct Geometrys.
- Fixed bug in LineSegment.distancePointLine() which would return the incorrect distance for a LineSegment with two identical points
- Improved error handling in CGAlgorithms.isCCW()
- IsValid now checks for too few points in a geometry component (e.g. due to repeated points in a ring)
- added Stopwatch class
- added Geometry.getArea() and Geometry.getLength() methods
- added CGAlgorithms.signedArea() method
- added methods to LineSegment - closestPoint(), getLength()
- added CoordinateArrrays and CoordinateLists utility classes
- Added TopologyValidationError.getErrorType() method
- Added Envelope#intersects; deprecated Envelope#overlaps.
- Added Geometry#geometryChanged() method to allow signaling when Geometry coordinates have been mutated by a client class
- Added STRTree class implementing a Sort-Tile-Recursive spatial index (a variant of a packed R-tree)
- Deleted IntervalTree 1-D spatial index (replaced by BinTree)
- Add BinTree 1-D spatial index
Release Date: 9 April 2002
- fixed decimal-point symbol localization bug in WKTWriter
- fixed bug in Envelope.int(Envelope env)
- fixed filename case of SFSMultiLineString.java and IntervalTree.java
- deleted TopologyException class
- renamed CGAlgorithms.isPointInPolygon to isPointInRing (a more accurate description of what the method computes)
- added Geometry.getCoordinate() method
- added Geometry.distance() method
- added GeometryComponentFilter interface and Geometry.apply(GeometryComponentFilter) method
Release Date: 28 March 2002
- added Geometry.isSimple() and Geometry.isValid() methods
- improved design of topological data structures
- added Geometry.setSRID() method
- improved functionality of the Envelope class
- added ability to write to an arbitrary java.io.Writer object to WKTWriter
- added Validate and Mark Location functionality to TestBuilder
Release Date: 1 February 2002
- Removed some non-compatibilities with Java 1.1
- Fixed bug in constructing buffer outline around inside of angles
- In TestBuilder vertices are now displayed with fixed size in view units
- Improved code for WKTWriter.writeFormatted()
- Fixed bug in constructor for LinearRing
- Improved implementation of sweepline intersection algorithm to avoid use of dynamic set.
- Fixed bug in ConvexHull.cleanRing()
- Refactored RobustLineIntersector and NonRobustLineIntersector
Release Date: 30 May 2001
Baseline version