<html>

<head>
<title>JTS Version History</title>
</head>

<body bgcolor='#DFF0FF'>
<h1 style='text-align:center; color:darkblue;'>
JTS TOPOLOGY SUITE
<br>
<i>Version History</i>
</h1>

This document lists the change history of release versions of the
<span style='color:darkblue;'><b>JTS Topology Suite</b></span>.
<ul>
<li>Project site: <a href='http://locationtech.org/projects/technology.jts'><b>LocationTech JTS </b></a>
<li>Code repo: <a href='https://github.com/locationtech/jts'><b>Github JTS</b></a>
<li>Distribution: <a href='https://github.com/locationtech/jts/releases'><b>Github JTS Releases</b></a>
</ul>
<p>
The JTS distributions for older versions can be obtained at the
<a href='http://sourceforge.net/projects/jts-topo-suite/'><b>SourceForge JTS site</b></a>.
</p>
<!-- ================================================================ -->
<hr size='4' color='darkblue'>
<h2>Version 1.15</h2>

<i>Release Date:  November 30, 2017</i>

<h3>Project Changes</h3>
<ul>
<li>Changed licensing to dual-licensed EDL or EPL
<li>Changed source hosting to GitHub
<li>Changed distro hosting to GitHub
<li>Changed build chain to use Maven
<li>Changed code module structure
</ul>

<h3>API Changes</h3>
<ul>
<li>Changed Java package root to <code>org.locationtech.jts</code>
<li>Refactored <code>CGAlgorithms</code> into function-specific classes
    <code>Orientation</code>, <code>PointLocation</code>, <code>Distance</code>, <code>Length</code>, <code>Area</code>
<li>Deprecated <code>NonRobustCGAlgorithms</code>; use function-specific classes refactored from <code>CGAlgorithms</code>
<li>Deprecated <code>RobustDeterminant</code>; use <code>CGAlgorithmsDD</code>
<li>Deprecated <code>Geometry.clone</code>; use <code>Geometry.copy</code>
<li>Deprecated <code>GeometryFactory.createX(null)</code> methods; Use no-argument <code>GeometryFactory.createX</code> methods
<li>Deprecated overloaded <code>GeometryFactory.createMultiPoint</code>; use <code>GeometryFactory.createMultiPointFromCoords</code>
</ul>

<h3>Functionality Improvements</h3>
<ul>
<li>Improve <code>Quadtree</code> to handle queries with null envelopes
<li>Add <code>STRtree</code> K-Nearest Neighbours query
<li>Add <code>Serializable</code> to </code><code>PackedCoordinateSequence</code> 
<li>Add <code>Envelope.intersects</code>
<li>Add <code>Geometry.intersects</code> for <code>GeometryCollection</code>
<li>Improve <code>WKBReader</code> to handle the OGC 06-103r4 specification.
<li>Improve <code>WKTReader</code> to handle <code>Z</code>, <code>M</code>, <code>ZM</code> modifiers.
</ul>

<h3>Performance & Robustness Improvements</h3>
<ul>
<li>Add optimization for <code>Geometry.contains</code> and <code>Geometry.covers</code>
<li>Improve robustness of <code>RayCrossingCounter</code> and <code>Geometry.contains</code>
<li>Improve robustness of <code>MultiPolygon</code> centroid computation
<li>
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Eliminated <code>LineString.normalize</code> side-effects
</ul>

<!------- TestBuilder -------------------->
<hr size='0' color='darkblue'>
<h3 style='font-family:sans-serif; color:darkblue'>JTS TestBuilder</h3>

<h3>Functionality Improvements</h3>
<ul>
<li>Added function <code>Writer.writeGeoJSON</code>
<li>Added tree view of scalar functions
<li>Added ability to repeat functions
<li>Added custom fill styling
<li>Added <code>SelectionFunctions</code> for metrics (area, length) 
<li>Added function documentation driven by annotations
<li>Some changes to layout of GUI elements (such as toolbar)
</ul>

<!-- ================================================================ -->
<hr size='4' color='darkblue'>
<h2>Version 1.14</h2>

<i>Release Date:  September 23, 2015</i>

<h3>Functionality Improvements</h3>
<ul>
<li>Added <code>Envelope.compareTo</code> method
<li>Fixed <code>SegmentSetMutualIntersector</code> classes to be thread-safe</li>
<li>Fixed <code>PreparedGeometry</code> classes to be thread-safe</li>
<li>Added <code>LineDissolver</code> class
<li>Added <code>edgegraph</code> package
<li>Added <code>CoordinateSequences.isEqual</code> method
<li>Extended <code>CoordinateSequences.copy</code> and <code>CoordinateSequences.copy</code> to handle inputs of different dimension
<li>Added <code>CoordinateArrays.envelope()</code> function
<li>Added <code>CoordinateArrays.intersection()</code> function
<li>Added <code>Polygonizer.setCheckValidRings()</code> method for optimizing performance in some situations
<li>Added <code>KMLWriter</code> to convert Geometry to KML representation
<li>Added <code>Coordinate</code> <code>equals3D</code>, <code>equals2D(Coordinate, tolerance)</code>, and <code>equalInZ</code> methods.
<li>Added <code>VWSimplifier</code> to perform Visvalingam-Whyatt simplification
<li>Enhanced <code>WKBReader</code> to handle Spatialite WKB format
<li>Added <code>DD.setValue()</code> methods
<li>Added <code>getGeometry()</code> methods to <code>LinearComponentExtracter</code> and <code>LineStringExtracter</code>
<li>Added <code>BufferParameters</code> </code>simplifyFactor</code> setting
<li>Added node counting and ability to not keep intersection points to <code>InteriorIntersectionFinder</code>
<li>Added <code>Polygonizer</code> functionality to extract only polygons forming a valid polygonal geometry
<li>Added <code>KdTree.toCoordinates</code>
<li>Added <code>MinimumBoundingCircle.getFarthestPoints</code> method
</ul>

<h3>Performance Improvements</h3>
<ul>
<li>Performance & memory improvement in <tt>PreparedPolygonIntersects</tt> by short-circuiting point input case
<li>Allow for memory usage optimization in <code>CascadedPolygonUnion</code>, by avoiding retaining input collection
<li>Fix <code>Point.isEmpty()</code> to avoid allocating a coordinate
<li>Fix <code>Geometry.equalsExact()</code> to short-circuit when the inputs are identical objects
<li>Add short-circuit to <code>PointExtracter</code> to improve performance for Points
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed <code>RobustLineIntersector</code> heuristic for handling invalid intersection points
(computed as outside envelope of input segments due to numeric precision issues)
<li>Fixed <code>CGAlgorithmsDD.intersection</code> to compute intersection correctly
<li>Fixed <tt>Geometry.interiorPoint()</tt> to compute a true interior point in certain cases
<li>Fixed <code>Geometry.equals</code> to handle null argument
<li>Fixed <code>DistanceToPoint</code> to be thread-safe
<li>Fixed <code>Geometry.interiorPoint()</code> and <code>InteriorPointArea</code> to handle zero-area geometries
<li>Fixed <code>STRtree</code> classes to be thread-safe (by synchronizing the <code>AbstractSTRtree.build()</code> method)
<li>Fixed <code>STRtree.remove()</code> method to avoid a NPE
<li>Fixed <code>DouglasPeuckerSimplifier</code> and <code>TopologyPreservingSimplifier</code> to handle empty geometry components in the input
<li>Fixed <code>ConvexHull</code> to handle input of array of identical coordinates
<li>Fixed <code>GeometryTransformer.transformLinearRing()</code> to handle null inputs
<li>Fixed the <code>extractPoint(distance, offset)</code> methods in
  <code>LocationIndexedLine</code> and <code>LengthIndexedLine</code> to handle offsets from endpoints correctly.
<li>Fixed <code>GeometryCollectionIterator</code> to correctly handle atomic geometries
<li>Fixed <code>InteriorIntersectionFinder</code> to not short-circuit when finding all nodes
<li>Fixed <code>SubgraphDepthLocator</code> to work with Java 7+ by avoiding sorting with an inconsistent ordering
<li>Fixed <code>FontGlyphReader</code> to use correct Java font value of "SansSerif", and added new constant to match.
<li>Fixed <code>KdTree</code> to correctly implement distance tolerance-based coordinate matching
<li>Fixed <code>LineString.normalize()</code> to correctly handle CoordinateSequences
<li>Fixed <code>CommonBitsRemover</code> to correctly handle CoordinateSequences
<li>Fixed bug in <code>CoordinateArraySequence.clone()</code>
</ul>

<h3>API Changes</h3>
<ul>
<li>Changed interface of <code>SegmentSetMutualIntersector</code> to support thread-safety by removing state
<li>Provided <code>InteriorIntersectionFinderAdder</code> to replace the poorly named <code>IntersectionFinderAdder</code>
<li>Changed some classes in <code>com.vividsolutions.jts.operation.buffer</code> to be package-private
</ul>

<h3>Testing Improvements</h3>
<ul>
<li>Added <code>GeometryTestCase</code> base class to simplify unit tests
</ul>

<!------- JTS-IO -------------------->
<hr size='0' color='darkblue'>
<h3 style='font-family:sans-serif; color:darkblue'>JTS I/O</h3>

<h3>Functionality Improvements</h3>
<ul>
<li>Added <code>GeoJsonReader</code> and <code>GeoJsonWriter</code> classes
</ul>

<h3>API Changes</h3>
<ul>
<li>In <code>OraWriter</code> the connection is now provided to the <code>write()</code> method, not the constructors
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed <code>OraReader</code> to handle reading <code>GeometryCollection</code> with <code>Point</code> as second element
<li>Many improvements to Oracle API code and performance
<li>Added <code>OraWriter.setOptimizePoint</code> and <code>OraWriter.setOptimizeRectangle</code> methods
</ul>

<!------- TestBuilder -------------------->
<hr size='0' color='darkblue'>
<h3 style='font-family:sans-serif; color:darkblue'>JTS TestBuilder</h3>

<h3>Functionality Improvements</h3>
<ul>
<li>Added ability to read multiple WKBHex geometries from a text file
<li>Added AutoZoom to input
<li>Added Oracle text output
<li>Added more function sets
<li>Removed dependency on Acme GIF encoder library
<li>Improved zooming logic
<li>Added mouse wheel zooming
<li>Improved UI for editing A/B geometries
<li>Added <b>Compute New</b> button to Geometry Functions panel
<li>Added SpatialIndex functions
<li>Added User Data labelling
</ul>

<h3>UI Changes</h3>
<ul>
<li>Moved Options menu items to View menu
<li>Removed Tools menu items (they are available as functions)
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed to correctly handle changing Swing Look&Feel
</ul>


<!-- ================================================================ -->
<hr size='4' color='darkblue'>
<h2>Version 1.13</h2>

<i>Release Date:  December 13, 2012</i>

<h3>Functionality Improvements</h3>
<ul>
<li>Changed <tt>GeometryFactory.createGeometry()</tt> to make a deep copy of the argument Geometry,
using the CoordinateSequenceFactory of the factory
<li>Added ability to specify a dimension in <tt>CoordinateArraySequence</tt>
<li>Changed <tt>Geometry.getEnvelopeInternal()</tt> to return a copy of the cached envelope, to prevent modification
<li>Added <tt>GeometryEditor.CoordinateSequenceOperation</tt> to allow easy editing of constituent CoordinateSequences
<li>Added <tt>GeometryFactory.createPolygon</tt> convenience methods which do not require holes to be specified
<li><tt>Geometry</tt> overlay methods now return empty results as atomic types of appropriate dimension
<li>Added <tt>RectangleLineIntersector</tt> to provide efficient rectangle-line intersection testing
<li>Added <tt>getOrdinate</tt> and <tt>setOrdinate</tt> to <tt>Coordinate</tt>
<li><tt>Quadtree</tt> is <tt>Serializable</tt>
<li><tt>STRtree</tt> is <tt>Serializable</tt>
<li>Added <tt>max</tt>, <tt>average</tt> and <tt>wrap</tt> functions to <tt>MathUtil</tt>
<li>Improved <tt>WKTReader</tt> parse error reporting to report input line of error
<li>Improved <code>WKBReader</code> to repair structurally-invalid input
<li>Made <tt>TopologyPreservingSimplifier</tt> thread-safe
<li>Added <tt>AbstractSTRtree.isEmpty()</tt> method
<li>Added <tt>QuadTree.isEmpty()</tt> method
<li>Added <tt>KdTree.isEmpty()</tt> method
<li>Added decimation and duplicate point removal to </tt>ShapeWriter<tt>.
<li><tt>ScaledNoder</tt> now preserves Z values of input
<li>Added instance methods for all <t>Triangle</tt> static methods
<li>Added <tt>CGAlgorithmsDD</tt> containing high-precision versions of some basic CG algorithms
<li>Added <tt>IntersectionMatrix.isTrue()</tt> method for testing IM pattern matches
<li>Added <code>getRawCoordinates</code> methods to <code>PackedCoordinateSequence</code> concrete classes
<li>Modified <code>Geometry.isSimple()</code> to explicity check for simplicity for all types,
and support <code>GeometryCollections</code>
<li>Improved <code>MCIndexSnapRounder</code> to add nodes only where they are necessary
<li>Added <code>CoordinateArrays.removeNull()</code> method
<li>Enhanced <code>GeometryEditor</code> to handle null geometries returned from operation
<li>Added <code>WKBHExFileReader</code>
<li>Added <code>Distance3D</code> operation
</ul>

<h3>Performance Improvements</h3>
<ul>
<li>Simplified & improved performance of <tt>RectangleIntersects</tt> by using new <tt>RectangleLineIntersector</tt>
<li>In <tt>RandomPointsInGridBuilder</tt> eliminated redundant <tt>ArrayList</tt> usage
<li>In <tt>PreparedPolygonIntersects</tt> and <tt>PreparedLineStringIntersects</tt> added check
to avoid creating segment index if all test inputs are points
<li>In <tt>AbstractSTRtree</tt> switched to using indexed list access for better performance than using iterators
<li>In <tt>AbstractSTRtree</tt> freed inserted item array after index is built
<li>Improved performance of <tt>Polygonizer</tt> for cases with many potential holes
<li>Improved performance for some <tt>DD</tt> methods by making them <tt>final</tt>
<li>Added fast filter for <tt>CGAlgorithmsDD.orientationIndex</tt>, and switched to self-operations for DD determinant
<li>Changed <code>STRtree.createNode()</code> to use a static class for nodes
<li>Changed <code>QuadTree Node</code> to use scalar x and y variables rather than a <code>Coordinate</code> to reduce memory allocation
<li>Fixed <code>PreparedGeometry</code> concrete classes to be thread-safe.
<li>Fixed <code>SortedPackedIntervalRTree</code> so that it is thread-safe.
</ul>

<h3>Robustness Improvements</h3>
<ul>
<li>Switched to using DD extended-precision arithmetic to compute orientation predicate
<li><code>CGAlgorithms.distanceLineLine()</code> improved to be more robust and performant
<li>Fixed robustness issue causing <tt>Empty Stack</tt> failure
in <tt>ConvexHull</tt> for some nearly collinear inputs
<li><tt>CGAlgorithms.signedArea()</tt> uses a more accurate algorithm
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed <tt>Geometry.equalsExact()</tt> to avoid NPE when comparing empty and non-empty <tt>Point</tt>s
<li>Fixed <tt>CascadedPolygonUnion</tt> to discard non-polygonal components created during unioning,
to avoid failures and provide more desirable behaviour
<li>Fixed <tt>CentralEndpointIntersector</tt> to initialize result correctly
<li>Fixed <tt>DelaunayTriangulationBuilder.extractUniqueCoordinates(Geometry)</tt>
to avoid mutating the vertex order of the input Geometry
<li>Fixed <tt>ConformingDelaunayTriangulationBuilder</tt> to allow
non-disjoint site and constraint vertex sets
<li>Fixed <tt>RandomPointsInGridBuilder</tt> point generation to use circle constraint correctly
<li>Fixed Linear Referencing API to handle MultiLineStrings consistently,
by always using the lowest possible index value, and by trimming zero-length components from results
<li>Fixed bug in <tt>LocationIndexedLine</tt> and <tt>LengthIndexLine</tt> which was
causing an assertion failure when the indexOfAfter() method was called with a constraint location
which is at the end of the line
<li>Fixed bug in <tt>STRtree.query(Envelope, ItemVisitor)</tt> causing an NPE when tree is empty
<li>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.
<li>Fixed <tt>TopologyPreservingSimplifier</tt> to return a valid result
for closed <tt>LineString</tt>s with large distance tolerances
<li>Fixed <tt>TopologyPreservingSimplifier</tt> to return an empty result for an empty input
<li>Fixed <tt>DouglasPeuckerSimplifier</tt> to return an empty result for an empty input
<li>Fixed <tt>MinimumBoundingCircle</tt> to correctly compute circle for obtuse triangles.
<li>Fixd <tt>GeometryPrecisionReducer</tt> to use input GeometryFactory when polygon topology is fixed
<li>Fixed <tt>GeometryNoder</tt> bug that was failing to snap to end vertices of lines
<li>Fixed <tt>Geometry.getCentroid()</tt> and <tt>Geometry.getInteriorPoint()</tt> to return <tt>POINT EMPTY</tt> for empty inputs
<li>Fixed <tt>DelaunayTriangulationBuilder</tt> to correctly extract unique points
<li>Fixed <tt>KdTree</tt> to correctly handle inserting duplicate points into an empty tree
<li>Fixed <tt>LineSegment.projectionFactor()</tt> to handle zero-length lines (by returning Double.POSITIVE_INFINITY)
<li>Fixed <tt>LocationIndexedLine</tt> to handle locations on zero-length lines
<li>Fixed <code>LengthIndexedLine</code> and <code>LocationIndexedLine</code> to handle <code>indexOfAfter()</code> correctly
<li>Fixed <code>WKBReader</code> to handle successive geometrys with different endianness
<li>Fixed <code>GeometricShapeFactory</code> to correctly handle setting the centre point
<li>Fixed <code>GeometryFactory.createMultiPoint(CoordinateSequence)</code> to handle sequences of dimension &gt; 3
</ul>

<h3>API Changes</h3>
<ul>
<li>Changed visibility of <tt>TaggedLineStringSimplifier</tt> back to <tt>public</tt> due to user demand
</ul>

<h3>Testing</h3>
<ul>
<li>Added Performance Testing framework (<tt>PerformanceTestRunner</tt>
and <tt>PerformanceTestCase</tt>)
<li>Added named predicate tests to all Relate test cases
</ul>

<h3>Contributors</h3>
<ul>
<li>Peter Hopfgartner - improved area computation
<li>Michael Michaud - snap-rounding improvements
</ul>


<!------- TestBuilder -------------------->
<hr size='0' color='darkblue'>
<h3 style='font-family:sans-serif; color:darkblue'>JTS TestBuilder</h3>

<h3>Functionality Improvements</h3>
<ul>
<li>Added segment index visualization styling
<li>Improved <b>Geometry Inspector</b>
<li>Added stream digitizing for Polygon and LineString tools
<li>Added output of Test Case XML with WKB
<li>Added Extract Component tool
<li>Added Delete Vertices Or Components tool
<li>Added Geometry Edit Panel pop-up menu, with operations
<li>Added Halton sequence functions
<li>Added sorting functions
<li>Added function for selection of first N components
<li>Added CGAlgorithms functions
<li>Added ability to paste and load multiple WKBHex geometries
</ul>

<h3>Performance Improvements</h3>
<ul>
<li>Using decimation substantially improves rendering time for large geometries.
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed bug in saving XML test files
</ul>

<!-- ================================================================ -->
<hr size='4' color='darkblue'>
<h2>Version 1.12</h2>

<i>Release Date:  June 30, 2011</i>

<h3>Functionality Improvements</h3>
<ul>
<li>Added new names for methods for computing <tt>Geometry</tt> equality:
<li><tt>equals(Object)</tt> is a synonym for <tt>equalsExact(Geometry)</tt>
<li><tt>equalsNorm(Geometry)</tt> automatically normalizes the operands
<li><tt>equalsTopo(Geometry)</tt> computes topological equality,
and is a synonym for the original <tt>equals(Geometry)</tt>
</ul>
<li>Added <tt>Geometry.norm()</tt> to provide non-mutating normalization
<li>Added <tt>Geometry.hashCode()</tt> to fulfill Java conventions
<li>Added <tt>LineIntersector.getEndpoint()</tt> method
<li>Added methods to <tt>CoordinateSequences</tt> to test for and create valid rings
<li>Added <tt>minExtent</tt> and <tt>maxExtent</tt> to <tt>Envelope</tt>
<li>Added ability to compute Single-Sided Buffers (invoked via <tt>BufferOp</tt> and <tt>BufferParameters</tt>)
<li>Added <tt>GeometryPrecisionReducer</tt>
<li>Added ExtendedWKB SRID support to <tt>WKBWriter</tt> (thanks to Justin Deoliviera)
<li>Improved <tt>PolygonShape</tt> to support floating-point coordinates
<li>Added <tt>GeometryShapeFactory.setRotation(double radians)</tt> method
<li>Added <tt>GeometricShapeBuilder</tt> API to support shape builder development
<li>Added <tt>RandomPointsBuilder</tt> to allow generating various random point sets
<li>Added <tt>RandomPointsInGridBuilder</tt> to allow generating various random point sets constrained to a grid
<li>Added <tt>KochSnowflakeBuilder</tt>
<li>Added <tt>SierpinskiCarpetBuilder</tt>
<li>Added <tt>MathUtil</tt> containing mathematics and numerical utility functions
<li>Added <tt>Vector2D</tt> class providing vector operations
<li>Added <tt>DirectedEdgeStar.getNextCWEdge()</tt> method to <tt>planargraph</tt> API
<li><tt>AffineTransformation</tt> enhanced to avoid numeric precision issues in case of reflection in X=Y (coordinate flipping)
<li>Added <tt>LineSequencer.sequence()</tt> static convenience method
<li>Added error indicators to <tt>BufferDistanceValidator</tt> and <tt>BufferResultValidator</tt>
<li>Added <tt>MinimumClearance</tt> class
<li>Added <tt>nearestNeighbours</tt> methods to <tt>STRtree</tt>
</ul>

<h3>Performance Improvements</h3>
<ul>
<li>Improved memory performance of <tt>ShapeWriter</tt> conversions (by tuning coordinate and polygon conversion)
<li>Improved performance of <tt>RectangleIntersects</tt> by refining <tt>SegmentIntersectionTester</tt>
</ul>

<h3>Robustness Improvements</h3>
<ul>
<li>Delaunay triangulation uses more robust formulation for the inCircle test
<li>Voronoi computation now uses more robust formulation for the circumcentre computation
<li>Force <code>RectangleIntersects</code> to always use segment-scanning to improve robustness
</ul>

<h3>API Changes</h3>
<ul>
<li>Reduced visibility of internal classes in <tt>com.vividsolutions.jts.geom.prep</tt>
<li>Reduced visibility of internal classes in <tt>com.vividsolutions.jts.simplify</tt>
<li>Moved <tt>Matrix</tt> class into <tt>jts.math</tt> package
<li>Refactored internal offset curve generation classes
in <tt>com.vividsolutions.jts.operation.buffer</tt> package
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed <tt>CoordinateArraySequence</tt> and <tt>PackedCoordinateSequence</tt>
to correctly handle Z ordinate in <tt>getCoordinate(int, Coordinate)</tt>
<li>Fixed <tt>LinearRing</tt> to have <tt>isClosed()</tt> return <tt>true</tt> for empty rings
<li>Fixed <tt>Geometry.union()</tt> to use more robust union algorithm.
    This provides behaviour consistent with <tt>union(Geometry)</tt>.
<li>Fixed <tt>Point.isValid()</tt> to validate POINT EMPTY correctly
<li>Fixed <tt>SnapIfNeededOverlayOp</tt> to throw the originating exception,which contains meaningful coordinates
<li>Fixed <tt>GeometrySnapper</tt> to allow final vertices of LineStrings to snap correctly
<li>Fixed buffer (<tt>OffsetCurveSetBuilder</tt>) to handle "flat" rings correctly
<li>Fixed <tt>IsValidOp</tt> to handle reporting "Not Closed" errors on empty rings correctly
<li>Fixed <tt>NestedRingTester</tt> (used by <tt>IsValidOp</tt>)
to correctly handle the case where a hole touches all the vertices of another hole (which is invalid)
<li>Fixed <tt>ConvexHull</tt> to handle large geometries with fewer than 3 unique points
<li>Fixed <tt>GeometryGraph</tt> to ignore empty hole rings when building graph
<li>Fixed <tt>LineMerger</tt> to skip lines with only a single unique coordinate
<li>Fixed <tt>ByteArrayInStream</tt> to pad byte buffers with zeroes
<li>Corrected spelling of <tt>SquarePointShapeFactory</tt>
<li>Fixed tolerance check in <tt>KdTree</tt>
<li>Updated <tt>MasterTester</tt> to include more unit tests
</ul>

<!------- TestBuilder -------------------->
<hr size='0' color='darkblue'>
<h3 style='font-family:sans-serif; color:darkblue'>JTS TestBuilder</h3>

<h3>Functionality Improvements</h3>
<ul>
<li>Added <tt>[Zoom To Result]</tt> button
<li>Improved mark display, with floating point label
<li>Added more random geometry creation functions
<li>Added fractal geometry creation functions
<li>Improved threaded rendering handling to ensure only one frame drawn
<li>Added Magnify Topology capability
<li>Added Geometry Inspector dialog
<li>Better startup script, with auto-home directory detection
and JTS_LIB_DIR environment variable (thanks to strk)
<li>Added logging Info window behaviour
<li>Improved saving PNG to allow specifying file name
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed Stats panel to update when current test changes
<li>Fixed deleting single test case
</ul>

<!-- ================================================================ -->
<hr size='4' color='darkblue'>
<h2>Version 1.11</h2>

<i>Release Date:  March 1, 2010</i>

<h3>Functionality Improvements</h3>
<ul>
<li>Added <tt>CoordinateArrays.isRing</tt>
<li>Added <tt>CGAlgorithms.signedArea(CoordinateSequence)</tt>
<li>Added <tt>CoordinateArrays.copyDeep(...)</tt> method to copy sections of arrays
<li>Added <tt>CoordinateList.add(Coordinate[], boolean, int, int)</tt> method to add sections of arrays
<li>Added <tt>LineSegment.toGeometry()</tt>, <tt>LineSegment.lineIntersection()()</tt>
<li>Added <tt>LineSegment.hashCode()</tt>
<li>Added geometric similarity classes (<tt>HausdorffSimilarityMeasure</tt>, <tt>AreaSimilarityMeasure</tt>)
<li>Added <tt>MinimumDiameter.getMinimumRectangle()</tt>
<li>Added <tt>MinimumBoundingCircle</tt> class
<li>Added <tt>Densifier</tt> class
<li>Added triangulation API, including <tt>QuadEdgeSubdivision</tt>, <tt>IncrementalDelaunayTriangulator</tt>,
	<tt>ConformingDelaunayTriangulator</tt> and supporting classes
<li>Added <tt>VoronoiDiagramBuilder</tt> to perform Voronoi diagram generation
<li>Added <tt>scaleInstance(scaleX, scaleY, x, y)</tt> to <tt>AffineTransformation</tt>
<li>Added <tt>AffineTransformationFactory</tt> to allow generating transformations from various kinds of control inputs
<li>Added <tt>BinTree.remove()</tt> method
<li>Fixed <tt>BinTree.query()</tt> to allow null interval arguments
<li>Added <tt>ShapeReader</tt> API to convert Java2D Shapes into JTS Geometry
<li>Added <tt>ShapeWriter</tt> API to convert JTS geometry into Java2D Shapes
<li>Added <tt>FontGlyphReader</tt> API to render Java2D text font glyphs into geometry
<li>Added <tt>SdeReader</tt> to <b>jtsio</b> library
<li>Added <tt>Debug</tt> break methods
<li>Added <tt>Memory</tt> utility for reporting memory statistics
<li>Added <tt>ObjectCounter</tt> utility for counting objects
<li>Added <tt>createSquircle</tt> and <tt>createSuperCircle</tt> to <tt>GeometricShapeFactory</tt>
</ul>

<h3>Performance Improvements</h3>
<ul>
<li>Improved performance of <tt>Geometry.getArea()</tt> and <tt>Geometry.getLength()</tt> when used with custom <tt>CoordinateSequence</tt>s
</ul>

<h3>API Changes</h3>
<ul>
<li>Deprecated <tt>WKBWriter.bytesToHex</tt> in favour of <tt>WKBWriter.toHex</tt> to regularize and simplify method name
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed Point.isValid() to check for invalid coordinates (ie with Nan ordinates)
<li>Fixed <tt>Geometry.distance()</tt> and <tt>DistanceOp</tt> to return 0.0 for empty inputs
<li>Fixed <tt>Buffer</tt> to handle degenerate polygons with too few distinct points correctly
<li>Added illegal state check in <tt>LineSegment.pointAlongOffset()</tt>
<li>Fixed exception strategy in <tt>BufferSubgraph</tt> to handle certain robustness failures correctly
<li>Fixed robustness problem in <tt>OffsetCurveBuilder</tt> in computing mitred joins for nearly parallel segments
<li>Fixed minor bug in <tt>BufferInputLineSimplifier</tt> which prevented simplification of some situations
<li>Fixed bug in <tt>BufferInputLineSimplifier</tt> which caused over-simplification for large tolerances
<li>Fixed bug in <tt>Angle.normalizePositive</tt> to handle values > 2PI correctly
<li>Fixed <tt>WKTWriter</tt> to emit correct syntax for MULTIPOINTs
<li>Fixed <tt>WKTReader</tt> to accept correct syntax for MULTIPOINTs
<li><tt>CGAlgorithms.isCCW</tt> now checks for too few points in the ring and throws an <tt>IllegalArgumentException</tt>
<li>Fixed bug in <tt>AffineTransformation#eqals</tt> (logic bug)
<li>Fixed bug in <tt>CoordinateList#closeRing</tt> (cloning closing Coordinate)
</ul>

<!------- TestBuilder -------------------->
<hr size='0' color='darkblue'>
<h3 style='font-family:sans-serif; color:darkblue'>JTS TestBuilder</h3>

<h3>Functionality Improvements</h3>
<ul>
<li>WKT input is cleaned automatically when loaded (illegal chars are removed)
<li>Added WKT-Formatted option to Test Case View dialog
<li>Many new geometry functions added
<li>Geometry functions are displayed in tree
<li>Geometry functions can be implemented as Java static class methods.
<li>Geometry function classes can be loaded dynamically from command-line
<li>Improved handling of very large geometry inputs and results
<li>Threaded rendering allows display of very large geometries without limiting usability
<li>Added Draw Rectangle tool
<li>Added Drag-n-drop loading of .SHP files
<li>Added Info tool to provide persistent display of geometry point/segment information
<li>Added display of memory usage
</ul>


<!-- ================================================================ -->
<hr size='4' color='darkblue'>
<h2>Version 1.10</h2>

<i>Release Date:  December 31, 2008</i>

<h3>Functionality Improvements</h3>
<ul>
<li>Added <tt>Geometry.reverse()</tt> method for all geometry types
<li>Added <tt>setSrsName</tt>, <tt>setNamespace</tt>, <tt>setCustomRootElements</tt> methods to <tt>GMLWriter</tt>
<li>Added <tt>Envelope.getArea</tt> method
<li>Added <tt>copy</tt>, <tt>copyCoord</tt> methods to <tt>CoordinateSequences</tt>
<li>Added <tt>area</tt> method to <tt>Envelope</tt>
<li>Added <tt>extractPoint(pt, offset)</tt> methods to <tt>LengthIndexedLine</tt> and <tt>LocationIndexedLine</tt>
<li>Added <tt>CoordinatePrecisionReducerFilter</tt>
<li>Added <tt>UnaryUnionOp(Collection, GeometryFactory)</tt> constructor to handle empty inputs more automatically
<li>Added <tt>DiscreteHausdorffDistance</tt> class
<li>Made <tt>LineMerger</tt> able to be called incrementally
<li>Added <tt>GeometricShapeFactory.createArcPolygon</tt> to create a polygonal arc
<li>Enhanced <tt>Geometry.buffer()</tt> to preserve SRID
</ul>

<h3>Performance Improvements</h3>
<ul>
<li>Improved performance for <code>EdgeList</code> (by using a more efficient technique for detecting duplicate edges)
<li>Improved performance for <code>ByteArrayInStream</code> (by avoiding use of <tt>java.io.ByteArrayInputStream</tt>)
<li>Unrolled intersection computation in <tt>HCoordinate</tt> to avoid object allocation
<li>Improved performance for buffering via better offset curve generation and simplification.
<li>Improved performance for <tt>IsValidOp</tt> by switching to use <tt>STRtree</tt> for nested hole checking
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed <tt>Geometry.getClassSortIndex()</tt> to lazily initialize the sorted class list.  This fixes a threading bug.
<li>Fixed <tt>RectangleContains</tt> to return correct result for points on the boundary of the rectangle
<li>Fixed error in <tt>com.vividsolutions.jts.simplify.LineSegmentIndex</tt> which caused polygons
simplified using <tt>TopologyPreservingSimplifier</tt> to be invalid in certain situations
<li>Fixed error in <tt>DouglasPeuckerSimplifier</tt> which caused empty polygons to be returned when they contained a very small hole
<li>Fixed <tt>PackedCoordinateSequence</tt> to return <tt>NaN</tt> for null ordinate values
<li>Fixed <tt>Geometry.centroid()</tt> (<tt>CentroidArea</tt>) so that it handles degenerate (zero-area) polygons
<li>Fixed <tt>Geometry.buffer()</tt> (<tt>OffsetCurveBuilder</tt>) so that it handles JOIN_MITRE cases with nearly collinear lines correctly
<li>Fixed <tt>GeometryFactory.toGeometry(Envelope)</tt> to return a CW polygon
<li>Fixed <tt>UnaryUnionOp</tt> to correctly handle heterogeneous inputs with P/L/A components
<li>Fixed <tt>UnaryUnionOp</tt> to accept <tt>LINEARRING</tt>s
<li>Fixed <tt>CentroidArea</tt> to handle zero-area polygons correctly
<li>Fixed <tt>WKBWriter</tt> to always output 3D when requested, and to handle 2D <tt>PackedCoordinateSequences</tt> correctly in this case
<li>Fixed <tt>NodedSegmentString</tt> to handle zero-length line segments correctly (via <tt>safeOctant</tt>)
<li>Cleaned up code to remove unneeded <tt>CGAlgorithms</tt> objects
<li>Fixed <tt>GeometricShapeFactory.createArc</tt> to ensure arc has requested number of vertices
</ul>

<h3>API Changes</h3>
<ul>
<li>Moved GML I/O classes into core JTS codebase
<li>Changed <tt>GMLWriter</tt> to not write the <tt>srsName</tt> attribute by default
<li>In <tt>DistanceOp</tt> switched to using <tt>nearestPoints</tt> method names
<li>Exposed <tt>STRtree.getRoot()</tt> method
</ul>


<!------- TestBuilder -------------------->
<hr size='0' color='darkblue'>
<h3 style='font-family:sans-serif; color:darkblue'>JTS TestBuilder</h3>

<h3>UI Improvements</h3>
<ul>
<li>Added ability to read GML from input panel
<li>Added GML output to View dialog
<li>Added file drag'n'drop to Geometry Input text areas
<li>Add display of computation time
<li>Added Stats panel
<li>Added Scalar functions panel, with extensible function list
<li>Added <b>Save as PNG...</b>
<li>Added stream digitizing to Polygon and Line Draw tools
</ul>

<!------- TestRunner -------------------->
<hr size='0' color='darkblue'>
<h3 style='font-family:sans-serif; color:darkblue'>JTS TestRunner</h3>

<h3>Functionality Improvements</h3>
<ul>
<li>Added <tt>-testCaseIndex</tt> command-line option
</ul>

<!-- ================================================================ -->
<hr size='4' color='darkblue'>
<h2>Version 1.9</h2>

<i>Release Date: January 2, 2008</i>

<h3>Functionality Improvements</h3>
<ul>
<li>Added <tt>Polygonal</tt>, <tt>Lineal</tt>, <tt>Puntal</tt> tag interfaces to better categorize geometry classes
<li>Added <tt>Geometry.union()</tt> method, <tt>UnaryUnionOp</tt> class for efficient unioning of geometrys
<li>Added <tt>Triangle.area3D</tt> method
<li>Added <tt>LineSegment.pointAlongOffset</tt> method
<li>Added <tt>LineSegment.orientationIndex(Coordinate)</tt> method
<li>Added <tt>PreparedGeometry</tt> classes and methods to optimize some geometry functions in batch situations
<li>Added <tt>Envelope.covers</tt> methods, for preciseness
<li>Added <tt>OctagonalEnvelope</tt> class
<li>Improved <tt>CGAlgorithms.isPointInRing</tt> method to handle case where point lies on the ring
<li>Added <tt>CGAlgorithms.locatePointInRing</tt> method
<li>Added <tt>PointInAreaLocator</tt> interface, enhanced <tt>SimplePointInAreaLocator</tt> to extend this
<li>Added <tt>RayCrossingCounter</tt>,  <tt>IndexedPointInAreaLocator</tt> classes for more efficient Point-In-Polygon testing
<li>Added <tt>GeometryCombiner</tt> class
<li>Enhanced <tt>BufferOp</tt> with join styles
<li>Enhanced <tt>WKTReader</tt> to accept any case for <tt>NaN</tt> number symbols
<li>Added <tt>WKTFileReader</tt> class
<li>Improved performance of <tt>CoordinateList</tt> constructors
<li>Added <tt>CascadedPolygonUnion</tt> class
<li>Added <tt>LinearLocation.isOnSameSegment</tt> method
<li>Added <tt>LinearLocation.getSegment</tt> method
<li>Added <tt>LocationIndexedLine.indexOfAfter</tt> method
<li>Added interpolation of Z value to linear referencing methods
<li>Added methods to rotate around a given point to <tt>AffineTransformation</tt>
<li>Allowed <tt>GeometricShapeFactory</tt> to be subclassed to add new shapes
<li>Added <tt>SineStarFactory</tt> (primarily to support testing)
<li>Added <tt>SortedPackedIntervalRTree</tt> class
<li>Added <tt>SegmentSetMutualIntersector</tt> interface and implementations
<li>Added <tt>Node.remove(DirectedEdge)</tt> method in <tt>planargraph</tt> package
</ul>

<h3>Performance Improvements</h3>
<ul>
<li>Improved performance for <code>SimplePointInAreaLocator</code> (by checking ring envelopes as a filter)
</ul>

<h3>Bug Fixes</h3>
<ul>
<li><tt>Geometry.buffer</tt> operation fixed to always return polygonal geometries
<li>Fixed bug in <code>Geometry.buffer(distance, quadrantSegs)</code>
causing failure for some cases with <tt>quadrantSegs = 1</tt>
<li>Fixed bug in <tt>GeometryFactory.toGeometry(Envelope)</tt>
which was returning invalid Polygons for "linear" envelopes
<li>Fixed bug in <tt>MonotoneChainBuilder</tt> which caused failures in situations with segments of zero length
<li>Fixed <tt>PointLocator</tt> to handle locating in Point geometries
<li>Fixed <tt>GeometricShapeFactory</tt> to always use provided PrecisionModel
<li>Fixed <tt>LinearLocation.clone</tt> method
<li>Fixed <tt>LinearLocation.isValid</tt> method
<li>Fixed <tt>Polygonizer</tt> to accept single-point linestrings (which are ignored)
</ul>

<h3>API Changes</h3>
<ul>
<li>Deprecated <code>RobustCGAlgorithms</code>
<li>Deprecated <code>BufferOp</code> cap style constants (these are now provided in </tt>BufferParameters</tt>)
<li>Removed <code>SIRPointInRing</code>
</ul>

<!------- TestRunner -------------------->
<hr size='0' color='darkblue'>
<h3 style='font-family:sans-serif; color:darkblue'>JTS TestRunner</h3>

<h3>New Features</h3>
<ul>
<li>Added ability to specify GeometryOperation in XML file
<li>Added <tt>BufferValidatedGeometryOperation</tt>
<li>Added ability to specify custom result matching via <tt>resultMatcher</tt> parameter
in XML files
<li>Added <tt>BufferResultMatcher</tt>
</ul>


<!------- TestBuilder -------------------->
<hr size='0' color='darkblue'>
<h3 style='font-family:sans-serif; color:darkblue'>JTS TestBuilder</h3>

<h3>UI Improvements</h3>
<ul>
<li>Improved rendering of geometries
<li>Improved symbology for orientation
<li>Simplified Geometry creation
<li>Improved vertex move/add
<li>Added tooltip for coordinate location
<li>Added more geometry functions
<li>Added Copy Result to Test button
</ul>

<h3>Code Improvements</h3>
<ul>
<li>Restructured code for more flexibility, better Swing functionality
<li>Made it easier to add geometry functions
</ul>


<!-- ================================================================ -->
<hr size='4' color='darkblue'>
<h2>Version 1.8</h2>

<i>Release Date: December 19, 2006</i>

<h3>Functionality Improvements</h3>
<ul>
<li>Improved robustness for overlay operations, via using geometry snapping
<li>Added <code>Angle</code> class
<li>Added methods to <code>Triangle</code> class
<li>Added <code>LineSegment.midPoint</code> method
<li>Added ability to specify output of Z values to <code>WKTWriter</code>
<li>Added <code>setFormatted</code>, <code>setTab</code>, <code>setMaxCoordinatesPerLine</code> methods to <code>WKTWriter</code>
<li>Added <code>BoundaryNodeRule</code> classes, and ability to specify a Boundary Node Rule
in <code>RelateOp</code>, <code>IsSimpleOp</code>, <code>BoundaryOp</code>
<li>Added ability to get the failure location to <code>IsSimpleOp</code>
<li>Added <code>BoundaryOp</code> with improved algorithm for lineal geometries.  Changed lineal Geometry classes to use it.
<li>Enhanced <code>Geometry</code> overlay methods to accept empty <code>GeometryCollections.</code>
<li>Enhanced Error Handling for <tt>WKTReader</tt>
<li>Added <code>CoordinateSequenceFilter</code>
<li>Added <code>AffineTransformation</code> and <code>AffineTransformationBuilder</code>
</ul>

<h3>API Changes</h3>
<ul>
<li>Changed API for <code>IsSimpleOp</code> (required to support returning failure location)
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed bug in <code>GeometryFactory.buildGeometry</code>
causing failure if input contained all GeometryCollections of the same subclass
<li>Changed AssertFailure to TopologyException in <code>PolygonBuilder</code>
<li>Improved correctness of <tt>RobustLineIntersector</tt> in certain cases where segment endpoints intersect
<li>Eliminated duplicate method execution in <code>TestRunner</code>
</ul>

<hr size='0' color='darkblue'>
<h3 style='font-family:sans-serif; color:darkblue'>JTS TestBuilder</h3>

<h3>New Features</h3>
<ul>
<li>Zoom tool can now draw zoom box as well as click
<li>Cut, Copy and Paste buttons for Input WKT
<li>added ability to specify custom Geometry Operations
</ul>

<hr size='0' color='darkblue'>
<h3 style='font-family:sans-serif; color:darkblue'>JTS TestRunner</h3>

<h3>New Features</h3>
<ul>
<li>added ability to specify custom Geometry Operations
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Eliminated duplicate method execution
</ul>



<!----------------------------------------------------------------------->
<hr size='4' color='darkblue'>
<h2>Version 1.7.2</h2>

<i>Release Date: June 22, 2006</i>

<h3>Functionality Improvements</h3>
<ul>
<li>Added support for EWKB (SRIDs only) to <code>WKBReader</code>
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed bug in <code>CoordinateArrays.ptNotInList</code>.
Changed <code>polygonize.EdgeRing</code> to used corrected code.
<li>Fixed bug causing duplicate points in <code>ScaledNoder</code>
<li>Fixed bug causing Null Pointer for empty geometries in <code>OraWriter</code>
<li>Changed AssertFailure to TopologyException in <code>EdgeNode</code>
</ul>

<!----------------------------------------------------------------------->
<hr size='4' color='darkblue'>
<h2>Version 1.7.1</h2>

<i>Release Date: March 20, 2006</i>

<h3>Functionality Improvements</h3>
<ul>
<li>Added Hex string conversion to <code>WKBReader</code> and <code>WKBWriter</code>
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed null point cloning bug in <code>TopologyValidationError</code> (<i>thanks to Markus Gebhard</i>)
<li>Fixed bug in <code>PointLocator</code> fix for LinearRings
<li>Fixed bug in <code>Geometry.isValid</code> and <code>IsValidOp</code> 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)
<li>Fixed bug in <code>Polygon.isRectangle</code>, which reported some valid rectangles as false
</ul>

<h3>Performance Improvements</h3>
<ul>
<li>Improved performance for <code>Geometry#withinDistance</code> (via short-circuiting)
</ul>

<h3>Contributors</h3>
<ul>
<li>Dave Blasby
<li>Koen van Dijken
</ul>


<!----------------------------------------------------------------------->
<hr size='4' color='darkblue'>
<h2>Version 1.7</h2>

<i>Release Date: December 7, 2005</i>

<h3>Functionality Improvements</h3>
<ul>
<li>Added <code>JTSVersion</code> class to provide access to the API version information
<li>Added <code>covers</code> and <code>coveredBy</code> predicates to <code>Geometry</code>
<li>Added <code>Geometry#buffer(distance, quadSegs, endCapStyle)</code> method to expose buffer end cap styles
<li>Added <code>LineString#reverse</code> and <code>MultiLineString#reverse</code> methods
<li>Added <code>centre</code>, <code>intersection</code>, <code>translate</code>,
<code>expandBy(distance)</code>, <code>expandBy(dx, dy)</code>
methods to <code>Envelope</code>
<li>Added <code>CollectionUtil</code> class for performing operations over collections
<li>Added <code>CoordinateArrays</code> comparators
<li>Added <code>CoordinateSequence#getDimension</code>
<li>Added convenience methods <code>toPoint</code> and <code>toLineString</code> to <code>WKTWriter</code>
<li>Added WKB API (<code>WKBReader</code> and <code>WKBWriter</code> classes in <code>com.vividsolutions.jts.io</code>
<li><code>WKTReader</code> has better handling of numeric parsing, including support for scientific notation
<li>Added <code>IsValidOp#setSelfTouchingRingFormingHoleValid</code> to allow validating SDE-style polygons
<li>Added check for non-closed rings in <code>IsValidOp</code>
<li>Added Linear Referencing API (<code>com.vividsolutions.jts.linearref</code>
<li>Added <code>LineSequencer</code> class to <code>com.vividsolutions.jts.operation.linemerge</code>
<li>Added <code>Subgraph</code> class to <code>com.vividsolutions.jts.planargraph</code>
<li>Added <code>isRemoved</code> method to <code>GraphComponent</code>
<li>Added <code>ConnectedSubgraphFinder</code> class to <code>com.vividsolutions.jts.planargraph.algorithm</code>
<li>Added <code>setVisited</code>, <code>getComponentWithVisitedState</code>,
<code>setVisited</code>, <code>getComponentWithVisitedState</code>
methods to <code>com.vividsolutions.jts.planargraph.GraphComponent</code>
<li>Added classes to perform Snap Rounding (in <code>com.vividsolutions.jts.noding.snapround</code>>
<li>Improved buffering speed and robustness by using Snap Rounding
<li>Added buffer optimization for results with large numbers of polygons and/or holes
<li>Added <code>STRtree#query(Envelope, ItemVisitor)</code> method
<li>Added <code>Debug#toLine</code> methods
<li>Added <code>ConvexHull(Coordinate[])</code> constructor
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed decimal formatting in <code>WKTWriter</code> to force a leading 0 in decimal numbers
<li>Fixed bug in <code>CoordinateArraySequence#setOrdinate</code>
<li>Fixed bug when checking validity of polygon with hole (<code>IsValidOp#checkHolesInShell</code>)
<li>Improved correctness of computated intersections in <code>RobustLineIntersector</code>
<li>Fixed bugs in <code>CoordinateList.clone</code> (thanks to Matthias Bobzien)
<li>Fixed bug in <code>Envelope.equals</code> (thanks to John Cartwright)
<li>Fixed <code>PointLocator</code> for LinearRings
</ul>

<h3>Performance Improvements</h3>
<ul>
<li>Improved performance for overlay operations (point inclusion, identical edge detection)
<li>Improved Convex Hull performance
</ul>

<h3>API Changes</h3>
<ul>
<li>Added <code>SpatiaIndex#query(Envelope, ItemVisitor)</code> method signature
<li>Added <code>CoordinateSequence#getDimension()</code> method signature
<li>Marked <code>GeometryEditor.CoordinateOperation#edit(Geometry, GeometryFactory)</code> method
as <code>final</code>, to prevent incorrect use
</ul>

<h3>Semantics Changes</h3>
<ul>
<li>CoordinateArraySequence#setOrdinate now checks that the ordinate index is in range
</ul>



<!----------------------------------------------------------------------->
<hr size='4' color='darkblue'>
<h2>Version 1.6</h2>

Release Date: February 3, 2005

<h3>API Changes</h3>
<ul>
<li>Changed to using <code>CoordinateArraySequence</code> instead of <code>DefaultCoordinateSequence</code>
(to provide a more descriptive name).
</ul>

<h3>Semantics Changes</h3>
<ul>
<li>PrecisionModel#makePrecise changed to use Symmetric Arithmetic Rounding rather than Banker's Rounding
</ul>

<h3>Functionality Improvements</h3>
<ul>
<li>Added ability to enable <code>Debug</code> methods by setting a system property
<li>Added <code>getNumGeometries</code> and <code>getGeometryN</code> methods to Geometry class, to make API more uniform
<li>Improved API for <code>CoordinateSequence</code> allows more options for improving memory usage and handling custom coordinate storage methods
<li>Added <code>PackedCoordinateSequence</code> to provide reduced memory footprint for geometry objects if desired
<li>Added optimized spatial predicates for rectangles
<li>Added Debug#isDebugging method
</ul>

<h3>Bug Fixes</h3>
<ul>
<li>Fixed bug in <code>Geometry#within()</code> short circuiting
<li>Fixed bug causing <code>Geometry#isValid</code> to throw IllegalArgumentException for certain kinds of holes with invalid rings
<li>Fixed bug causing redundant linestrings to be returned in the result of overlaying polygons containing holes touching their shell.
<li><code>Polygon#getBoundary</code> now returns a <code>LinearRing</code> if the polygon does not have holes
</ul>

<h3>Architecture Changes</h3>
<ul>
<li>Removed a proliferation of references to the default <code>CoordinateSequenceFactory</code>
</ul>

<h3>Contributors</h3>
<ul>
<li>Andrea Aime
</ul>

<!----------------------------------------------------------------------->
<hr size='4' color='darkblue'>
<h2>Version 1.5</h2>
Release Date: September 22, 2004
<p>
This version is upwards compatible with Version 1.4

<h3>API Changes</h3>
<ul>
<li>None
</ul>

<h3>Semantics Changes</h3>
<ul>
<li>None
</ul>

<h3>Functionality Improvements</h3>
<ul>
<li><code>CGAlgorithms#isCCW</code> now handles coordinate lists with repeated points.  Also throws an IllegalArgumentException if the input ring does not have 3 distinct points
<li><code>isValid</code> now checks for invalid coordinates (e.g. ones with Nan or infinite numbers)
<li>added copyDeep() method to <code>CoordinateArrays</code>
<li>added geometry simplification operations <code>DouglasPeuckerSimplifier</code> and <code>TopologyPreservingSimplifier</code>
<li>added methods to <code>Quadtree</code> and <code>STRtree</code> to remove items and query using the Visitor pattern
</ul>

<h3>Performance Improvements</h3>
<ul>
<li>Added short-circuit tests in geometry named predicates based on envelope tests
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fixed bugs in <code>Geometry</code> serialization
<li>Fixed bug in <code>ValidOp</code> which reported some MultiPolygons with shells nested inside a hole as invalid
<li>Fixed bug in buffer which caused buffers of some polygons with small & large holes to not contain any holes
<li>Fixed bug in <code>Polygonizer</code> which caused exception if no lines were supplied
</ul>
<h3>Architecture Changes</h3>
<ul>
<li>Basic CG algorithm methods made static in the <code>CGAlgorithms</code> class
<li>Various utility methods made public in <code>CoordinateArrays</code> class
</ul>
<h3>Documentation</h3>
<ul>
<li>More examples provided in <code>com.vividsolutions.jtsexamples package</code>
</ul>

<!----------------------------------------------------------------------->
<hr size='4' color='darkblue'>
<h2>Version 1.4</h2>

Release Date: November 4, 2003
<h3>Semantics Changes</h3>
<ul>
<li>none
</ul>
<h3>Functionality Improvements</h3>
<ul>
<li>Added "LINEARRING" tag to WKT syntax
<li>Added GeometryEditor class to allow easy copy/modify of Geometrys
<li>Added GeometricShapeFactory class to easily create standard geometric shapes
<li>Geometries can now carry arbitrary user-defined data objects (via Geometry#get/setUserData(Object) method)
<li>Added CoordinateSequence and CoordinateSequenceFactory interfaces, and default implementations (BasicCoordinateSequence, BasicCoordinateSequenceFactory)
<li>Added Geometry#getFactory
<li>Added new PrecisionModel type of FLOATING_SINGLE, for rounding to single precision floating point
<li>Added DistanceOp#getClosestPoints method, which returns the closest points between two Geometries
<li>Added com.vividsolutions.jts.noding package containing classes to perform fast indexed noding of linestrings
<li>Added com.vividsolutions.jts.operation.polygonize package containing classes to perform polygonization
<li>Added com.vividsolutions.jts.operation.linemerge package containing classes to perform line merging
<li>Added SimpleGeometryPrecisionReducer to allow reducing precision of coordinates of a Geometry
<li>Added LineSegment#closestPoints method to compute the closest points between two line segments
<li>Added MinimumDiameter class to compute minimum diameters of Geometries
<li>Added geom.Triangle class to contain algorithms for Triangles
<li>BufferOp now allows end cap styles to be specified.  Three types are supported: round, butt and square.
</ul>
<h3>Performance Improvements</h3>
<ul>
<li>EdgeList now provides a findEqualEdge method which is substantially faster than findEdgeIndex, for large lists
<li>Buffering is now faster and much more robust
<li>Overlap operations are now more robust
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Envelope#init(Envelope) now handles null Envelopes correctly
<li>CoordinateList#add() now correctly ignores the z-value of Coordinates in determining equality
<li>Geometry#isValid now correctly handles checking validity of LinearRings
<li>Fixed infinite loop bug causing Out Of Memory errors during polygon intersection
<li>Geometry#clone now correctly clones the Geometry's Envelope
<li>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
<li>Fixed incorrect calculation of depths in DirectedEdgeStar#computeDepths
<li>Fixed BufferSubgraph#addReachable to use explicit stack to avoid stack overflow problems
<li>Fixed various bugs causing some kinds of buffers to be computed incorrectly
</ul>
<h3>API Changes</h3>
<ul>
<li>WKTReader/Writer: changed protected members to private
<li>PrecisionModel type is now an object rather than an int
<li>ConvexHull API changed to remove requirement to pass in CGAlgorithms object
</ul>
<h3>Code Architecture Changes</h3>
<ul>
<li>geom.util package added for utility classes which parse and modify geometries
</ul>
<h3>Documentation</h3>
<ul>
<li>More examples provided in com.vividsolutions.jtsexamples package
<li>Added JTS Developers Guide
</ul>

<!----------------------------------------------------------------------->
<hr size='4' color='darkblue'>
<h2>Version 1.3</h2>
Release Date: April 4, 2003
<h3>Semantics Changes</h3>
<ul>
<li>all Geometry methods are now reentrant (thread-safe)
<li>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.
<li>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.
<li>SRID and Precision Model are no longer checked for equality during Geometry operations.  This removes a limitation which provided little semantic benefit.
</ul>

<h3>Functionality Improvements</h3>
<ul>
<li>added Geometry.isWithinDistance(Geometry g, double distance) method, to provide optimized proximity queries
<li>added Geometry.buffer(double distance, int quadrantSegments) method, allowing control over accuracy of buffer approximation
<li>added Geometry.getCentroid() method
<li>added Geometry.getInteriorPoint() method, which uses heuristic methods to return a point in the interior of a Geometry
<li>GeometryFactory.toGeometryArray now returns null if the argument is null
</ul>
<h3>Performance Improvements</h3>
<ul>
<li>Removed unnecessary string construction in EdgeEndStar.propagateSideLabels()
<li>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)
<li>Add short-circuit code to RobustLineIntersector to detect non-intersections more efficiently
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fixed ClassCastException occurring in GeometryCollection.getLength()
<li>Fixed bug in Edge Intersection insertion (replaced Coordinate#equals with equals2D to ensure that intersection creation is not sensitive to Z-value).
<li>Fixed handling LineStrings with too few points in GeometryGraph.addLineString
<li>Fixed: was not checking that MultiPolygons don't contain components with too few points.
<li>Fixed Envelope.distance() to return correct distance for all envelopes.
<li>Fixed a few Geometry methods to make them re-entrant.
<li>Fixed CoordinateList.closeRing() to ensure endpoints are not duplicated
<li>Fixed CGAlgorithms.signedArea() to use a simpler algorithm which is more robust and faster.
<li>Fixed bug preventing validating Rings containing an initial repeated point.
</ul>
<h3>API Changes</h3>
<ul>
<li>Added default constructor to WKTReader.  It uses the default GeometryFactory
<li>Add two static intersects() methods to Envelope, to allow computing intersections with envelopes defined by points only.
<li>Dropped BinaryPower; its functionality is provided by DoubleBits in a more robust fashion.
<li>Removed a couple of redundant private static methods from Geometry; they have been replaced by methods in CoordinateArrays
<li>The Geometry class is now marked as Serializable
</ul>

<!----------------------------------------------------------------------->
<hr size='4' color='darkblue'>
<h2>Version 1.2</h2>

Release Date: 7 October 2002
<h3>Semantics Changes</h3>
<ul>
<li>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.
<li>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.
</ul>
<h3>Functionality Improvements</h3>
<ul>
<li>RobustLineIntersector now uses "normalized" coordinates to maximize the accuracy of intersection computation.
<li>Upgraded Quadtree with more robust implementation
<li>Replaced IntervalTree with a more robust implementation of BinTree
<li>Added STRTree 2-D spatial index, which exhibits better performance than QuadTrees in many situations.
<li>Added EnhancePrecisionOp, which uses precisioning enhancing techniques to reduce the number of failure cases due to robustness problems.
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>fixed ConvexHull to use TreeSet instead of HashSet for coordinates
<li>Fixed isValid for GeometryCollections containing Polygons, which were sometimes erroneously returning a validity failure for correct Geometrys.
<li>Fixed bug in LineSegment.distancePointLine() which would return the incorrect distance for a LineSegment with two identical points
<li>Improved error handling in CGAlgorithms.isCCW()
<li>IsValid now checks for too few points in a geometry component (e.g. due to repeated points in a ring)
</ul>
<h3>API Changes</h3>
<ul>
<li>added Stopwatch class
<li>added Geometry.getArea() and Geometry.getLength() methods
<li>added CGAlgorithms.signedArea() method
<li>added methods to LineSegment - closestPoint(), getLength()
<li>added CoordinateArrrays and CoordinateLists utility classes
<li>Added TopologyValidationError.getErrorType() method
<li>Added Envelope#intersects; deprecated Envelope#overlaps.
<li>Added Geometry#geometryChanged() method to allow signaling when Geometry coordinates have been mutated by a client class
<li>Added STRTree class implementing a Sort-Tile-Recursive spatial index (a variant of a packed R-tree)
<li>Deleted IntervalTree 1-D spatial index (replaced by BinTree)
<li>Add BinTree 1-D spatial index
</ul>

<!----------------------------------------------------------------------->
<hr size='4' color='darkblue'>
<h2>Version 1.1.1</h2>

Release Date: 9 April 2002
<h3>Bug Fixes</h3>
<ul>
<li>fixed decimal-point symbol localization bug in WKTWriter
<li>fixed bug in Envelope.int(Envelope env)
<li>fixed filename case of SFSMultiLineString.java and IntervalTree.java
</ul>
<h3>API Changes</h3>
<ul>
<li>deleted TopologyException class
<li>renamed CGAlgorithms.isPointInPolygon to isPointInRing (a more accurate description of what the method computes)
</ul>
<h3>API Additions</h3>
<ul>
<li>added Geometry.getCoordinate() method
<li>added Geometry.distance() method
<li>added GeometryComponentFilter interface and Geometry.apply(GeometryComponentFilter) method
</ul>

<!----------------------------------------------------------------------->
<hr size='4' color='darkblue'>
<h2>Version 1.1</h2>

Release Date: 28 March 2002
<h3>New Features</h3>
<ul>
<li>added Geometry.isSimple() and Geometry.isValid() methods
<li>improved design of topological data structures
<li>added Geometry.setSRID() method
<li>improved functionality of the Envelope class
<li>added ability to write to an arbitrary java.io.Writer object to WKTWriter
<li>added Validate and Mark Location functionality to TestBuilder
</ul>

<!----------------------------------------------------------------------->
<hr size='4' color='darkblue'>
<h2>Version 1.0</h2>
Release Date: 1 February 2002
<ul>
<li>Removed some non-compatibilities with Java 1.1
<li>Fixed bug in constructing buffer outline around inside of angles
<li>In TestBuilder vertices are now displayed with fixed size in view units
<li>Improved code for WKTWriter.writeFormatted()
<li>Fixed bug in constructor for LinearRing
<li>Improved implementation of sweepline intersection algorithm to avoid use of dynamic set.
<li>Fixed bug in ConvexHull.cleanRing()
<li>Refactored RobustLineIntersector and NonRobustLineIntersector
</ul>

<!----------------------------------------------------------------------->
<hr size='4' color='darkblue'>
<h2>Version 0.0</h2>
Release Date: 30 May 2001

<p>
<i>Baseline version</i>

</body>
</html>
