#mvt #pbf #rust

mvt-reader

A library for decoding and reading mapbox vector tiles in Rust and WebAssembly

18 releases (10 stable)

Uses new Rust 2024

new 2.1.0-alpha.1 May 2, 2025
2.0.1 Mar 9, 2025
2.0.0 Feb 25, 2025
1.8.0-alpha.2 Feb 24, 2025
1.1.0 Jun 20, 2023

#161 in WebAssembly

Download history 21/week @ 2025-01-08 26/week @ 2025-01-15 54/week @ 2025-01-22 8/week @ 2025-02-05 38/week @ 2025-02-12 806/week @ 2025-02-19 295/week @ 2025-02-26 145/week @ 2025-03-05 40/week @ 2025-03-12 103/week @ 2025-03-19 24/week @ 2025-03-26 4/week @ 2025-04-02 45/week @ 2025-04-09 16/week @ 2025-04-16 52/week @ 2025-04-23

120 downloads per month

MIT license

35KB
506 lines

mvt-reader

Mapbox vector tile reader in Rust
A library for decoding and reading mapbox vector tiles in Rust and WebAssembly

Features

  • Decodes and reads Mapbox vector tiles in Rust
  • Provides an API for accessing layer names and features within a vector tile
  • Can be used as a WebAssembly module in JavaScript (enabled by the wasm feature)

Build the project

cargo build --release

Run tests

cargo test
wasm-pack build --release --target nodejs -d pkg/node -- --features wasm && npm test

Usage

To use the mvt-reader library in your Rust project, add the following to your Cargo.toml file:

[dependencies]
mvt-reader = "2.1.0-alpha.1"

Then, you can import and use the library in your code:

use mvt_reader::{Reader, ParserError};

fn main() -> Result<(), ParserError> {
  // Read a vector tile from file or data
  let data = vec![/* Vector tile data */];
  let reader = Reader::new(data)?;

  // Get layer names
  let layer_names = reader.get_layer_names()?;
  for name in layer_names {
    println!("Layer: {}", name);
  }

  // Get features for a specific layer
  let layer_index = 0;
  let features = reader.get_features(layer_index)?;
  for feature in features {
    todo!()
  }

  Ok(())
}

WebAssembly Usage

To use the mvt-reader library as a WebAssembly module in JavaScript, you can install it with npm and use it in your JavaScript code:

const { Reader } = require('mvt-reader')
const fs = require('fs')

// Example usage
const reader = new Reader(fs.readFileSync('path/to/tile.mvt'))
const layerNames = reader.getLayerNames()
console.log(layerNames)

// More code...

License

This project is licensed under the MIT License.

Dependencies

~1.3–4MB
~64K SLoC