Friday, July 25, 2014

GeoTools 12-beta Released

The GeoTools community is delighted to announce availability of GeoTools 12-beta for testing:
This release is made in conjunction with GeoServer 2.6-beta.

We will provide a more detailed feature list for the final 12.0 release, for now check out the GeoTools 12-beta Release Notes.

This beta release is provided for integration testing. Earlier this year we slowed down our release cycle for better collaboration. At this time we ask downstream projects to perform a smoke test and highlight any issues found.

Priority should be given to testing the following functionality:

Java 7
We have changed our source compile options to 1.7, you will need to use OpenJDK 7 or Oracle JDK 7 to this release of GeoTools. While upgrading to Java 7 take advantage of the try-with-resource syntax which is compatible many GeoTools constructs. 

try (SimpleFeatureIterator iterator = featureCollection.features()){
   while( iterator.hasNext() ){
     SimpleFeature feature =;

You can see the original proposal for details.

Thanks for CSIRO, Boundless and GeoSolutions for updating the build servers so we could make this transition in a responsible fashion.

The wfs-ng client is now ready for widespread use, acting as a drop-in replacement (making use of the same connection parameters). A great deal of attention has been paid to support axis-order corrections allowing the wfs-ng client to work with all manner of ill-behaved WFS implementations. 

String getCapabilities = "http://localhost:8080/geoserver/wfs?REQUEST=GetCapabilities";
Map connectionParameters = new HashMap();
connectionParameters.put("WFSDataStoreFactory:GET_CAPABILITIES_URL", getCapabilities );
DataStore dataStore = DataStoreFinder.getDataStore( connectionParameters );

In order to make wfs-ng a drop-in replacement (and respond to the same connection parameters) you are limited to only using one of the gt-wfs and gt-wfs-ng plugins in your application at a time.

advanced raster reprojection
A lot of work has been put into improving the raster reprojection story for glitches around the date line and polar regions. To enable these options use the following rendering hints:

rendererParams.put(StreamingRenderer.ADVANCED_PROJECTION_HANDLING_KEY, true);

rendererParams.put(StreamingRenderer.CONTINUOUS_MAP_WRAPPING, true);

We have set these parameters by default for GeoServer 2.6-beta so you are in good company for this test.

circular string
This release of GeoTools include new abilities for the WKTReader2 allowing it to read CIRCULAR string. This is especially exciting as it makes use of series of subclass of JTS LineString. These subclasses will use a tolerance to produce appropriate  coordinates for integration with JTS Geometry operations. As far as JTS is concerned they walk and talk like a LineString, while you can control the implementation by defining control points and a tolerance.

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
CurvedGeometryFactory curvedfactory = new CurvedGeometryFactory(Double.MAX_VALUE);    
WKTReader2 reader = new WKTReader2(curvedfactory);
CircularString arc = (CircularString)"CIRCULARSTRING(10 14,6 10,14 10)");

For more details check out the geometry documentation.  The original proposal is also online. 
LineString subclasses supporting Arcs
This implementation has been integrated with OracleDataStore (for all those data sets that include circular arcs). We are also interested in feedback on CurvedGeometryFactory as the API is only a few weeks old.

We are waiting on documentation for a couple of changes, stay tuned for details on:
  • image mosaic vector foot prints
  • coverage views

About GeoTools 12

GeoTools 12 is scheduled for release in Q2 highlighting the following features:
  • Java 7 is now required
  • wfs-ng client with new GML parsing engine
  • Support for curved strings via CurvedGeometryFactory, WKTReader2 and Oracle