Expand description
§MapLibre-native-rs
Rust bindings to the MapLibre Native map rendering engine.
§Usage
We use maplibre-natives’ “core library”, a static, pre-compiled library.
We also allow you to compile this yourself.
Instructions for this are below.
§Backend Features
This crate supports multiple rendering backends:
vulkan(default on Linux/Windows):cargo build --features vulkanmetal(default on macOS/iOS):cargo build --features metalopengl(Linux/Windows):cargo build --features opengl
On Linux, OpenGL uses EGL by default for headless rendering. Use the glx feature only when you explicitly need rendering through GLX/X11.
We also support the following other features (all enabled by default):
json: load styles and layers from JSON viaserde_jsongeojson: interoperate with thegeojsoncratelog: logging via thelogcrate
At its core, we work as follows:
use maplibre_native::{CameraUpdate, ImageRendererBuilder, Image, LatLng};
use std::num::NonZeroU32;
let mut renderer = ImageRendererBuilder::new()
.with_size(NonZeroU32::new(512).unwrap(),NonZeroU32::new(512).unwrap())
.build_static_renderer();
renderer.load_style_from_url(&"https://demotiles.maplibre.org/style.json".parse().unwrap());
let camera = CameraUpdate::new()
.center(LatLng { lat: 0.0, lng: 0.0 })
.zoom(0.0);
let image: Image = renderer.render_static(&camera).unwrap();
// Access the underlying ImageBuffer for all operations
let img_buffer = image.as_image();
println!("Image dimensions: {}x{}", img_buffer.width(), img_buffer.height());
img_buffer.save("map.png").unwrap();TIP: Next to the static rendering map mode, we also have continous and a tile based one. Continous is desiged to be interactive, while the tile based one is primarily for tile servers
§Platform Support
The following platform and rendering-API combinations are supported and tested in CI:
| Platform | Metal | Vulkan | OpenGL |
|---|---|---|---|
| Linux x86 | ❌ | ✅ | ✅ |
| Linux ARM | ❌ | ✅ | ✅ |
| Windows x86 | ❌ | 🟨 | 🟨 |
| Windows ARM | ❌ | 🟨 | 🟨 |
| macOS ARM | ✅ | ✅1 | ❌ |
§Dependencies
This command will install the required dependencies on Linux or macOS for the vulkan backend.
You may also use it with the opengl or glx parameter on Linux.
It is OK to run this command multiple times for each backend.
just install-dependencies vulkan§Getting the core library
Since we wrap the Maplibre native library, we need this and its headers to be included.
By default the library will be downloaded and build locally during the build process of maplibre-native-rs.
We can get the library and headers from two places:
default: library will be downloaded and build locally during the build process of maplibre-native-rs
The specific version is controllable from the `build.rs` file.downloaded from the releases page
The specific version of MapLibre Native used is controlled by
package.metadata.mln.releaseinCargo.toml. This dependency is automatically updated via a GitHub workflow on the 1st of each month repository. A pull request is created if an update is available.if the env vars
MLN_PRECOMPILEMLN_CORE_LIBRARY_PATHandMLN_CORE_HEADERS_PATHare set: from local disk via the environment variablesIf you don’t want to allow network access during buildscript execution, we allow you to download the release and tell us where you have downloaded the contents. You can also build from source by following the steps that maplibre-native does in CI to produce the artefacts.
§Development
- This project is easier to develop with just, a modern alternative to
make. Install it withcargo install just. - To get a list of available commands, run
just. - To run tests, use
just test.
§Getting Involved
Join the #maplibre-martin slack channel at OSMUS – automatic invite is at https://slack.openstreetmap.us/
§License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT) at your option.
§Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual-licensed as above, without any additional terms or conditions.
§MapLibre Native Licence
This crate incorporates MapLibre Native assets during compilation by downloading and statically linking them. As a result, any project using this crate must comply with the MapLibre Native License (BSD 2-Clause) requirements for binary distribution. This includes providing proper attribution and including the license text with your distributed binaries or source code.
Vulkan support on macos is provided via
MoltenVK. There is a slight performance overhead for this with little upsides. Both Metal and Vulkan run through the same extensive test suite upstream. You can use Vulkan if you find a bug in the Metal implementation until we have fixed it upstream. ↩
Modules§
- callbacks
- Callback types used by the renderer event API.
- file_
source - Rust-supplied
FileSourcecallback. - tile_
server_ options - Tile server options builder.
Structs§
- Camera
Update - A partial camera update.
- Circle
Layer - A circle layer for rendering point data.
- Color
- A color constructed from straight RGBA channels in the
0.0..=1.0range. - Continuous
- Internal state type to render continuously
- Edge
Insets - Insets from each edge of the renderer viewport.
- File
Source Request Callback - Callback object
- Fill
Layer - A fill layer for rendering polygon data.
- FsError
Reason - Error reason categories — mirror of
mbgl::Response::Error::Reason. - GeoJson
- A GeoJSON value prepared for MapLibre Native.
- GeoJson
Source - A GeoJSON source for rendering geographic data.
- GeoJson
Source RefMut - A mutable reference to a GeoJSON source owned by the current style.
- Image
- A rendered map image.
- ImageId
- A stable image ID handle that can be used after an image object is moved.
- Image
Renderer - Configuration options for a tile server.
- Image
Renderer Builder - Builder for configuring
ImageRendererinstances - LatLng
- A geographic coordinate.
- LatLng
Bounds - A geographic bounding box.
- LayerId
- Stable layer ID handle that can be used after a layer object is moved.
- Line
Layer - A line layer for rendering line data.
- MapDebug
Options - Debug visualization options for map rendering.
- MapLoad
Error - Error reported while loading a map or style.
- MapMode
- Map rendering mode configuration.
- MapObserver
- Object to modify the map observer callbacks
- MapObserver
Camera Change Mode - Camera change mode for map observer callbacks.
- Opaque
Layer - A style layer of a type that does not (yet) have a typed Rust wrapper.
- Opaque
Source - A style source of a type that does not (yet) have a typed Rust wrapper.
- Opaque
Source RefMut - A mutable reference to a style-owned source without a typed Rust wrapper.
- Render
Request - In-flight render request.
- Resource
Kind - Resource kinds — mirror of
mbgl::Resource::Kind. - Resource
Options - Resource Options
- RunLoop
Handle - Handle to the current thread’s MapLibre Native run loop.
- Screen
Coordinate - A position in screen coordinates
- Size
- A size
- Source
Id - Stable source ID handle that can be used after a source object is moved.
- Static
- Internal state type to render a static map image.
- Style
Load Error - Error returned when a style fails to load.
- Style
Load Request - In-flight style load request.
- Style
Ref - A mutable reference to the renderer’s current map style.
- Symbol
Layer - A symbol layer for rendering labels and icons on the map.
- Tile
- Internal state type to render a map tile.
Enums§
- AnyLayer
- A style layer of any type, parsed from a style-spec layer object.
- AnySource
- A style source of any type, parsed from a style-spec source object.
- FsResponse
- Return value for a resource request callback.
- GeoJson
Error - Error returned when creating a MapLibre Native GeoJSON value.
- LineCap
- Line cap type.
- Line
Join - Line join type.
- MapLoad
Error Kind - Error kind reported while loading a map or style.
- Rendering
Error - Errors that can occur during map rendering operations.
- Source
RefMut - A mutable reference to a source owned by the current style.
- Source
Type - MapLibre style-spec source type.
- Style
Error - Error returned by style operations.
- Symbol
Anchor - Symbol icon anchor point.
Traits§
- Layer
- A style layer type that can be added to a
StyleRef. - Source
- A style source type that can be added to a
StyleRef.
Functions§
- register_
file_ source_ callback - Install a Rust closure as the
ResourceLoaderfile-source callback for every subsequently constructedmbgl::Map. - set_
log_ thread_ enabled - Enable or disable the internal logging thread