Crate map_engine

source ·
Expand description

A library to work with tiled geospatial (raster) data.

This is the base library of a series of crates. It contains methods to:

  • Work with XYZ tiles
  • Read raster data intersecting a tile
  • Style data to generate coloured PNG files

🚧 This is a work in progress so the API is unstable and likely to change as the related crates are developed. 🚧


use map_engine::{
    cmap::{Composite, viridis},
    raster::{Raster, RawPixels},
use std::path::PathBuf;

fn main() -> Result<(), MapEngineError> {
    let tile = Tile::new(304, 624, 10);
    let raster = Raster::new(PathBuf::from("src/tests/data/chile_optimised.tif"))?;

    // Note that these three things should support the same number of bands (in this case, 1).
    // At the moment we don't enforce this at compile time.
    let comp = Composite::new_gradient(0.0, 27412.0, &viridis);
    let bands = &[1];
    let na_value = vec![0.0];
    assert!(comp.n_bands() == bands.len());
    assert!(comp.n_bands() == na_value.len());

    let arr: RawPixels<f64> = raster.read_tile(&tile, Some(bands), None)?;
    let styled =, na_value)?;
    let png = styled.into_png()?;  // PNG as a byte sequence

    // The PNG can then be sent as an HTTP response, written to disk, etc.
    // Also, we have a method to write to disk:
    // styled.write_to_disk(std::path::Path::new("path_to_png"))?;


Intallation notes

At the moment, we only support Linux but the crate might work on macOS and Windows (let us know!).

We depend on GDAL >3.3 and you might need to compile it yourself.


The UbuntuGIS team has a recent version of GDAL (3.3.2) that might work for you.


  • Matrices describing affine transformation of the plane.
  • Types and functions to style a Raster.
  • Types and deserializer for colours.
  • Library errors (using thiserror).
  • Re-exports from gdal crate.
  • Global Map Tiles in Spherical Mercator projection.
  • Empty PNG image.
  • Types and helpers to work with raster images.
  • Types and helpers to work with XYZ tiles.
  • Types and helpers to work with data windows.