├── README.md ├── package.json └── server.js /README.md: -------------------------------------------------------------------------------- 1 | mbtiles-server 2 | ============== 3 | 4 | Wow. It's really easy to serve mbtiles files without having to host them with Mapbox, just serve them yourself. 5 | 6 | First, just create an mbtiles file (via Tilemill probably cause it's freaking amazing), then: 7 | 8 | 1. `npm install` 9 | 1. `node server.js TILEFILE [PORT]` 10 | 11 | Visit [http://localhost:3000/3/1/2.png](http://localhost:3000/3/1/2.png) 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mbtile-server" 3 | , "description": "A crazy simple mbtiles server in node" 4 | , "version": "0.0.1" 5 | , "private": false 6 | , "author": "Chris Helm" 7 | , "dependencies": { 8 | "express": "*" 9 | , "mbtiles": "*" 10 | } 11 | , "engines": { 12 | "node": "0.8.x" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | var express = require("express"), 2 | app = express(), 3 | MBTiles = require('mbtiles'); 4 | 5 | if (process.argv.length < 3) { 6 | console.log("Error! Missing TILES filename.\nUsage: node server.js TILES [PORT]"); 7 | process.exit(1); 8 | } 9 | 10 | var port = 3000; 11 | if (process.argv.length === 4) { 12 | port = parseInt(process.argv[3]); 13 | } 14 | 15 | var mbtilesLocation = String(process.argv[2]).replace(/\.mbtiles/,'') + '.mbtiles'; 16 | 17 | new MBTiles(mbtilesLocation, function(err, mbtiles) { 18 | if (err) throw err; 19 | app.get('/:z/:x/:y.*', function(req, res) { 20 | var extension = req.param(0); 21 | switch (extension) { 22 | case "png": { 23 | mbtiles.getTile(req.param('z'), req.param('x'), req.param('y'), function(err, tile, headers) { 24 | if (err) { 25 | res.status(404).send('Tile rendering error: ' + err + '\n'); 26 | } else { 27 | res.header("Content-Type", "image/png") 28 | res.send(tile); 29 | } 30 | }); 31 | break; 32 | } 33 | case "grid.json": { 34 | mbtiles.getGrid(req.param('z'), req.param('x'), req.param('y'), function(err, grid, headers) { 35 | if (err) { 36 | res.status(404).send('Grid rendering error: ' + err + '\n'); 37 | } else { 38 | res.header("Content-Type", "text/json") 39 | res.send(grid); 40 | } 41 | }); 42 | break; 43 | } 44 | } 45 | }); 46 | 47 | }); 48 | 49 | // actually create the server 50 | app.listen(port); 51 | --------------------------------------------------------------------------------