| <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 > 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> |