Crate pmtiles2

source ·
Expand description

PMTiles

A low level implementation of the PMTiles format based on the std::io::Read and std::io::Write traits (or their respective asynchronous versions [futures::AsyncRead] and [futures::AsyncWrite]).

Examples

A note on the asynchronous versions

In the following examples, the synchronous functions are used instead of their respective asynchronous versions.

To work with asynchronous readers/writers, enable the async-feature and simply replace:

Reading from a file

use std::fs::File;
use pmtiles2::PMTiles;

fn main () -> std::io::Result<()> {
    let file_path = "./test/stamen_toner(raster)CC-BY+ODbL_z3.pmtiles";
     
    let mut file = File::open(file_path)?; // file implements std::io::Read
    let pm_tiles = PMTiles::from_reader(file)?;

    Ok(())
}

Writing to a file

use std::fs::File;
use pmtiles2::{PMTiles, Compression, TileType};

fn main () -> std::io::Result<()> {
    // create temp directory
    let dir = temp_dir::TempDir::new()?;
    let file_path = dir.path().join("foo.pmtiles");
     
    let pm_tiles = PMTiles::new(TileType::Png, Compression::None);

    // TODO: Add tiles to pm_tiles

    let mut file = File::create(file_path)?; // file implements std::io::Write
    pm_tiles.to_writer(&mut file)?;

    Ok(())
}

Building a PMTiles archive from scratch

use pmtiles2::{PMTiles, TileType, Compression, util::tile_id};
use std::io::Cursor;

let mut pm_tiles = PMTiles::new(TileType::Mvt, Compression::GZip);

pm_tiles.add_tile(tile_id(0, 0, 0), vec![0 /* ... */]);
pm_tiles.add_tile(tile_id(1, 0, 0), vec![0 /* ... */]);

Modules

  • Utilities for reading and writing PMTiles archives.

Structs

  • A structure representing a directory.
  • A structure representing a directory entry.
  • A structure representing a PMTiles header.
  • A structure representing a PMTiles archive.

Enums

  • A compression, which is supported in PMTiles archives.
  • A tile type, which is supported in PMTiles archives.