-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathTileService.js
56 lines (48 loc) · 1.57 KB
/
TileService.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
"use strict";
var config = require('./config');
var MBTiles = require('@mapbox/mbtiles');
var path = require('path');
var fs = require('fs');
var TileService = function(query) {
this.q = query;
};
TileService.prototype.getInfo = function(done) {
this._initMBTiles(function(err, mbtiles) {
if (err) return done(err);
mbtiles.getInfo(function(err, info) {
if (err) return done(new Error('cannot get metadata'));
done(null, info);
});
});
};
TileService.prototype.getTile = function(done) {
var that = this;
that._initMBTiles(function(err, mbtiles) {
if (err) return done(err);
mbtiles.getTile(that.q.params.z, that.q.params.x, that.q.params.y, function(err, tile, headers) {
if (err) return done(err);
done(null, tile, headers);
});
});
};
TileService.prototype.getGrid = function(done) {
var that = this;
that._initMBTiles(function(err, mbtiles) {
if (err) return done(err);
mbtiles.getGrid(that.q.params.z, that.q.params.x, that.q.params.y, function(err, tile, headers) {
if (err) return done(err);
done(null, tile, headers);
});
});
};
TileService.prototype._initMBTiles = function(done) {
var mbtilesfile = path.join(config.TILES_DIR, this.q.params.ts + '.mbtiles');
fs.exists(mbtilesfile, function (exists) {
if (!exists) return done(new Error('cannot find MBTiles file on server: ' + mbtilesfile));
new MBTiles(mbtilesfile, function(err, mbtiles) {
if (err) return done(new Error('cannot initialize MBTiles object'));
done(null, mbtiles);
});
});
};
module.exports = TileService;