-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
81 lines (62 loc) · 1.61 KB
/
server.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
const express = require('express');
const fs = require('fs');
const geojsonToXml = require('geojson-mapnikify');
const tilestrata = require('tilestrata');
const vtile = require('tilestrata-vtile');
const XML_PATH = 'donors.xml';
// TODO: fixme
// strata.layer('donors')
// .route('tile.json')
// .use(geojson);
function dumpDbIntoGeoJson() {
const geoJsonBuffer = fs.readFileSync('./samples/donors.geojson', 'utf-8');
return JSON.parse(geoJsonBuffer);
}
function setup(server) {
const config = {
xml: XML_PATH,
tileSize: 256,
metatile: 1,
bufferSize: 128
};
server.layer('donors')
.route('tile.pbf')
.use(vtile(config));
}
function run() {
const strata = tilestrata();
const donorsGeoJson = dumpDbIntoGeoJson();
geojsonToXml(donorsGeoJson, true, (err, xml) => {
console.log(xml);
fs.writeFileSync(XML_PATH, xml);
setup(strata);
const app = express();
app.get('/index.html', (_, res) => {
res.sendFile('index.html', {
root: process.cwd()
});
});
app.get('/app.js', (_, res) => {
res.sendFile('app.js', {
root: process.cwd()
});
});
app.use('/static', express.static('assets'));
app.get('/map', (_, res) => {
res.sendFile('mapbox-style.json', {
root: process.cwd()
});
});
app.use(tilestrata.middleware({
server: strata,
prefix: '/map'
}));
app.listen(8080, () => {
console.log('Tiles URL Template: map/donors/{zoom}/{x}/{y}/tile.pbf');
console.log('Listening on 8080...');
})
});
}
if (require.main === module) {
run();
}