Skip to content

Publish release 4.0.0#924

Merged
matzf merged 1 commit into
mainfrom
feature/publish-4.0.0
Jul 13, 2026
Merged

Publish release 4.0.0#924
matzf merged 1 commit into
mainfrom
feature/publish-4.0.0

Conversation

@matzf

@matzf matzf commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

This is a squash of the history of the 4.0.0 release.

  • Updated to AGP 9.2.1 and Kotlin 2.4.0
  • Added KMP library version
  • Added web bindings
  • Added support for CRS specification in vector layer styles
  • Support added for rotated icons in IconLayer
  • Added configuration options for animated dashed lines in vector layer styles
  • Added support for circles for point features in the tiled vector layer
  • Moved to GPU tessellation for Android and iOS
  • Extended the MapCamera3d modes with additional modes and options for custom view/projection matrices
  • Experimental: Added a displaced raster layer for utilizing elevation-data and raster tile pyramids to display 3D-displaced terrain
  • Numerous fixes and performance improvements

This is a squash of the history of the 4.0.0 release.

- Updated to AGP 9.2.1 and Kotlin 2.4.0
- Added KMP library version
- Added web bindings
- Added support for CRS specification in vector layer styles
- Support added for rotated icons in IconLayer
- Added configuration options for animated dashed lines in vector layer styles
- Added support for circles for point features in the tiled vector layer
- Moved to GPU tessellation for Android and iOS
- Extended the MapCamera3d modes with additional modes and options for custom view/projection matrices
- Experimental: Added a displaced raster layer for utilizing elevation-data and raster tile pyramids to display 3D-displaced terrain
- Numerous fixes and performance improvements

Co-authored-by: Bastian Morath <morath@ubique.ch>
Co-authored-by: Christoph Maurhofer <maurhofer@ubique.ch>
Co-authored-by: Daniel Sparber Co-authored-by: <sparber@ubique.ch>
Co-authored-by: Jeremias Jutz <jutz.jeremias@gmail.com>
Co-authored-by: Marco Zimmermann <zimmermann@ubique.ch>
Co-authored-by: Matthias Felix <felix-github@ubique.ch>
Co-authored-by: Matthias Frei <frei@ubique.ch>
Co-authored-by: Mike Wong <wong@ubique.ch>
Co-authored-by: Nicolas Märki <maerki@ubique.ch>
Co-authored-by: Noah Bussinger <bussinger@ubique.ch>
Co-authored-by: Remo Dietlicher <dietlicher@ubique.ch>
Co-authored-by: Stefan Mitterrutzner <mitterrutzner@ubique.ch>
@matzf
matzf requested a review from maurhofer-ubique July 13, 2026 13:13

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f664747dba

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".


Tiled2dMapZoomLevelInfo prevZoom = zoomLevelInfos.back();

for (auto it = zoomLevelInfos.begin() + minZoomLevel; it != zoomLevelInfos.end() + maxZoomLevel; ++it) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Stop iterating past irregular zoom levels

For irregular configs such as EPSG2056/EPSG21781, when zoomIdentifier is at or above the last configured level, this loop uses zoomLevelInfos.end() + maxZoomLevel as its sentinel. That is far past the one-past-end iterator, so the loop continues after reaching end() and dereferences an invalid iterator, causing undefined behavior/crashes or bogus zoom factors. Stop at the valid end of the selected level range instead.

Useful? React with 👍 / 👎.

underzoom,
overzoom,
levels,
coordinateReferenceSystem,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve CRS from raster TileJSON URLs

When a raster source is specified via url, coordinateReferenceSystem is only filled from the outer source before the TileJSON is loaded. TileJSONs that carry CRS in metadata.crs now reach this constructor as nullopt, so getLayerConfig treats EPSG:2056/21781 raster sources as EPSG:3857 and requests/renders the wrong tiles. Parse the loaded TileJSON metadata before constructing the raster source.

Useful? React with 👍 / 👎.

@matzf
matzf merged commit 82c1fac into main Jul 13, 2026
2 checks passed
@matzf
matzf deleted the feature/publish-4.0.0 branch July 13, 2026 13:50
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.

2 participants