Add concept of data decorator function

This commit is contained in:
Petr Sloup 2017-07-28 09:53:32 +02:00
parent 427a0f0687
commit 42f24c2c99
3 changed files with 28 additions and 1 deletions

View file

@ -50,6 +50,10 @@ module.exports = function(options, repo, params, id, styles) {
Object.assign(tileJSON, params.tilejson || {}); Object.assign(tileJSON, params.tilejson || {});
utils.fixTileJSONCenter(tileJSON); utils.fixTileJSONCenter(tileJSON);
if (options.dataDecoratorFunc) {
tileJSON = options.dataDecoratorFunc(id, 'tilejson', tileJSON);
}
resolve(); resolve();
}); });
}); });
@ -114,6 +118,13 @@ module.exports = function(options, repo, params, id, styles) {
//console.log(shrinkers[style].getStats()); //console.log(shrinkers[style].getStats());
} }
} }
if (options.dataDecoratorFunc) {
if (isGzipped) {
data = zlib.unzipSync(data);
isGzipped = false;
}
data = options.dataDecoratorFunc(id, 'data', data, z, x, y);
}
} }
if (format == 'pbf') { if (format == 'pbf') {
headers['Content-Type'] = 'application/x-protobuf'; headers['Content-Type'] = 'application/x-protobuf';

View file

@ -100,7 +100,8 @@ module.exports = function(options, repo, params, id, dataResolver) {
}); });
} else if (protocol == 'mbtiles') { } else if (protocol == 'mbtiles') {
var parts = req.url.split('/'); var parts = req.url.split('/');
var source = map.sources[parts[2]]; var sourceId = parts[2];
var source = map.sources[sourceId];
var z = parts[3] | 0, var z = parts[3] | 0,
x = parts[4] | 0, x = parts[4] | 0,
y = parts[5].split('.')[0] | 0, y = parts[5].split('.')[0] | 0,
@ -118,6 +119,10 @@ module.exports = function(options, repo, params, id, dataResolver) {
if (format == 'pbf') { if (format == 'pbf') {
response.data = zlib.unzipSync(data); response.data = zlib.unzipSync(data);
if (options.dataDecoratorFunc) {
response.data = options.dataDecoratorFunc(
sourceId, 'data', response.data, z, x, y);
}
} else { } else {
response.data = data; response.data = data;
} }
@ -258,6 +263,11 @@ module.exports = function(options, repo, params, id, dataResolver) {
'mbtiles://' + name + '/{z}/{x}/{y}.' + (info.format || 'pbf') 'mbtiles://' + name + '/{z}/{x}/{y}.' + (info.format || 'pbf')
]; ];
delete source.scheme; delete source.scheme;
if (options.dataDecoratorFunc) {
source = options.dataDecoratorFunc(name, 'tilejson', source);
}
if (source.format == 'pbf') { if (source.format == 'pbf') {
map.sources[name].emptyTile = new Buffer(0); map.sources[name].emptyTile = new Buffer(0);
} else { } else {

View file

@ -89,6 +89,12 @@ function start(opts) {
checkPath('sprites'); checkPath('sprites');
checkPath('mbtiles'); checkPath('mbtiles');
if (options.dataDecorator) {
try {
options.dataDecoratorFunc = require(path.resolve(paths.root, options.dataDecorator));
} catch (e) {}
}
var data = clone(config.data || {}); var data = clone(config.data || {});
if (opts.cors) { if (opts.cors) {