Skip to content

Add new outputformat geotiff-cog - #4166

Open
franklgln wants to merge 18 commits into
mapfish:masterfrom
franklgln:feat/geotiff-cog
Open

Add new outputformat geotiff-cog#4166
franklgln wants to merge 18 commits into
mapfish:masterfrom
franklgln:feat/geotiff-cog

Conversation

@franklgln

Copy link
Copy Markdown

This PR adds support for a new GeoTIFF COG output format. (#3805)

The implementation has been reworked to follow the project’s contribution workflow. The changes are based on the latest codebase, target the master branch, and comply with the pre-commit hooks and formatting rules.

All checks pass locally.

@sbrunner sbrunner changed the title feat: add new outputformat geotiff-cog Add new outputformat geotiff-cog May 20, 2026
@sbrunner
sbrunner requested a review from Copilot May 20, 2026 12:01

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new cog output format intended to generate Cloud Optimized GeoTIFF (COG) results from MapFish Print, wiring the format into the Spring output-format registry and introducing a dedicated JasperReports-backed GeoTIFF exporter.

Changes:

  • Registers new cog output format beans for both standard (JasperReport) and map-export templates.
  • Introduces JasperReportGeoTiffOutputFormat to render a Jasper report to an in-memory image and write it as a GeoTIFF-like output via GeoTools.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 7 comments.

File Description
core/src/main/resources/mapfish-spring-config-output-formats.xml Adds cog output format bean registrations for standard and map-export modes.
core/src/main/java/org/mapfish/print/output/JasperReportGeoTiffOutputFormat.java New output format implementation that renders JasperPrint pages to an image and writes a tiled/compressed GeoTIFF to the response.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread core/src/main/resources/mapfish-spring-config-output-formats.xml Outdated
Comment thread core/src/main/resources/mapfish-spring-config-output-formats.xml Outdated
Comment thread core/src/main/java/org/mapfish/print/output/JasperReportGeoTiffOutputFormat.java Outdated
Comment thread core/src/main/java/org/mapfish/print/output/JasperReportGeoTiffOutputFormat.java Outdated
Comment thread core/src/main/java/org/mapfish/print/output/JasperReportGeoTiffOutputFormat.java Outdated
Comment thread core/src/main/java/org/mapfish/print/output/JasperReportGeoTiffOutputFormat.java Outdated
Comment thread core/src/main/java/org/mapfish/print/output/JasperReportGeoTiffOutputFormat.java Outdated
@sebr72
sebr72 self-requested a review August 18, 2026 11:59
@sebr72 sebr72 linked an issue Aug 20, 2026 that may be closed by this pull request

@sebr72 sebr72 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work. Thanks.
Do not hesitate to ask any question/help to implement these comments.

Comment thread core/src/main/java/org/mapfish/print/output/MapCogExportOutputFormat.java Outdated
Comment thread core/src/main/java/org/mapfish/print/output/MapCogExportOutputFormat.java Outdated
Comment thread core/src/main/java/org/mapfish/print/output/MapCogExportOutputFormat.java Outdated
} finally {
if (writer != null) {
try {
writer.dispose();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since your output stream is a non closing one, this dispose is not sufficient. You will need to manually call the close in the superclass of your nonClosingOutputStream.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The underlying output stream is owned by MapFish Print and must remain open. Calling FilterOutputStream.super.close() would also close that stream, which is exactly what the wrapper is intended to prevent. GeoTools closes its internal stream during dispose(), while the wrapper only flushes the MapFish stream. Do you have a different cleanup approach in mind?

Comment thread core/src/main/java/org/mapfish/print/output/MapCogExportOutputFormat.java Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support of Cloud Optimized GeoTIFF format

6 participants