From 9edf7c0caeb7d0407cad25aa1380e3585ed5e57b Mon Sep 17 00:00:00 2001 From: Petr Sloup Date: Tue, 3 May 2016 17:42:47 +0200 Subject: [PATCH] Fix empty raster tiles --- package.json | 1 + src/serve_rendered.js | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 4510e68..74854d0 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "async": "1.5.2", "advanced-pool": "0.3.1", "clone": "1.0.2", + "color": "0.11.1", "cors": "2.7.1", "express": "4.13.4", "handlebars": "4.0.5", diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 236abd9..375a7e1 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -9,6 +9,7 @@ var async = require('async'), zlib = require('zlib'); var clone = require('clone'), + Color = require('color'), express = require('express'), mercator = new (require('sphericalmercator'))(), mbgl = require('mapbox-gl-native'), @@ -66,7 +67,7 @@ module.exports = function(options, repo, params, id) { source.getTile(z, x, y, function(err, data, headers) { if (err) { //console.log('MBTiles error, serving empty', err); - callback(null, { data: new Buffer(0) }); + callback(null, { data: source.emptyTile }); } else { var response = {}; @@ -163,12 +164,32 @@ module.exports = function(options, repo, params, id) { map.sources[name] = new mbtiles( path.join(options.paths.mbtiles, mbtilesFile), function(err) { map.sources[name].getInfo(function(err, info) { + var type = source.type; Object.assign(source, info); + source.type = type; source.basename = name; source.tiles = [ // meta url which will be detected when requested 'mbtiles://' + name + '/{z}/{x}/{y}.' + (info.format || 'pbf') ]; + if (source.format == 'pbf') { + map.sources[name].emptyTile = new Buffer(0); + } else { + var color = new Color(source.color || '#fff'); + var format = source.format; + if (format == 'jpg') { + format = 'jpeg'; + } + sharp(new Buffer(color.rgbArray()), { + raw: { + width: 1, + height: 1, + channels: 3 + } + }).toFormat(format).toBuffer(function(err, buffer, info) { + map.sources[name].emptyTile = buffer; + }); + } callback(null); }); });