Home

Awesome

tilereduce

A framework for writing tile-reduce map scripts in Python.

NOTE: This library is experimental and under active development. No official release has been created.

Usage

First read the documentation at tile-reduce.

tile-reduce-py allows you to write the map script in Python. The reducer is still Javascript. These examples require a modification to tile-reduce (see: https://github.com/mapbox/tile-reduce/pull/68)

import mapbox_vector_tile

import tilereduce


class BuildingRoadCount(tilereduce.TR):
    def mapper(self, x, y, zoom, data):
        if data is None:
            return 0

        # Decode the raw binary protocol buffer data
        tile = mapbox_vector_tile.decode(data)

        count = 0
        if tile.get('buildings'):
            count += len(tile['buildings'])
        if tile.get('roads'):
            count += len(tile['roads'])

        return count


if __name__ == '__main__':
    BuildingRoadCount.main()

The reduce script is identical as the original Node example except:

'use strict';

var tileReduce = require('tile-reduce');
var path = require('path');

var numFeatures = 0;

tileReduce({
  bbox: [-122.05862045288086, 36.93768132842635, -121.97296142578124, 37.00378647456494],
  zoom: 15,
  map: path.join(__dirname, '/count.py'),  // Calling python script
  workerCommand: 'python',
  sources: [{name: 'osm', mbtiles: path.join(__dirname, '../../tests/fixtures/osm.mbtiles'), raw: true}]
})
.on('reduce', function(num) {
  numFeatures += num;
})
.on('end', function() {
  console.log('Features total: %d', numFeatures);
});