Wednesday, April 22, 2020

GeoTools 23.0 released

The GeoTools team is pleased to share the availability GeoTools 23.0:
This release is published to our new osgeo maven repositoryand is made in conjunction with GeoServer 2.17.0.

OpenSource is a team effort and we would like to thank everyone who helped to test the release candidate: Ian Turton, Andrea Aime, Jody Garnett and the team at GeoCat, Jim Hughes and Emilio Lahr-Vivaz from CCRi, and Mark Prins. Thanks also to Ian Turton and Andrea Aimie for making this release.

This release is an easy upgrade with only API additions!

New Features

New Maven repository

The GeoTools project is taking advantage of the new repo.osgeo.org maven repository, and has changed from using our long standing downloads.osgeo.org webdav folder.

This change effects all projects using GeoTools and requires a change to your pom.xml. For detailed instructions on how upgrade, or how to continue to use an older version, please see our user guide.
Thanks to OSGeo system admin committee for this service, and Jody Garnett and Torben Barsballe for making the change.

Rendering

New capabilities have been added:
  • markAlongLine vendor option for LineSymbolizer, defining a stroke made up of a continuous well-known-mark along a line.
  • Fixed excessive space between lines when Arabic characters are used.
  • Labeling with a background graphic has been slightly adjusted and should result in more labels being placed
  • Labeling now uses less memory
  • DataStores can now supply a clipping area when rendering features, used to better respect MBTiles rendering model
  • Detected that autoharp and follow line cannot both be used at the same time
  • Vendor option to disable SLD gray square fallback (if no graphic or mark provided)
A new listener has been added to keep track of the rendering process, this is primarily used to track the rendering time.
  • RenderListener.layerStart(layer)
  • RenderListener.layerEnd(layer)
  • RenderListener.labellingStart()
  • RenderListener.labellingEnd()
  • RenderListener.renderingComplete()
For more details see the change proposal by Marco Volpini (GeoSolutions).

New Mapbox Style Extension

New to this release is a MBStyle Extension providing parsers, functions and icon factories to support the rendering content using the Mapbox Style specification.

Thanks to Andrea (GeoSolutions) for extensive quality assurance comparing rendered output to Mapbox.GL:
  • GeoTools now supports hsl/hsla color expressions
  • Extensive work to reverse engineer an appropriate font name when provided a glyphs reference
  • Fix halo default color to black
  • Ignore partials=true which allowed labels to be cut off at the edge map boundaries (making it impossible to stitch tiles together in a legible fashion).
  • Symbols are now generated into the TextSymbolizer and subject to conflict resolution along side labeling resulting in much improved legibility. This change required an API change to TextSymbolizer to support use of a graphic offset to match the functionality of PointSymbolizer.
  • Fix to ExponentialFunction to match appearance between GeoTools and Mapbox.GL.
  • Fix zoom / property interpolation for line gaps and text anchors with the introduction of additional functions.
  • Fix zoom / property interpolation when using floating point values.
  • Transform text offset defined in wms to pixels for GeoTools use.
  • Fix for zoom level rendering (it was off by one resulting in a different visual appearance)
  • Missing symbols are no longer shown, rather than marked with an SLD default square.
  • Dash array now scaled by line width
  • Use "group" and "labelAllGroup" labeling options to prevent lines being labeled multiple times (when split across several tiles).
  • Label priority defined based on MBStyle layer order to match visual appearance of Mapbox.GL
Thanks to Jody (GeoCat) for packing this up as an extension.
MBStyles is recognized as an extension (rather than a plugin) as it provides additional functionality that builds on-top of the core GeoTools library.

New CSV DataStore Plugin

Ian Turton, sponsored by Alamon  has been improving GeoTools CSV DataStore:
  • Extensive fixes including: consistent handling of WKT Geometry, and correctly handling an empty line at the end of the file, correct axis order for LatLonStrategy, 
  • Support a new "writeprj" connection parameter to support the use of an external prj file
  • Can now create a new file
Thanks to Ian's work this module has now graduated from "unsupported" status and included as part of the GeoTools library. The CSV module is a considered a "plugin" as it does not provide any additional API and is picked up by the core GeoTools library as an additional file format.

GeoPackage DateTime Support

GeoPackage correctly handles DateTime field (both respecting encoding as string and handling of Date across timezones). Thanks to David Blasby and Richard Duivenvoorde for this work.
This fixed revealed a considerable performance penalty which Andrea was able to resolve with a strategic change to the VisitorResult classes:
  • VisitorResult.getResultType(Class[] inputs)

ImageMosaic

When using ImageMosaic using with a mix of granules from different coordinate reference systems requests with a coordinate reference system matching a gradual are no longer forced to retroject via WGS84.

To support this GridCoverageRendererUtilities avoids resampling the first coverage.

Improvements and Fixes

Public service announcement:
  • Java 8u212 onward has slightly changed the handling of File references on windows shares; please keep this in mind when upgrading.
From our issue tracker release-notes:
  • Adds ability to read in Measure values from shapefiles. There are 3 variants of each geometry e.g. POINT, POINTM and POINTZ. Z values always carry an M value. These changes allow GeoTools 23.0 to read in and handle these M values when present.
  • GeoPackage support for two special srs_id -1 and 0 that match to generic CRSs
  • Fix ImageWorker getHistogram cache, so a new value is calculated if low, highs or binsNum  change.
  • Fix a GeoPackage test verifying handling of SQL "in" statements
  • Shapefile DataStore was fixed work around a Java API change to java.nio.ByteBuffer.clear()
  • Added AUTO:97003 for an auto Azimuthal Equidistant projection
  • WMTS can now access contact information, and the "image/jpgpng" format.
  • You can now create oval vector grids
  • Databases can now make use of UUID as a primary key.
  • Fixed issues with Query sortBy field not being considered when testing if two queries are the same, or when combining two queries together.
  • The type model has a series of fixes to better support the use of user data associated with each feature.
  • Our type model was initial developed with GML in mind and had some restrictions around the use of special characters such as ":", these restrictions have been removed when working with other data sources such as CSV and GeoJSON).
  • PostGISDataStore.getSQLTypeNames() performance improved for for PostGIS databases with 20k tables.
  • wms-client fixes to use default image format specified in GetCapabilities, and timeout listing published styles. The API for WMSLayer and WMSCoverage reader were updated to support this fix.
  • Fix PostGIS prepared statements use of TWKB to request point geometry
  • MongoDB no longer supports the "org.geotools.data.mongodb.complex.useLegacyPaths" flag
  • Resolved difficulty reading shapefile with the FEATURE_2D enabled
  • Application Schema correctly handles an empty collection (when using a multi-valued join)
  • KML DataStore checks file extension

Research and Development Updates

Our "unsupported" module area remains a hot-bed of research and development. We invite developers to contribute to the following work-in-progress:
  • GeoJSON DataStore respect of axis order and use of Jackson library to handle variable schemas (Sponsored by Alamon)
  • Andrea has started an mbtiles-vector datastore for reading an mbtiles file stitching vector content features from the tiles, using the maximum zoom level, and a lower zoom level if geometry distance hints are provided.
  • An elastic search community module has been provided by by Stephen Gaffigan, building on from ElasticGeo starting point.
  • The ArcSDE datastore is no longer actively maintained and is now an unsupported module.
  • Solr DataStore fixes to tests and encoding of BBOX filter
  • WFS client was tripping up on WFS 2.0 services, it now recognizes that the internal filter PropertyIsEqualTo can be encoded as WFS 2.0 EqualTo, thanks to Matthias for the fix.
  • WFS client can now be configured with a larger connection pool when handling multiple concurrent requests, thanks to Mike Glazer for the fix.
  • A new Flatgeobuf DataStore experiment has been started 
If you are interested in contributing to these modules, or starting your own research and development activity, please see our developers guide for details.

About GeoTools 23 Series

GeoTools 23:
For more information see the release notes (23.023-RC)