Skip to content

consbio/pymbtiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mapbox MBtiles Utilities

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

Build Status Coverage Status

Features

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.

Installation

pip install pymbtiles

To install from master branch on GitHub using pip:

pip install git+https://github.com/consbio/pymbtiles.git#egg=pymbtiles --upgrade

Usage

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:
    out.write_tiles(tiles)

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 :

0.5.0

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

0.4.0

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

0.3.0

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

Credits:

Inspired by:

SQL for creating mbtiles database derived from node-mbtiles

License:

See LICENSE.md