Fix empty raster tiles
This commit is contained in:
parent
f979e25fd7
commit
9edf7c0cae
2 changed files with 23 additions and 1 deletions
|
@ -17,6 +17,7 @@
|
||||||
"async": "1.5.2",
|
"async": "1.5.2",
|
||||||
"advanced-pool": "0.3.1",
|
"advanced-pool": "0.3.1",
|
||||||
"clone": "1.0.2",
|
"clone": "1.0.2",
|
||||||
|
"color": "0.11.1",
|
||||||
"cors": "2.7.1",
|
"cors": "2.7.1",
|
||||||
"express": "4.13.4",
|
"express": "4.13.4",
|
||||||
"handlebars": "4.0.5",
|
"handlebars": "4.0.5",
|
||||||
|
|
|
@ -9,6 +9,7 @@ var async = require('async'),
|
||||||
zlib = require('zlib');
|
zlib = require('zlib');
|
||||||
|
|
||||||
var clone = require('clone'),
|
var clone = require('clone'),
|
||||||
|
Color = require('color'),
|
||||||
express = require('express'),
|
express = require('express'),
|
||||||
mercator = new (require('sphericalmercator'))(),
|
mercator = new (require('sphericalmercator'))(),
|
||||||
mbgl = require('mapbox-gl-native'),
|
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) {
|
source.getTile(z, x, y, function(err, data, headers) {
|
||||||
if (err) {
|
if (err) {
|
||||||
//console.log('MBTiles error, serving empty', err);
|
//console.log('MBTiles error, serving empty', err);
|
||||||
callback(null, { data: new Buffer(0) });
|
callback(null, { data: source.emptyTile });
|
||||||
} else {
|
} else {
|
||||||
var response = {};
|
var response = {};
|
||||||
|
|
||||||
|
@ -163,12 +164,32 @@ module.exports = function(options, repo, params, id) {
|
||||||
map.sources[name] = new mbtiles(
|
map.sources[name] = new mbtiles(
|
||||||
path.join(options.paths.mbtiles, mbtilesFile), function(err) {
|
path.join(options.paths.mbtiles, mbtilesFile), function(err) {
|
||||||
map.sources[name].getInfo(function(err, info) {
|
map.sources[name].getInfo(function(err, info) {
|
||||||
|
var type = source.type;
|
||||||
Object.assign(source, info);
|
Object.assign(source, info);
|
||||||
|
source.type = type;
|
||||||
source.basename = name;
|
source.basename = name;
|
||||||
source.tiles = [
|
source.tiles = [
|
||||||
// meta url which will be detected when requested
|
// meta url which will be detected when requested
|
||||||
'mbtiles://' + name + '/{z}/{x}/{y}.' + (info.format || 'pbf')
|
'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);
|
callback(null);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue