Tag Archives: Martin Davis

Martin Davis (Dr. JTS) Wins Sol Kats Award for 2011

Martin Davis has won the Sol Katz Award for 2011! I’ve nominated Martin several years in a row, and I’m glad he is finally getting the recognition he deserves for his hard work on JTS and his contributions and support of OpenJUMP.

Good job Martin!

The Sunburned Surveyor

JTS Version 1.12 Released

Martin Davis announced on June 25, 2011 that he was releasing a new version of the absolutely awesome and world class computational geometry library, JTS (Java Topology Suite). JTS is open source and written in the Java programming language. It is the geometry engine used in OpenJUMP.

You can download Version 1.12 of JTS from the JTS SourceForge web page.

In his e-mail to the JTS user mailing list announcing the release, Martin Davis provided details on changes and improvements in the new release of JTS, which I repeat below. I hope I will have time to investigate and write about some of the improvements and new features of JTS 1.12 soon.

The Sunburned Surveyor

JTS Functionality Improvements

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

JTS Performance Improvements

  • Improved memory performance of ShapeWriter conversions (by tuning coordinate and polygon conversion)
  • Improved performance of RectangleIntersects by refining SegmentIntersectionTester

JTS Robustness Improvements

  • Delaunay triangulation uses more robust formulation for the inCircle test
  • Voronoi computation now uses more robust formulation for the circumcentre computation
  • Force RectangleIntersects to always use segment-scanning to improve robustness

JTS API Changes

  • Reduced visibility of internal classes in com.vividsolutions.jts.geom.prep
  • Reduced visibility of internal classes in com.vividsolutions.jts.simplify
  • Moved Matrix class into jts.math package
  • Refactored internal offset curve generation classes in com.vividsolutions.jts.operation.buffer package

JTS Bug Fixes

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

JTS TestBuilder Functionality Improvements

  • Added [Zoom To Result] button
  • Improved mark display, with floating point label
  • Added more random geometry creation functions
  • Added fractal geometry creation functions
  • Improved threaded rendering handling to ensure only one frame drawn
  • Added Magnify Topology capability
  • Added Geometry Inspector dialog
  • Better startup script, with auto-home directory detection and JTS_LIB_DIR environment variable (thanks to strk)
  • Added logging Info window behaviour

JTS TestBuilder Bug Fixes

  • Fixed Stats panel to update when current test changes
  • Fixed deleting single test case