wmts-to-mbtiles
Version:
Save tiles from WMTS service to MBTiles format
56 lines (48 loc) • 1.27 kB
JavaScript
const express = require('express')
const path = require('path')
const MBTiles = require('@mapbox/mbtiles')
const app = express()
const fileArg = process.argv[2] || 'output.mbtiles'
const file = path.resolve(path.join(__dirname, '../'), fileArg)
const port = 5566
let tiles = null
new MBTiles(file, (err, db) => {
if (err) {
console.log('Unable to open charts file: ', file)
console.error(err)
process.exit(-1)
} else {
db.getInfo(function(err, info) {
if (err) {
console.error(err)
process.exit(-1)
}
console.log(info)
tiles = db
})
}
})
app.get('/:z/:x/:y', (req, res) => {
const {z, x, y} = req.params
if (!tiles) {
res.sendStatus(500)
return
}
tiles.getTile(z, x, y, (err, tile, headers) => {
if (err && err.message && err.message === 'Tile does not exist') {
res.sendStatus(404)
} else if (err) {
console.error(`Error fetching tile ${z}/${x}/${y}:`, err)
res.sendStatus(500)
} else {
res.writeHead(200, headers)
res.end(tile)
}
})
})
app.use('/', express.static(__dirname))
app.listen(port, () => {
console.log(`Listening ${port} and serving ${file}`)
console.log(`Open http://localhost:${port}/`)
})