Skip to main content

MapBox Mbtiles Utilities

Project description

Mapbox MBtiles Utilities

A Python 2.7 and 3 library for working with Mabox mbtiles v1.1

Build Status Coverage Status


Provides a lighweight Python API for reading and writing mbtiles files.

Mabox mbtiles v1.1 allow you to store geographic data as rendered image tiles or as vector tiles, along with associated metadata.


pip install pymbtiles

To install from master branch on GitHub using pip:

pip install git+ --upgrade


Python API

open for reading and read a tile:

from pymbtiles import MBTiles
with MBtiles('my.mbtiles') as src:
    tile_data = src.read_tile(z=0, x=0, y=0)

returns tile data in bytes.

open for writing (existing file will be overwritten):

with MBtiles('my.mbtiles', mode='w') as out:
    out.write_tile(z=0, x=0, y=0, tile_data)

or write a bunch of tiles at once:

from pymbtiles import MBTiles, Tile

tiles = (
    Tile(z=1, x=0, y=0, tile_data=first_tile),

with MBtiles('my.mbtiles', mode='w') as out:

Use r+ mode to read and write.

Metadata is stored in the meta attribute of the mbtiles instance:

with MBtiles('my.mbtiles') as src:
    metadata = src.meta

This metadata is stored in the metadata table in the mbtiles file, and contains a number of records required or optional under the mbtiles specification .

To update metadata:

with MBtiles('my.mbtiles', 'r+') as out:
    out.meta['some_key'] = 'some_value'

You can set several values at once by passing in a new dict object:

with MBtiles('my.mbtiles', 'w') as out:
    out.meta = my_metadata_dict

Listing available tiles

To list available tiles in the tileset:

with MBtiles('my.mbtiles') as src:
    for tile_coords in src.list_tiles():  # [TileCoordinate(z, x, y)...]

WARNING: for large tilesets, this can exceed available memory.

To list available tilesets for large tilesets, use:

with MBtiles('my.mbtiles') as src:
    for batch in src.list_tiles_batched():
        for tile_coords in batch: # [TileCoordinate(z, x, y)...]

Set operations

The ops module provides extend, union, and difference functions to perform set operations on tilesets.

Extend a tileset with new tiles from a second:

extend(source_filename, target_filename)

Create a new tileset with unique tiles combined from both left and right tilesets:

union(left_filename, right_filename, out_filename)

Create a new tileset from the tileset in the left tileset not present in the right tileset:

difference(left_filename, right_filename, out_filename)

Tile Scheme

Tiles are output to mbtiles format in xyz tile scheme.

Possibly useful:

  • mbtileserver: a lightweight Go tile server
  • tpkutils: a library for converting ArcGIS tile cache to mbtiles

Changes :


  • added zoom_range, row_range, col_range to provide basic information about tiles available in the tileset


  • added list_tiles to list tiles and list_tiles_batch to list tiles in batches
  • added ops module with extend, union, difference functions


  • all write-like operations for metadata and tiles are now overwrite by default


Inspired by:

SQL for creating mbtiles database derived from node-mbtiles



Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for pymbtiles, version 0.5.0
Filename, size File type Python version Upload date Hashes
Filename, size pymbtiles-0.5.0-py3-none-any.whl (9.0 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size pymbtiles-0.5.0.tar.gz (7.1 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page