Giter Site home page Giter Site logo

maplibre-rs's Introduction

mapr

Logo

preview
Native Maps for Web, Mobile and Linux
A map rendering library written in Rust.

Project State

This project is in a proof-of-concept state. The proof of concept is done except for text rendering. The Rust ecosystem is suited very well for this project.

In the future this project could be adopted and supported by Maplibre to implement a next-gen mapping solution.

Description

mapr is a portable and performant vector maps renderer. We aim to support the web, mobile and desktop applications. This is achieved by the novel WebGPU specification. Plenty of native implementations are already implementing this specification. On the web it is implemented by Firefox, Chrome and Safari. There are also standalone implementations which directly use Vulkan, OpenGL or Metal as a backend. Those backends allow mapr to run on mobile and desktop applications.

Rust is used as a Lingua-franka on all platforms. This is made possible by WebAssembly which allows us to use Rust for web development.

The goal of mapr is to render maps in order to visualize data. Right now the goal of mapr is not to replace existing vector map renderers like Google Maps, Apple Maps or MapLibre. The current implementation serves as a proof-of-concept of the used technology stack. It is unclear whether the high-performance requirements of rendering maps using vector graphics are achievable using the current stack.

Talk: World in Vectors

World.in.Vectors.mp4

(YouTube)

Current Features

  • Runs on Linux, Android, iOS, MacOS, Firefox and Chrome
  • Render a vector tile dataset
  • Simple navigation powered by winit
  • Multithreaded on all platforms
  • Querying feature data

Missing Features

  • Rendering Text
  • Per-Feature Rendering
  • Rendering:
    • Raster data
    • 3D terrain
    • Hill-shade (DEM)
  • Support for:
    • GeoJSON
  • API for:
    • TypeScript
    • Swift
    • Java/Kotlin

Repository Layout

(Note: to be changed)

.
├── docs                # Documentation for mapr
├── src                 # The source code of the mapr library
├── libs                # Libraries which will eventually be published as separate crates
│   ├── mbtiles         # Library for extracting .mbtiles files
│   ├── style_spec      # Library for interpreting MapLibre style specifications
│   └── wgsl_validate   # Library for validating WGSL shaders
├── apple               # Platform specific files for Apple (iOS and MacOS)
├── web                 # Platform specific files for Web (WebGL and WebGPU)
├── benches             # Benchmarks for specific parts of the library
├── examples            # Examples which can be run
└── test-data           # Geo data which can be used for tests (Usually as .mbtiles)

Building & Running

Now, to clone the project:

git clone --recursive [email protected]/maxammann/mapr

and then build it for running on a desktop:

cargo build

After that you can run it on your desktop:

cargo run --example desktop --

More information about building for different platforms can be found here.

Note for Mac: Before opening the XCode project, you need to build manually using the following command: cargo build --target aarch64-apple-darwin --lib

After that, open the XCode project and run it. (XCode seems to set some environment variables which cause problems with the build directly within XCode)

Rust Setup

Install rustup because this is the recommended way of setting up Rust toolchains.

The toolchain will be automatically downloaded when building this project. See ./rust-toolchain.toml for more details about the toolchain.

Documentation

This generates the documentation for this crate and opens the browser. This also includes the documentation of every dependency.

cargo doc --open

You can also view the up-to-date documentation here.

maplibre-rs's People

Contributors

fabianwildgrube avatar maxammann avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.