The GeoTools team is pleased to announce the release of the latest stable version of GeoTools 30.0:
This release is also available from the OSGeo Maven Repository and is made in conjunction with GeoServer 2.24.0, GeoWebCache 1.24.0 and MapFish Print v2 2.3.0. We are grateful to Peter Smythe (AfriGIS) and Jody Garnett (GeoCat) for carrying out the release.
org.opengis package removal
One of the biggest changes in this release is the renaming of all "org.opengis" packages into "org.geotools.api" ones, to satisfy a request coming from OGC members that manage the "GeoAPI" project, using the same package space. See blog post from 2011.
While this is an extensive breakage, we have prepared migration scripts that can help automating the switch, and which have already been used for migration of GeoWebCache and GeoServer, along with MapFish print and GeoFence, with only a small amount of manual changes left to make. In particular, GeoServer was the only project requiring any manual intervention.
In addition to the package rename, we leveraged the occasion to perform some more API clean-ups, including:
- The core data API has been moved from "org.geotools.data" to "org.geotools.api.data"
- The ISO geometry interfaces, left without implementation for a few years, have been removed. The few bits that used them has been migrated to JTS geometries.
- Most of the "org.geotools.metadata" package is gone, as these classes and interfaces had no usage in GeoTools, GeoWebCache or GeoServer.
- Internationalized error message support has been removed.
- "org.opengis.geometry.Envelope" has been renamed "org.geotools.api.geometry.Bounds" and some of the confusion related to the proliferation of envelope-related classes has been cleared.
The above-mentioned script is performing refactors to adapt downstream code for the above changes as well.
The detailed list of changes, as well as the migration scripts, can be found in the GeoTools upgrade guide.
Some downstreams projects also started adapting the script to other languages, this ticket contains an example for Scala, from the GeoMesa project.
Remove OpenGIS proposal
This work was performed by Ian Turton (ASTUN Technologies), Jody Garnett (GeoCat) and Andrea Aime (GeoSolutions). A proof-of-concept was performed at the FOSS4G 2023 code sprint, and the vast majority of the work accomplished at the Bolsena Code Sprint 2023. See Remove OpenGIS proposal.
Thanks to Open Source Geospatial Foundation for funding this activity and supporting the ecosystem of affected downstream projects. This activity was proposed as joint-initiative to be addressed with other organizations (notably the Open Geospatial Consortium responsible for GeoAPI, and the Apache Foundation making the request). Only OSGeo was forthcoming with and funding, and sharing the sponsorship opportunity with their members. The ability to respond to sustaining activities like this, that do not attract interest from sponsors, is a clear example of a the role open source software foundations fulfill.
We remind everyone to continue to support OSGeo with your financial contributions (you may also choose to directly support GeoTools in this manner).
We sincerely thank all users and downstream projects who have tested out the migration scripts when the candidate was released as 30-RC.
Thanks to Mark Prins for early testing of the release candidate and update script: Upgraded some of our projects last week, most of them took me less than 10 mins to produce a PR. All testsuites pass. Only thing I ran into was we had our own "Bounds" object somewhere in our own API and that started conflicting with the upgraded code.
Thanks to Ian Turton for testing: Everything went pretty well in the repos I've tested. A few `ReferencedEnvelope.creates(` didn't get picked up by the conversion tool but nothing too severe.
The map fish-print-v2 library was updated by Jody Garnett with support from Sébastien Riollet.
The GeoFence project was updated by Andrea Aime with support from the GeoSolutions team.
GeoServer was updated as part of this activity, with a release candidate being tested by the GeoServer community.
GeoNode has tested a release candidate, thanks to Giovanni Allegri for testing.
GeoMesa has tested a release candidate, thanks to Emilio Lahr-Vivaz for testing, and providing a Scala update script shared above.
GeoNetwork has been tested by Jody Garnett, with François Prunayre providing a review.
GeoWave has tested a release candidate, thanks to Grigory Pomadchin for testing.
Support for planetary CRSs, EPSG assumption removal
The new gt-iau-wkt module provides support for planetary CRSs, sourced from the International Astronomical Union. This allows users to manage GIS data over the Moon, Mars, or even the Sun, with well-known, officially supported codes.
In addition to that, many bug fixes occurred in the management of CRSs and their text representations (plain codes, URL, URIs) so that the EPSG authority is no longer assumed to be the only possibility.
The code base has seen this assumption for twenty long years already, and while we made a good effort to eliminate the assumption, it could be still lurking in some places. Please test and let us know.
Allow to exercise control over remote, user-provided graphics and marks
Much of the code dealing with OGC protocols is designed to follow URLs, some of which might originate from user requests or from remote server responses.
The new URLChecker interface, along with its associated SPI interface, allows users to plug in custom checks to confirm whether a particular URL should be followed. Currently, checks are implemented for remote graphics and marks, with more checks to be implemented in the future.
All other changes
See Release Notes from 30.0 and 30-RC
Bug
GEOT-7363 ParseException if returning POLYGON EMPTY
GEOT-7434 ElasticSearch throws repeated point exceptions on small bbox filters
GEOT-7457 Failing to read empty FlatGeobuf
GEOT-7458 JDBCDataStore: Unique visitor not always compatible with sortBy
GEOT-7465 GML2EncodingUtils.toURI fails with the Web Service authority
GEOT-7472 After the org.opengis package removal, gt-api jar is not included in bin download
GEOT-6266 Generating GeoPackage fails when layer name has spaces or dashes
GEOT-7224 Error in pom lines.
GEOT-7266 WMTSCapabilities throws NPE for missing title
GEOT-7267 GML encoding forces URL SRS syntax on one-dimensional CRS
GEOT-7313 gt-geobuf: Failed to decode a SimpleFeature with a property name of "geom"
GEOT-7318 Unit of measure not escaped in DWithin filter
GEOT-7324 NPE on WMTS single tile request on missing GetTile operation in capabilities
GEOT-7325 WMTS multi tile request is not compatible with RESTful servers
GEOT-7338 Child feature ClientProperties are duplicated on Complex features parent container elements from the child feature
GEOT-7344 Child feature ClientProperties are duplicated on no-GML XML element parent container from the child elements
GEOT-7347 Update PMD to version 6.55
GEOT-7357 Rendering problem with polygon marker fills
GEOT-7359 GeoTiffMetadata2CRSAdapter improperly parses custom CRS definitions
GEOT-7366 Document FilterToSQL is not thrad safe
GEOT-7383 Distance element of DWithin filter should have an attribute "uom"
GEOT-7386 Shape://dot is too small to see on screen
GEOT-7389 GeoTIFF writer does not dump custom CRSs correctly
GEOT-7390 Extend GML CRS encoding to support multiple authorities
GEOT-7392 ReprojectFeatureResult.getBounds() does not report target CRS
GEOT-7393 WFS multi-Feature collection encoding fails when collections don't share the same CRS
GEOT-7397 PostGIS online tests fail on recent postgresql due to double comparison issue
GEOT-7404 Add SQLite Connection Timeout in case of hung GeoPackage connections
GEOT-7442 Make ErrorProne run on Windows
GEOT-7444 HanaGeographyOnlineTest.testBounds is failing in CI
Improvement
GEOT-7429 Vector Mosaic add native retyping support when query is exclusively granule or index fields
GEOT-7451 Upgrade org.json:json to 20230618
GEOT-7352 Add false easting and northing support in Robinson projection
GEOT-7354 Add support for standard parallel in equirectangular projection
GEOT-7360 DWITHIN support for mongo DB
GEOT-7361 Support non EPSG authorities in DataUtilities type spec, and property data store
GEOT-7368 Expose IAU authority in both axis orders
GEOT-7387 Improve URL checking
GEOT-7398 Support other CRS authorities in PostGIS
GEOT-7413 Avoid needless type conversions in InterpolateFunction
GEOT-7414 Speed up style evaluation during rendering, by simplifying its expressions before execution
GEOT-7416 org.geotools.feature.NameImpl.compareTo creates garbage objects
GEOT-7418 Add a configuration parameter to the ElasticSearch plugin to support response greater than 100mb
GEOT-7421 Caching WKT parsing results
GEOT-7425 Add support for extended colorMap in CSS
GEOT-7431 Support custom HTTP headers for WFS-Client (and underlying HTTP-Client)
GEOT-7435 ESRI Shapefile read gzipped input files
New Feature
GEOT-6512 Control remote HTTP requests sent by GeoTools
GEOT-7287 Refactor to remove org.opengis interfaces
Task
GEOT-7317 Upgrade snakeyaml from 1.32 to to 2.0
GEOT-7336 Update to ErrorProne 2.18
GEOT-7341 Update Spotbugs to 4.7.3
GEOT-7349 Further support for Saxon
GEOT-7355 New CRS plugin providing IAU CRSs for planetary mapping
GEOT-7364 Bump sqlite-jdbc from 3.34.0 to 3.41.2.2
GEOT-7373 Bump hsqldb from 2.7.1 to 2.7.2
GEOT-7374 Upgrade Jackson to 2.15.2
GEOT-7375 Upgrade guava from 30.1.1 to 32.0.0
GEOT-7376 Upgrade postgresql from 42.4.3 to 42.6.0
GEOT-7378 Upgrade commons-lang3 from 3.8.1 to 3.12.0
GEOT-7379 Upgrade commons-io from 2.10.0 to 2.12.0
GEOT-7394 Upgrade httpclient from 4.5.13 to 4.5.14
GEOT-7396 Upgrade wiremock to 2.35.0
GEOT-7437 Avoid use of yield keyword for JDK 17 compatibility
GEOT-7440 Update maven plugin versions
GEOT-7443 Remove JDK 11 profile and rename associated JDK 11 Test
GEOT-7445 Revert maven javadoc plugin upgrade