Releases: Mapsui/Mapsui
5.0.2
Small release mostly to fix the 'minX can not be greater than maxX' error that could occur when a geometry was empty. This bug was already in v4. This now became apparent because in v5 MRect throws on invalid input instead of fixing it.
What's Changed
🐛 Fixes
- Fix invalid extent returned by empty geometry to avoid "minX can not be greater than maxX" error by @pauldendulk in #3253
⚙️ Infrastructure
- Pack only library projects in Release Nugets workflow to avoid Android AOT failures by @Copilot in #3252
☢️ Experimental
- Add MapInfo to the VectorTileStyleRenderer by @pauldendulk in #3259
Full Changelog: 5.0.1...5.0.2
5.0.1
What's Changed
🐛 Fixes
- Remove Avalonia.Reactive by @pauldendulk in #3239
- Fix style on features not working in AnimatedPointLayer by @pauldendulk in #3246
🛠️ Maintenance
- Add .github/copilot-instructions.md for GitHub Copilot guidance by @Copilot in #3247
- Realize a number of maintenance tasks by @pauldendulk in #3249
⚙️ Infrastructure
- Do not build when it is not needed by @pauldendulk in #3224
- Use same Uno.Check version so that at least our story makes sense by @pauldendulk in #3240
🧪 Samples
- Add HugeShapeFileWithSimplifierAndClippingSample by @pauldendulk in #3228
📝 Documentation
- Update WPF quickstart to CLI-first with complete code examples by @Copilot in #3234
- Update documentation to use dotnet CLI for NuGet installation by @Copilot in #3235
- Fix quickstart documentation errors found during isolated build testing by @Copilot in #3236
- Split Avalonia quickstart into separate XAML and C# steps with full diff blocks by @Copilot in #3237
☢️ Experimental
- Add the Mapsui.Experimental.Rendering.Skia project by @pauldendulk in #3227
- Add experimental VectorTileRenderer, VectorTileFeature and VectorTileStyle by @pauldendulk in #3231
- Pass the IFeature along in the experimental CustomPointStyleRenderer by @pauldendulk in #3248
Full Changelog: 5.0.0...5.0.1
5.0.0
Mapsui 5.0.0
The focus of Mapsui v5 was more shared code across all frameworks and platforms. This was necessary because over time we started to support more UI Frameworks - currently ten (like MAUI, Avalonia and Uno Platform) - which individually support multiple platforms (like Windows, Android, iOS, WASM). To keep this maintainable we try to contain the bulk of the code in cross-framework/platform projects. Some specific topics we worked on for this release:
- Harmonize the pointer events (mouse and touch). We map the UI Framework pointer events to our shared code early on so that most of the related code is cross platform: https://mapsui.com/v5/touch-and-mouse-handling/
MapInfocan now be requested with aGetMapInfomethod on all our pointer events' EventArgs. In v4 we only had an Info event which contained the MapInfo: MapInfo: https://mapsui.com/v5/mapinfo/- All data fetching is now done by a central
DataFetcher, making it easier to control the number of requests going out. - Handling images (SVGs and bitmaps) was rewritten so that you can specify a path to the image so that you do not have to load it in user code. There are also various options that allow for more flexibility: https://mapsui.com/v5/imagesource/
- The
LayerCollectionnow supports a basic mechanism for layer grouping. - Simplify navigation at startup by postponing the navigation call until the
MapControlis initialized. Because of this the Map.Home method could be removed. - Many more things, just scroll through the 562 PRs below 😄
Upgrading from v4 to v5
There were plenty of breaking changes. We created an incomplete upgrade guide. It might help to ask Copilot to upgrade with this page as input: https://mapsui.com/v5/v5.0-upgrade-guide/
You could also feed it pages about the new functionality:
- Images: https://mapsui.com/v5/imagesource/
- MapInfo: https://mapsui.com/v5/mapinfo/
- Pointer events: https://mapsui.com/v5/touch-and-mouse-handling/
The folder with html pages of our code samples may also help:
https://github.com/Mapsui/Mapsui/tree/main/Samples/Mapsui.Samples.Blazor/wwwroot/codesamples
The upgrade guide is not complete. If you find tough issues that should be in there please post it on this discussion: #3220
Our general documentation is here: https://mapsui.com/v5/
You could compare it with the v4 documentation over here: https://mapsui.com/v4/
What is next?
This is an organically growing project and we do not have a long term planning, but these are our intentions:
- The first thing to work on: Improve rendering. Rewrite it to be more performant. Improve vector tile rendering. We will add a Mapsui.Experimental.Rendering.Skia NuGet that can be used alongside the stable v5 releases.
- Shorter release cycles. This means we release when significant new functionality was added, and we won't postpone the release to add something else.
- The most painful missing feature is world wrap-around. This will be added at some point but we can not promise this will be in v6.
- In our roadmap we mention some other things that could be considered for v6: https://mapsui.com/v5/roadmap/#mapsui-6-options
- Mapsui will continue to grow and improve. Mapsui has been around for quite a while and will continue for even longer. We are in a good position right now where we can support many UI frameworks with a maintainable code base. It will improve further, step by step.
Thanks!
- Thanks to everyone who contributed. See our contributors here: https://github.com/Mapsui/Mapsui/graphs/contributors
- Thanks to the v5's new contributors, mentioned at the bottom of this post.
- Thanks to the projects that we depend on. To name a few: SkiaSharp, NTS, BruTile, Svg.Skia, VexTile.TileSource.Mvt.
- Thanks to all the UI Frameworks that are the reason Mapsui exists at all.
- Thanks to the many users that came up with bug reports and suggestions.
- Thanks to our sponsors.
What's Changed from 5.0.0-rc.3 to 5.0.0
🐛 Fixes
- Fix IndexOutOfRangeException in LayerCollection by @pauldendulk in #3219
📦 Updates
- Update BruTile to 6.0.0 by @pauldendulk in #3212
🧪 Samples
- Update html for sample site by @pauldendulk in #3205
- Remove some more suppressions in samples by @pauldendulk in #3206
📝 Documentation
- Add page about experimental packages by @pauldendulk in #3209
- Fix v5 api docs website by @pauldendulk in #3213
- Deploy index.html to root of website by @pauldendulk in #3216
Full Changelog: 5.0.0-rc.3...5.0.0
What's Changed from 4.0.0 to 5.0.0
- Added Render Canvas Benchmarks by @inforithmics in #1820
- Wms Projection with DotSpatial (EPSG:6706 as sample) by @inforithmics in #2073
- Update README.md by @pauldendulk in #2076
- Add AnimatedPointsSample to exluded list by @pauldendulk in #2077
- Update home.md by @pauldendulk in #2078
- Building Xamarin.Forms stuff on MacOS by @janusw in #2084
- Upgrade to skiasharp 2.88.6 by @pauldendulk in #2086
- Fix touch in MAUI sample by using a Border iso Frame. Fix for #2087 by @pauldendulk in #2089
- Update roadmap.md by @pauldendulk in #2091
- Fix mouse wheel zoom on FireFox by @pauldendulk in #2093
- fixed naming of sample by @inforithmics in #2095
- Update Svg.Skia to 1.0.0 by @janusw in #2099
- Avalonia release version 11.0.0 by @inforithmics in #2101
- Avalonia Add other Platforms to Samples (Desktop, iOS, Android,Browser) by @inforithmics in #2102
- Adding Mapsui.UI.Blazor.targets for fixing HarfbuzzWasm issue (inspired by Avalonia.Browser) by @inforithmics in #2103
- Use nugets to compile samples (reenable it) by @inforithmics in #2104
- RasterizingTileLayer handles DataChanged now with: Clear Cache After SourceLayer changes by @inforithmics in #2106
- Fix null reference exception in timer by @inforithmics in #2108
- Make HTTPMessage Method upper case and make network requests on the Background by @inforithmics in #2109
- Fixing Async warnings by @inforithmics in #2112
- fixing build (Because of .Net Framework updates) by @inforithmics in #2113
- Demo to show a possible way to add weather data as image to a map by @charlenni in #2124
- Remove Xamarin from iOS and Android because they are based now on .NE… by @inforithmics in #2125
- Remove TouchState from MAUI (was somehow copied from Blazor) by @inforithmics in #2126
- fixed counterclockwise rotation by @inforithmics in #2128
- Added Edit Events to Android and iOS by @inforithmics in #2131
- Simplify editing widget by @inforithmics in #2133
- Additional wms fixes by @inforithmics in #2134
- Fixing tiling with symbols by @inforithmics in #2137
- Add caching of symbols by @inforithmics in #2138
- Fixing Build with Visual Studio 17.7 by @inforithmics in #2143
- Add a new way for dragging: now supports to drag the whole feature on the map. by @cecildelakers in #2147
- only one vertexcoordinate - determine by draggingfeature if I'm draggin… by @inforithmics in #2148
- Sqlite update 2.1.6 (for .Net 8 Blazor Compatibility) by @inforithmics in #2151
- remove toUpper from ColumnName in Gradient Theme by @inforithmics in #2156
- Use latest 7.0 sdk again by @inforithmics in #2157
- Avalonia touchandling (without changes in other Targets) by @inforithmics in #2159
- Update roadmap.md by @pauldendulk in #2166
- Increase Map Size in Getting Started Blazor so that it fills the page by @inforithmics in #2169
- Use preferred osm url by @pauldendulk in #2175
- Update to NET8 by @inforithmics in #2179
- Update to BruTile 5.0.5 by @inforithmics in #2181
- Fix click event on RasterizingTileLayer by @inforithmics in #2183
- Fix Info event in Blazor when using touch on mobile by @pauldendulk in #2186
- Fix offset error in click events when the Blazor browser window is scrolled down by @pauldendulk in #2188
- Fix Zoom Button Handling by @inforithmics in #2190
- Update Topten....
5.0.0-rc.3
Breaking Change
- We had to remove the net8.0-ios and net8.0-maccatalyst because it broke the build on the GitHub Windows agent because it is out of support.
What's Changed
🐛 Fixes
- Fix ObservableMemoryLayer for removing items and assigning with populated ObservableCollection by @pauldendulk in #3165
- Fix NRE in tile cache by @pauldendulk in #3185
- Add option to inject a custom HttpClient into the TileLayer by @janusw in #3196
- Fix possible fetch loop in RasterizingLayer depending on timing by @pauldendulk in #3190
🚀 Features
- Add ObservableCollectionLayer to Mapsui.Experimental by @pauldendulk in #3166
- Add Map dependency property for WPF MapControl (enables data binding) by @AhmadovMahammad in #3193
📦 Updates
- Update NTS to Version 2.6.0 by @inforithmics in #3167
- Remove net8.0-ios and net8.0-maccatalyst by @pauldendulk in #3197
- Update dotnet sdk by @pauldendulk in #3191
🛠️ Maintenance
- Add missing Experimental projects to slnfs by @inforithmics in #3199
- Fix warning in TileLayer by @pauldendulk in #3201
- Add required properties to publish Mapsui.Experimental as NuGet package by @pauldendulk in #3204
🧪 Samples
- Add ObservableMemoryLayerSample by @pauldendulk in #3164
- Run script to update sample code in website by @pauldendulk in #3168
- Generate sample code for website as html with powershell by @pauldendulk in #3169
- Copy the html code samples to wwwroot/codesamples by @pauldendulk in #3170
- Add syntax highlighting to sample code by @pauldendulk in #3171
- Add code copy button by @pauldendulk in #3173
- Fix not selecting the first map after switching categories by @pauldendulk in #3174
- Revert more stripping in Blazor by @pauldendulk in #3176
- Fix custom svg color sample by @pauldendulk in #3177
- Update html file for rename by @pauldendulk in #3178
- Fix compile error on excluded files by @pauldendulk in #3179
- Improve samples site look by @pauldendulk in #3180
- Add sample Category and Name in the url path so they can be used to reference a specific sample by @pauldendulk in #3183
- Fix url navigation - it was navigating to the root instead of the subfolder by @pauldendulk in #3184
- Use hash based routing by @pauldendulk in #3186
- Fix change of the hash in url if there was already a hash in the initial url by @pauldendulk in #3187
- Fix mbtiles on blazor sample app by @pauldendulk in #3188
- Cleanup WPF sample by @pauldendulk in #3202
- Move samples to more suitable categories by @pauldendulk in #3203
New Contributors
- @AhmadovMahammad made their first contribution in #3193
Full Changelog: 5.0.0-rc.2...5.0.0-rc.3
5.0.0-rc.2
What's Changed
🐛 Fixes
- Fix the 'image is created more than once' error by @pauldendulk in #3148
- Remove lock in RotateTo by @pauldendulk in #3158
🚀 Features
- Enable GPU by default on MAUI 9 again by @pauldendulk in #3149
- Add wrapper fields to editing widget by @pauldendulk in #3153
♻️ Refactor
- Rewrite rotation algorithm to avoid possible extreme values for extent by @pauldendulk in #3155
📦 Updates
- Update SkiaSharp to 3.119.1 by @inforithmics in #3138
- Update Microsoft.WindowsAppSDK to a1.6.250602001 by @inforithmics in #3139
🛠️ Maintenance
- Fix AOT Warning by @inforithmics in #3152
- Log the status of the ShowLoggingInMap and how to disable it by @pauldendulk in #3163
⚙️ Infrastructure
- Compile Maui and Uno Samples separate on Windows by @inforithmics in #3146
🧪 Samples
- Move samples in Mapsui.Tests.Common to Mapsui.Samples.Common by @pauldendulk in #3147
- Reorganize resources in samples by @pauldendulk in #3150
- Rework on sample interfaces by @pauldendulk in #3151
- Update editing samples for EditingWidgets with wrapping fields by @pauldendulk in #3154
📝 Documentation
- Fix typos in documentation by @pauldendulk in #3162
Full Changelog: 5.0.0-rc.1...5.0.0-rc.2
5.0.0-rc.1
What's Changed
🚀 Features
- Add ITileSchema parameter to RasterizedVectorTileSource by @pauldendulk in #3137
♻️ Refactor
- Throw if min greater than max in MRect constructor by @pauldendulk in #3134
- Make MSection a class instead of a record by @pauldendulk in #3136
📦 Updates
- Update VexTile to 2.0.0-beta.1 by @pauldendulk in #3144
- Update BruTile to 6.0.0-rc.1 by @pauldendulk in #3145
🛠️ Maintenance
- Fix the 'too many pixels' check by @pauldendulk in #3135
- Remove ReSharper suppressions by @pauldendulk in #3133
- Add more logging related to the corrupted MSection by @pauldendulk in #3143
🧪 Samples
- Try to run the Blazor samples with AOT by @pauldendulk in #3132
Full Changelog: 5.0.0-beta.24...5.0.0-rc.1
5.0.0-beta.24
What's Changed
🐛 Fixes
- Executing postponed calls does not require PanBounds by @pauldendulk in #3123
- Do not log error when geometry is null because it is nullable by @pauldendulk in #3125
- Add check to avoid data fetching for a too large area by @pauldendulk in #3129
♻️ Refactor
- Remove duplicate field for MapControl size in Blazor by @pauldendulk in #3121
📦 Updates
- Use SourceGear Sqlite for Android 16KB support by @inforithmics in #3128
- Update to BruTile 6.0.0-beta.6 by @pauldendulk in #3131
🛠️ Maintenance
- Remove Microsoft.Maui.Controls.Compatibility by @inforithmics in #3127
🧪 Samples
- Move parts of the vector tile sample code to a new Mapsui.Experimental.VectorTiles project by @pauldendulk in #3124
📝 Documentation
- Add LokqlDx to 'Projects that use Mapsui' page by @pauldendulk in #3130
Full Changelog: 5.0.0-beta.23...5.0.0-beta.24
6.0.0-beta.23
What's Changed
🐛 Fixes
- Make size within MapControl immutable by @pauldendulk in #3114
📦 Updates
- Update to BruTile 6.0.0-beta.5 by @pauldendulk in #3118
🧪 Samples
- Add sample to demonstrate changing labels and select by @pauldendulk in #3109
🔧 Infrastructure
- Add .github/release.yml for automated release notes categorization by @Copilot in #3110
🚀 Features
- Add initialization logging by @pauldendulk in #3117
Full Changelog: 5.0.0-beta.22...5.0.0-beta.23
5.0.0-beta.22
What's Changed
🐛Fixes
- Fix centering text in labels by @pauldendulk in #3106
- Fix Blazor touch on iOS by @pauldendulk in #3100
♻️Refactor
- Use MinimalRenderFetchStrategy in RasterizingTileLayer by @pauldendulk in #3107
📦Updates
- Update dotnet sdk to 9.0.304 by @pauldendulk in #3101
- Update Mapsui.UI.Uno.WinUI to Uno 6.2 and adjust RenderControl to be condition compilation-free by @ramezgerges in #3092
🛠️Maintenance
- Remove Skottie and Uno.Resizetizer workaround by @pauldendulk in #3098
- Improve logging of maximum tiles exceeded by @pauldendulk in #3108
🧪Samples
- Fix rasterized vector tile sample by @pauldendulk in #3099
- Add sample to toggle labels on/off by @pauldendulk in #3103
Full Changelog: 5.0.0-beta.21...5.0.0-beta.22
5.0.0-beta.21
What's Changed
Fixes
- Fix pinch zoom not taking the offset of the map into account on Uno by @pauldendulk in #3089
- MapView: prevent PinClicked event from being triggered multiple times by @janusw in #3095
Features
- Allow custom IMapRenderer by @pauldendulk in #3090
Documentation
- Used full brand name for Uno Platform & added a link the main readme.md by @sasakrsmanovic in #3079
- Add Droniq Maps show case by @pauldendulk in #3081
Maintenance
- Fix compilation errors in Assert.That syntax conversion by @Copilot in #3084
- Convert ClassicAssert to Assert.That syntax in Mapsui.Tests by @Copilot in #3083
- Replace all ClassicAssert usages with modern Assert.That syntax by @Copilot in #3085
Refactoring
- Use the LayerFetcher (now renamed to DataFetcher) to fetch the image data by @pauldendulk in #3082
- 💔 Rename IRenderer to IMapRenderer by @pauldendulk in #3087
- Improve PanLock and ZoomLock logic in Navigator by @pauldendulk in #3097
New Contributors
- @sasakrsmanovic made their first contribution in #3079
- @Copilot made their first contribution in #3084
Full Changelog: 5.0.0-beta.20...5.0.0-beta.21