Fix empty raster tiles

This commit is contained in:
Petr Sloup 2016-05-03 17:42:47 +02:00
parent f979e25fd7
commit 9edf7c0cae
2 changed files with 23 additions and 1 deletions

View file

@ -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",

View file

@ -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);
});
});