Object.clone() methods superseded with copy()Envelope.compareTo method
SegmentSetMutualIntersector classes to
be thread-safe
PreparedGeometry classes to be
thread-safe
LineDissolver class
edgegraph package
CoordinateSequences.isEqual method
CoordinateSequences.copy and CoordinateSequences.copy
to handle inputs of different dimension
CoordinateArrays.envelope() function
CoordinateArrays.intersection() function
Polygonizer.setCheckValidRings() method
for optimizing performance in some situations
KMLWriter to convert Geometry to KML
representation
Coordinate equals3D, equals2D(Coordinate,
tolerance), and equalInZ methods.
VWSimplifier to perform
Visvalingam-Whyatt simplification
WKBReader to handle Spatialite WKB
format
DD.setValue() methods
getGeometry() methods to LinearComponentExtracter
and LineStringExtracter
BufferParameters simplifyFactor
setting
InteriorIntersectionFinder
Polygonizer functionality to extract
only polygons forming a valid polygonal geometry
KdTree.toCoordinates
MinimumBoundingCircle.getFarthestPoints method
PreparedPolygonIntersects
by short-circuiting point input case
CascadedPolygonUnion,
by avoiding retaining input collection
Point.isEmpty() to avoid allocating a
coordinate
Geometry.equalsExact() to short-circuit
when the inputs are identical objects
PointExtracter to improve
performance for Points
RobustLineIntersector heuristic for
handling invalid intersection points (computed as outside envelope
of input segments due to numeric precision issues)
CGAlgorithmsDD.intersection to compute
intersection correctly
Geometry.interiorPoint() to compute a
true interior point in certain cases
Geometry.equals to handle null argument
DistanceToPoint to be thread-safe
Geometry.interiorPoint() and InteriorPointArea
to handle zero-area geometries
STRtree classes to be thread-safe (by
synchronizing the AbstractSTRtree.build() method)
STRtree.remove() method to avoid a NPE
DouglasPeuckerSimplifier and TopologyPreservingSimplifier
to handle empty geometry components in the input
ConvexHull to handle input of array of
identical coordinates
GeometryTransformer.transformLinearRing()
to handle null inputs
extractPoint(distance, offset)
methods in LocationIndexedLine and LengthIndexedLine
to handle offsets from endpoints correctly.
GeometryCollectionIterator to correctly
handle atomic geometries
InteriorIntersectionFinder to not
short-circuit when finding all nodes
SubgraphDepthLocator to work with Java
7+ by avoiding sorting with an inconsistent ordering
FontGlyphReader to use correct Java font value of "SansSerif", and added new constant to match.
KdTree to correctly implement distance tolerance-based coordinate matching
LineString.normalize() to correctly handle CoordinateSequences
CommonBitsRemover to correctly handle CoordinateSequences
CoordinateArraySequence.clone()
SegmentSetMutualIntersector
to support thread-safety by removing state
InteriorIntersectionFinderAdder to
replace the poorly named IntersectionFinderAdder
com.vividsolutions.jts.operation.buffer
to be package-private
GeometryTestCase base class to simplify
unit tests
GeoJsonReader and GeoJsonWriter classes
OraWriter the connection is now provided to
the write() method, not the constructors
OraReader to handle reading GeometryCollection
with Point as second element
OraWriter.setOptimizePoint and OraWriter.setOptimizeRectangle
methods
GeometryFactory.createGeometry() to
make a deep copy of the argument Geometry, using the
CoordinateSequenceFactory of the factory
CoordinateArraySequence
Geometry.getEnvelopeInternal() to
return a copy of the cached envelope, to prevent modification
GeometryEditor.CoordinateSequenceOperation
to allow easy editing of constituent CoordinateSequences
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
RectangleLineIntersector to provide
efficient rectangle-line intersection testing
getOrdinate and setOrdinate
to Coordinate
Quadtree is Serializable
STRtree is Serializable
max, average and wrap
functions to MathUtil
WKTReader parse error reporting to
report input line of error
WKBReader to repair
structurally-invalid input
TopologyPreservingSimplifier thread-safe
AbstractSTRtree.isEmpty() method
QuadTree.isEmpty() method
KdTree.isEmpty() method
ShapeWriter.
ScaledNoder now preserves Z values of input
Triangle static
methods
CGAlgorithmsDD containing high-precision
versions of some basic CG algorithms
IntersectionMatrix.isTrue() method for
testing IM pattern matches
getRawCoordinates methods to PackedCoordinateSequence
concrete classes
Geometry.isSimple() to explicity
check for simplicity for all types, and support GeometryCollections
MCIndexSnapRounder to add nodes only
where they are necessary
CoordinateArrays.removeNull() method
GeometryEditor to handle null
geometries returned from operation
WKBHExFileReader
Distance3D operation
RectangleIntersects
by using new RectangleLineIntersector
RandomPointsInGridBuilder eliminated
redundant ArrayList usage
PreparedPolygonIntersects and PreparedLineStringIntersects
added check to avoid creating segment index if all test inputs are
points
AbstractSTRtree switched to using indexed
list access for better performance than using iterators
AbstractSTRtree freed inserted item array
after index is built
Polygonizer for cases
with many potential holes
DD methods by
making them final
CGAlgorithmsDD.orientationIndex,
and switched to self-operations for DD determinant
STRtree.createNode() to use a static
class for nodes
QuadTree Node to use scalar x and y
variables rather than a Coordinate to reduce memory
allocation
PreparedGeometry concrete classes to be
thread-safe.
SortedPackedIntervalRTree so that it is
thread-safe.
CGAlgorithms.distanceLineLine() improved to be
more robust and performant
Empty Stack
failure in ConvexHull for some nearly collinear inputs
CGAlgorithms.signedArea() uses a more accurate
algorithm
Geometry.equalsExact() to avoid NPE when
comparing empty and non-empty Points
CascadedPolygonUnion to discard
non-polygonal components created during unioning, to avoid failures
and provide more desirable behaviour
CentralEndpointIntersector to initialize
result correctly
DelaunayTriangulationBuilder.extractUniqueCoordinates(Geometry)
to avoid mutating the vertex order of the input Geometry
ConformingDelaunayTriangulationBuilder
to allow non-disjoint site and constraint vertex sets
RandomPointsInGridBuilder point
generation to use circle constraint correctly
LocationIndexedLine and LengthIndexLine
which was causing an assertion failure when the indexOfAfter()
method was called with a constraint location which is at the end of
the line
STRtree.query(Envelope,
ItemVisitor) causing an NPE when tree is empty
TopologyPreservingSimplifier to return a
valid result for closed LineStrings with large
distance tolerances
TopologyPreservingSimplifier to return
an empty result for an empty input
DouglasPeuckerSimplifier to return an
empty result for an empty input
MinimumBoundingCircle to correctly
compute circle for obtuse triangles.
GeometryPrecisionReducer to use input
GeometryFactory when polygon topology is fixed
GeometryNoder bug that was failing to
snap to end vertices of lines
Geometry.getCentroid() and Geometry.getInteriorPoint()
to return POINT EMPTY for empty inputs
DelaunayTriangulationBuilder to
correctly extract unique points
KdTree to correctly handle inserting
duplicate points into an empty tree
LineSegment.projectionFactor() to handle
zero-length lines (by returning Double.POSITIVE_INFINITY)
LocationIndexedLine to handle locations
on zero-length lines
LengthIndexedLine and LocationIndexedLine
to handle indexOfAfter() correctly
WKBReader to handle successive geometrys
with different endianness
GeometricShapeFactory to correctly
handle setting the centre point
GeometryFactory.createMultiPoint(CoordinateSequence)
to handle sequences of dimension > 3
TaggedLineStringSimplifier
back to public due to user demand
PerformanceTestRunner
and PerformanceTestCase)
Geometry
equality:
equals(Object) is a synonym for equalsExact(Geometry)
equalsNorm(Geometry) automatically normalizes
the operands
equalsTopo(Geometry) computes topological
equality, and is a synonym for the original equals(Geometry)
Geometry.norm() to provide non-mutating
normalization
Geometry.hashCode() to fulfill Java
conventions
LineIntersector.getEndpoint() method
CoordinateSequences to test
for and create valid rings
minExtent and maxExtent to
Envelope
BufferOp and BufferParameters)
GeometryPrecisionReducer
WKBWriter
(thanks to Justin Deoliviera)
PolygonShape to support
floating-point coordinates
GeometryShapeFactory.setRotation(double
radians) method
GeometricShapeBuilder API to support
shape builder development
RandomPointsBuilder to allow generating
various random point sets
RandomPointsInGridBuilder to allow
generating various random point sets constrained to a grid
KochSnowflakeBuilder
SierpinskiCarpetBuilder
MathUtil containing mathematics and
numerical utility functions
Vector2D class providing vector
operations
DirectedEdgeStar.getNextCWEdge() method
to planargraph API
AffineTransformation enhanced to avoid numeric
precision issues in case of reflection in X=Y (coordinate flipping)
LineSequencer.sequence() static
convenience method
BufferDistanceValidator
and BufferResultValidator
MinimumClearance class
nearestNeighbours methods to STRtree
ShapeWriter
conversions (by tuning coordinate and polygon conversion)
RectangleIntersects by
refining SegmentIntersectionTester
RectangleIntersects to always use
segment-scanning to improve robustness
com.vividsolutions.jts.geom.prep
com.vividsolutions.jts.simplify
Matrix class into jts.math
package
com.vividsolutions.jts.operation.buffer
package
CoordinateArraySequence and PackedCoordinateSequence
to correctly handle Z ordinate in getCoordinate(int,
Coordinate)
LinearRing to have isClosed()
return true for empty rings
Geometry.union() to use more robust
union algorithm. This provides behaviour consistent with union(Geometry).
Point.isValid() to validate POINT EMPTY
correctly
SnapIfNeededOverlayOp to throw the
originating exception,which contains meaningful coordinates
GeometrySnapper to allow final vertices
of LineStrings to snap correctly
OffsetCurveSetBuilder) to handle
"flat" rings correctly
IsValidOp to handle reporting "Not
Closed" errors on empty rings correctly
NestedRingTester (used by IsValidOp)
to correctly handle the case where a hole touches all the vertices
of another hole (which is invalid)
ConvexHull to handle large geometries
with fewer than 3 unique points
GeometryGraph to ignore empty hole rings
when building graph
LineMerger to skip lines with only a
single unique coordinate
ByteArrayInStream to pad byte buffers
with zeroes
SquarePointShapeFactory
KdTree
MasterTester to include more unit
tests
[Zoom To Result] button
CoordinateArrays.isRing
CGAlgorithms.signedArea(CoordinateSequence)
CoordinateArrays.copyDeep(...) method to
copy sections of arrays
CoordinateList.add(Coordinate[],
boolean, int, int) method to add sections of arrays
LineSegment.toGeometry(), LineSegment.lineIntersection()()
LineSegment.hashCode()
HausdorffSimilarityMeasure,
AreaSimilarityMeasure)
MinimumDiameter.getMinimumRectangle()
MinimumBoundingCircle class
Densifier class
QuadEdgeSubdivision,
IncrementalDelaunayTriangulator, ConformingDelaunayTriangulator
and supporting classes
VoronoiDiagramBuilder to perform Voronoi
diagram generation
scaleInstance(scaleX, scaleY, x, y) to AffineTransformation
AffineTransformationFactory to allow
generating transformations from various kinds of control inputs
BinTree.remove() method
BinTree.query() to allow null interval
arguments
ShapeReader API to convert Java2D Shapes
into JTS Geometry
ShapeWriter API to convert JTS geometry
into Java2D Shapes
FontGlyphReader API to render Java2D
text font glyphs into geometry
SdeReader to jtsio library
Debug break methods
Memory utility for reporting memory
statistics
ObjectCounter utility for counting
objects
createSquircle and createSuperCircle
to GeometricShapeFactory
Geometry.getArea() and
Geometry.getLength() when used with custom CoordinateSequences
WKBWriter.bytesToHex in favour of WKBWriter.toHex
to regularize and simplify method name
Geometry.distance() and DistanceOp
to return 0.0 for empty inputs
Buffer to handle degenerate polygons
with too few distinct points correctly
LineSegment.pointAlongOffset()
BufferSubgraph to
handle certain robustness failures correctly
OffsetCurveBuilder
in computing mitred joins for nearly parallel segments
BufferInputLineSimplifier
which prevented simplification of some situations
BufferInputLineSimplifier which
caused over-simplification for large tolerances
Angle.normalizePositive to handle
values 2PI correctly
WKTWriter to emit correct syntax for
MULTIPOINTs
WKTReader to accept correct syntax for
MULTIPOINTs
CGAlgorithms.isCCW now checks for too few
points in the ring and throws an IllegalArgumentException
AffineTransformation#eqals (logic
bug)
CoordinateList#closeRing (cloning
closing Coordinate)
Geometry.reverse() method for all
geometry types
setSrsName, setNamespace, setCustomRootElements
methods to GMLWriter
Envelope.getArea method
copy, copyCoord methods to
CoordinateSequences
area method to Envelope
extractPoint(pt, offset) methods to LengthIndexedLine
and LocationIndexedLine
CoordinatePrecisionReducerFilter
UnaryUnionOp(Collection,
GeometryFactory) constructor to handle empty inputs more
automatically
DiscreteHausdorffDistance class
LineMerger able to be called
incrementally
GeometricShapeFactory.createArcPolygon
to create a polygonal arc
Geometry.buffer() to preserve SRID
EdgeList (by using a
more efficient technique for detecting duplicate edges)
ByteArrayInStream (by
avoiding use of java.io.ByteArrayInputStream)
HCoordinate
to avoid object allocation
IsValidOp by
switching to use STRtree for nested hole checking
Geometry.getClassSortIndex() to lazily
initialize the sorted class list. This fixes a threading bug.
RectangleContains to return correct
result for points on the boundary of the rectangle
com.vividsolutions.jts.simplify.LineSegmentIndex
which caused polygons simplified using TopologyPreservingSimplifier
to be invalid in certain situations
DouglasPeuckerSimplifier which
caused empty polygons to be returned when they contained a very
small hole
PackedCoordinateSequence to return NaN
for null ordinate values
Geometry.centroid() (CentroidArea)
so that it handles degenerate (zero-area) polygons
Geometry.buffer() (OffsetCurveBuilder)
so that it handles JOIN_MITRE cases with nearly collinear lines
correctly
GeometryFactory.toGeometry(Envelope) to
return a CW polygon
UnaryUnionOp to correctly handle
heterogeneous inputs with P/L/A components
UnaryUnionOp to accept LINEARRINGs
CentroidArea to handle zero-area
polygons correctly
WKBWriter to always output 3D when
requested, and to handle 2D PackedCoordinateSequences
correctly in this case
NodedSegmentString to handle zero-length
line segments correctly (via safeOctant)
CGAlgorithms
objects
GeometricShapeFactory.createArc to
ensure arc has requested number of vertices
GMLWriter to not write the srsName
attribute by default
DistanceOp switched to using nearestPoints
method names
STRtree.getRoot() method
-testCaseIndex command-line option
Polygonal, Lineal, Puntal
tag interfaces to better categorize geometry classes
Geometry.union() method, UnaryUnionOp
class for efficient unioning of geometrys
Triangle.area3D method
LineSegment.pointAlongOffset method
LineSegment.orientationIndex(Coordinate)
method
PreparedGeometry classes and methods to
optimize some geometry functions in batch situations
Envelope.covers methods, for preciseness
OctagonalEnvelope class
CGAlgorithms.isPointInRing method to
handle case where point lies on the ring
CGAlgorithms.locatePointInRing method
PointInAreaLocator interface, enhanced SimplePointInAreaLocator
to extend this
RayCrossingCounter, IndexedPointInAreaLocator
classes for more efficient Point-In-Polygon testing
GeometryCombiner class
BufferOp with join styles
WKTReader to accept any case for NaN
number symbols
WKTFileReader class
CoordinateList
constructors
CascadedPolygonUnion class
LinearLocation.isOnSameSegment method
LinearLocation.getSegment method
LocationIndexedLine.indexOfAfter method
AffineTransformation
GeometricShapeFactory to be subclassed
to add new shapes
SineStarFactory (primarily to support
testing)
SortedPackedIntervalRTree class
SegmentSetMutualIntersector interface
and implementations
Node.remove(DirectedEdge) method in planargraph
package
SimplePointInAreaLocator
(by checking ring envelopes as a filter)
Geometry.buffer operation fixed to always
return polygonal geometries
Geometry.buffer(distance,
quadrantSegs) causing failure for some cases with quadrantSegs
= 1
GeometryFactory.toGeometry(Envelope)
which was returning invalid Polygons for "linear" envelopes
MonotoneChainBuilder which caused
failures in situations with segments of zero length
PointLocator to handle locating in Point
geometries
GeometricShapeFactory to always use
provided PrecisionModel
LinearLocation.clone method
LinearLocation.isValid method
Polygonizer to accept single-point
linestrings (which are ignored)
RobustCGAlgorithms
BufferOp cap style constants (these
are now provided in BufferParameters)
SIRPointInRing
BufferValidatedGeometryOperation
resultMatcher
parameter in XML files
BufferResultMatcher
Angle class
Triangle class
LineSegment.midPoint method
WKTWriter
setFormatted, setTab, setMaxCoordinatesPerLine
methods to WKTWriter
BoundaryNodeRule classes, and ability to
specify a Boundary Node Rule in RelateOp, IsSimpleOp,
BoundaryOp
IsSimpleOp
BoundaryOp with improved algorithm for
lineal geometries. Changed lineal Geometry classes to use it.
Geometry overlay methods to accept
empty GeometryCollections.
WKTReader
CoordinateSequenceFilter
AffineTransformation and AffineTransformationBuilder
IsSimpleOp (required to
support returning failure location)
GeometryFactory.buildGeometry
causing failure if input contained all GeometryCollections of the
same subclass
PolygonBuilder
RobustLineIntersector
in certain cases where segment endpoints intersect
TestRunner
WKBReader
CoordinateArrays.ptNotInList.
Changed polygonize.EdgeRing to used corrected code.
ScaledNoder
OraWriter
EdgeNode
WKBReader and WKBWriter
TopologyValidationError
(thanks to Markus Gebhard)
PointLocator fix for LinearRings
Geometry.isValid and IsValidOp
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)
Polygon.isRectangle, which
reported some valid rectangles as false
Geometry#withinDistance
(via short-circuiting)
JTSVersion class to provide access to
the API version information
covers and coveredBy
predicates to Geometry
Geometry#buffer(distance, quadSegs,
endCapStyle) method to expose buffer end cap styles
LineString#reverse and MultiLineString#reverse
methods
centre, intersection, translate,
expandBy(distance), expandBy(dx, dy)
methods to Envelope
CollectionUtil class for performing
operations over collections
CoordinateArrays comparators
CoordinateSequence#getDimension
toPoint and toLineString
to WKTWriter
WKBReader and WKBWriter
classes in com.vividsolutions.jts.io
WKTReader has better handling of numeric
parsing, including support for scientific notation
IsValidOp#setSelfTouchingRingFormingHoleValid
to allow validating SDE-style polygons
IsValidOp
com.vividsolutions.jts.linearref
LineSequencer class to com.vividsolutions.jts.operation.linemerge
Subgraph class to com.vividsolutions.jts.planargraph
isRemoved method to GraphComponent
ConnectedSubgraphFinder class to com.vividsolutions.jts.planargraph.algorithm
setVisited, getComponentWithVisitedState,
setVisited, getComponentWithVisitedState
methods to com.vividsolutions.jts.planargraph.GraphComponent
com.vividsolutions.jts.noding.snaproundSTRtree#query(Envelope, ItemVisitor)
method
Debug#toLine methods
ConvexHull(Coordinate[]) constructor
WKTWriter to force
a leading 0 in decimal numbers
CoordinateArraySequence#setOrdinate
IsValidOp#checkHolesInShell)
RobustLineIntersector
CoordinateList.clone (thanks to
Matthias Bobzien)
Envelope.equals (thanks to John
Cartwright)
PointLocator for LinearRings
SpatiaIndex#query(Envelope, ItemVisitor)
method signature
CoordinateSequence#getDimension() method
signature
GeometryEditor.CoordinateOperation#edit(Geometry,
GeometryFactory) method as final, to prevent
incorrect use
CoordinateArraySequence
instead of DefaultCoordinateSequence (to provide a
more descriptive name).
Debug methods by
setting a system property
getNumGeometries and getGeometryN
methods to Geometry class, to make API more uniform
CoordinateSequence allows
more options for improving memory usage and handling custom
coordinate storage methods
PackedCoordinateSequence to provide
reduced memory footprint for geometry objects if desired
Geometry#within() short
circuiting
Geometry#isValid to throw
IllegalArgumentException for certain kinds of holes with invalid
rings
Polygon#getBoundary now returns a LinearRing
if the polygon does not have holes
CoordinateSequenceFactory
This version is upwards compatible with Version 1.4
CGAlgorithms#isCCW now handles coordinate
lists with repeated points. Also throws an IllegalArgumentException
if the input ring does not have 3 distinct points
isValid now checks for invalid coordinates
(e.g. ones with Nan or infinite numbers)
CoordinateArrays
DouglasPeuckerSimplifier
and TopologyPreservingSimplifier
Quadtree and STRtree
to remove items and query using the Visitor pattern
Geometry serialization
ValidOp which reported some
MultiPolygons with shells nested inside a hole as invalid
Polygonizer which caused
exception if no lines were supplied
CGAlgorithms
class
CoordinateArrays
class
com.vividsolutions.jtsexamples
package
Baseline version