All notable changes to this project will be documented in this file.
- An empty
source_layernow matches features from all layers of a vector tile. - Fix crash when zooming out close to zoom 0 with tile sources serving tiles larger than 256px.
- Support
line-dasharrayin vector tile styles. Layer,Dasharray,LayoutandLayout::text_fieldare now public.Mapnow consumes the scroll it acts upon, so that parent containers don't act on it as well.- Dependencies updated, including
kml0.14 andrstar0.13. - The unused
getrandomdependency was removed.
eguiupdated to 0.35.
- Use
pmtilesinternal decompression handling instead of hand-rolled one. - Fix scroll zoom overshooting on slow frames when
zoom_with_ctrlis disabled.
- Experimental support for
geojsonwith very limited capabilities. - Fix
interpolateexpression when inputs are expressed as integers and stops as floats.
eguiupdated to 0.34.- MSRV updated to 1.92.
- Fix for line filters used by OpenFreeMap Bright style.
- Faster collision detection algorithm for texts in vector tiles.
TileIdis nowSerializeandDeserializewhenserdefeature is enabled.KmlLayernow useskmlcrate and for now its functionality is highly reduced. Please raise issues if you need any specific feature from previous implementation and whether there is an interest in the Kml support in general.
vector_tilesCargo feature is now split intomvtandpmtiles.- Basic support for vector styling. See
Stylestruct for details. You can use it withTilesimplementations that support vector tiles, e.g.PmTiles::with_style(). - Added
OpenFreeMapsource. Note that OpenFreeMap serves vector tiles and those remain highly experimental. LocalTilesis now deprecated. For local maps, usePmTileswith local.pmtilesfile.
- Another round of improvements to experimental vector tile rendering.
- If raster image cannot be decoded, Walkers will try to interpret it as a vector tile. This means that raster and mvt are supported in both PmTiles and HTTP tile sources.
Texture::from_color_imageis no longer public.Textureis renamed toTile.TextureWithUvis renamed toTilePiece.
- More improvements to experimental vector tile rendering.
Map::shownow receives theegui::Responsejust like plugins do.- KML support in
walkers_extras. Seekml_viewerfor details.
rstarbasedGroupedPlacesimplementation, which makes it considerably faster.walkers_extrasis now a separate crate.- Further work on experimental vector tile rendering.
eguiupdated to 0.33.- MSRV updated to 1.88.
- New
LocalTilesimplementation for loading tiles from a local directory. - New, highly experimental vector tile rendering using
.pmtiles. It has very poor performance and at this point it should be considered more of a tech demo than a usable feature. - Removed
Imageplugin. - Fixed zooming on high refresh rates.
Map::show()now passes&MapMemoryto the closure.
- New
Map::show()function. It takes a closure that can draw custom content on the map. It is similar to plugins, but more idiomatic toeguiwhich might help to avoid some of the workarounds needed in the previous approach. Map::drag_gesture()is replaced byMap::drag_pan_buttons(), which allows configuring which mouse buttons can be used for dragging.- New
MapMemory::animating()function, which returns whether the map is currently animating.
eguiupdated to 0.32.- MSRV set to 1.85.
- Fixed bug preventing map from entering detached state when
Memory::set_zoomis called every frame. - New
Map::pull_to_my_position_thresholdfunction for setting the threshold of the feature introduced in 0.40.0. It defaults to0.0, meaning that the map will not be pulled at all.
Plugin::run()has a new parametermap_memory, which allows plugins to access it after it is modified by the map.GroupedPlacesnow takes an instance ofGroup(e.g.LabeledSymbolGroup), which allows groups to be customized.LabeledSymbolGroupnow has thestylefield, which allows changing how the group looks.LabeledSymbol::symbolis now optional and can have a different types. SeeSymbolenum for possible values.LabeledSymbolStylehas new fieldslabel_corner_radiusandsymbol_size.
- When map is dragged or zoomed while not being in a detached state, it will get pulled back to
my_position, unless offset reaches a certain threshold.
Please note that places plugin family are now being intensively refactored and might change pretty radically in the next releases.
Placeis now renamed toLabeledSymbol, which implements a new trait called...Place.Styleis now renamed toLabeledSymbolStyle.Imagesplugin is replaced byPlaces, which simply accepts bothLabeledSymbolandImage.- New
GroupedPlacesplugin, which groups multiple instances ofLabeledSymbolwhen they are too close to each other. - New
Map::panningfunction which can be used to disable panning.
- Make slow-down during inertial moves exponential rather than linear.
MaxParallelDownloads,max_parallel_downloads's type is now public, allowing to actually set it.
- Support for multiple layers.
MapMemorynow implementsserde::Serializeandserde::Deserializewhen theserdefeature is enabled.- New setting
HttpOptions::max_parallel_downloads.
screen_to_positionis no longer a public function. UseProjector::unprojectto obtain geographical coordinates from screen coordinates relative to the map viewport.- New
HttpTiles::stats()function. - Fixed download attempts of invalid tiles in certain cases.
- Fixed zooming on touchscreens so that it follows the center of the touch points.
Projector::unprojectis now symmetric toProjector::project. Previously its origin was the screen center and often needed adjusting.
eguiupdated to 0.31.0
- Do not try to download tiles with invalid coordinates.
Positionis now a type alias forgeo_types::Point. Previousfrom_lat_lonandfrom_lon_latmethods are now standalone functions calledlat_lonandlon_lat.
eguiupdated to 0.30.0.
- Tile download optimized by no longer queueing older requests.
- Interpolation of higher zoom levels is now improved, trying many different levels instead of just one.
- Add option for changing the zoom speed
- Add options for double click to zoom in and out
- Add option to zoom without holding ctrl on native and web
- Fixed zoom not following cursor if the map wasn't moved.
- Fixed spurious "Error from IO runtime" at shutdown.
- Do not set a user agent in wasm build by default.
- Fixed not taking into account the mouse pointer position when scrolling.
- Implement panning with touchpad and/or scroll-wheel.
- Fixed crash when zoom is maxed far out.
- Add
Project::scale_pixel_per_meter()to provide the local meter-to-pixel scale. - Map can be zoomed in farther than what is supported by the tile provider. The max. zoom level
for which tile images are available can be configured via
TileSource::max_zoom().
HttpTileswill now attempt to use already downloaded tiles with a lower zoom level as placeholders.Tiles::at()now returns a newTextureWithUvinstead ofTexture. This change is relevant only forTilesimplementers and provides the ability to use part of the texture as a tile.- Zoom is now represented as
f64instead off32which makes it consistent with other types. Plugin::run()has a new signature. Refer todemo/src/plugins.rsfor usage.
eguiupdated to 0.29.1.
eguiupdated to 0.28.
- New functions in
MapMemoryfor getting and setting the zoom level:zoomandset_zoom. - In-memory cache is now limited to 256 tiles. Previously it grew indefinitely.
TilesManagertrait is now calledTilesandTilesstruct is now calledHttpTiles.
eguiupdated to 0.27.
- New
HttpOptions::user_agentfield. Note that in case of providers like OSM, it is highly advised to set it accordingly to the application's name. https://operations.osmfoundation.org/policies/tiles/
- Fix weird quirks while dragging by small amounts.
- Plugins: Fixed problem of handle clicks after update to egui 0.26
- Map can be zoomed to decimal zoom levels with gestures or scrolling.
eguiupdated to 0.26.
- Tiles are now downloaded in parallel.
Plugin::draw()is now calledPlugin::run()and no longer hasgesture_handledargument, in preference toegui::Response::changed().- New
Projector::unproject()function converts screen coordinates to a geographical position. - New
Projector::new()allowsProjectorto be used outside plugins.
eguiupdated to 0.25.
mod providersis now calledmod sources, to resembletrait TileSource.- HTTP cache can be now enabled on native platforms (in WASM, is it handled by the browser).
TileManagertrait and demonstration of locally generated tiles.- Zoom and drag gestures can now be disabled.
- Add
gesture_handledtoPlugin::draw()to let plugins know if the gesture was handled by the map.
eguiupdated to 0.24. This change requires Rust 1.72 or greater.
- Fixed occasional panic when changing tile providers.
- Fixed grabbing mouse events from outside the widget.
Positioncan be now converted intogeo_types::Point.
Positionis no longer a typedef ofgeo_types::Point. There is also a new, more explicit way of constructing it -from_lat_lon, andfrom_lon_lat.- If center position is detached, zooming using mouse wheel will now keep location under pointer fixed.
- In
Imagesplugin,scaleandanglefunctions are now part ofImage. - Allow structs implementing
Providerto use larger tile sizes. - Add optional logos to
Attributionstruct. - Add
Mapboxprovider. Plugin::drawnow has aResponseparameter, allowing plugins to be interactive.
eguiupdated to 0.23.
Zoomtype is no longer public, whileInvalidZoombecomes public.MapMemory::center_modeis no longer public,- New
MapMemory::follow_my_positionfunction. - Fix occasional disappearing of the map when dragging rapidly.
- Brought back the ability to center the map at exact position (
MapMemory::center_at) after making some types private.
Imagesplugin, for putting images at geographical location.ProjectorandMapMemoryare nowClone.MapMemory::zoomis no longerpub. UseMapMemory::zoom_in/outinstead.MapMemory::center_mode::detached()is no longerpub. UseMapMemory::detached()instead.- Fixed weird drag behavior in higher zoom levels.
- Tile sources are now defined via
TileSourcetrait, instead ofFn. - New
Plugintrait andMap::with_pluginfunction, which replacesMap::with_drawer. - Example plugin
extras::Places, which draws markers on the map.
- Previous example was split into
demolibrary, anddemo_*integrations. - Support for WASM.
- New
Centervariant -Inertia. It means that the map is moving due to inertia and soon will stop withCenterswitching toExact. To keep things easy,Centernow has new methoddetached, will returns a position the map is currently at, orNoneif it just followsmy_position. openstreetmapis now inwalkers::providersmodule.osmexample is now calledmyappand it shows a small windows with an orthophotomap layer from https://geoportal.gov.pl.
- New method:
Map::with_drawer, which provides a simpler API for drawing custom stuff.
MapCenterModeis now calledCenter.Zoomcan no longer be dereferenced tou8. To obtain a previous value, useZoom::round().- Also,
Zoomis no longerPartialEq, norEq.
- Zooming using CTRL + mouse wheel or pinch gesture.
- Fixed panic when dragging out of the map's boundaries.
Tiles::new()has now two parameters. First, calledsource, being a function transformingTileIdinto an URL of a tile provider. This means that it's now possible to specify other servers.openstreeetmapis a builtin function returning OSM's URL.MapMemoryno longer hasosmmember. Instead,Map::new'stilesparameter is nowOption.
- Optimized how GUI and IO thread talk to each other.
- Handle tile download errors (HTTP statuses, garbage content, etc.) more gracefully. Application
will remain alive (no
unwraporexpect), but downloads of the failed tiles won't be repeated.
TileId::position_on_world_bitmapis now calledprojectand it returnsPixels.PositionExt::project_with_zoomis now calledprojectand it returnsPixels.Tiles::new()has now a single parameter -egui_ctx. It can be obtained from egui'sCreationContext(see the example).
- Fixed calculation of the amount by which map should be scrolled during the screen drag.
- Map did not get repainted when a tile got downloaded in the background, unless some mouse movement was made.
- Tokio runtime is now managed by the
MapMemoryso constructing it by hand is no longer necessary. - Example updated with drawing custom shapes on the map.