Advertisement
Guest User

Untitled

a guest
Jul 10th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. var zlib = require('zlib');
  2. var express = require('express');
  3. var mapnik = require('mapnik');
  4. var Promise = require('promise');
  5. var SphericalMercator = require('sphericalmercator');
  6. var geobuf = require('geobuf');
  7. var Pbf = require('pbf');
  8. mapnik.register_default_input_plugins();
  9.  
  10. var mercator = new SphericalMercator({
  11. size: 256 //tile size
  12. });
  13.  
  14. var app = express();
  15.  
  16. app.get('/vector-tiles/:layerName/:z/:x/:y.pbf', function(req, res) {
  17.  
  18. var options = {
  19. x: parseInt(req.params.x),
  20. y: parseInt(req.params.y),
  21. z: parseInt(req.params.z),
  22. layerName: req.params.layerName
  23. };
  24.  
  25. makeVectorTile(options).then(
  26. function(vectorTile) {
  27. zlib.deflate(vectorTile, function(err, data) {
  28. if (err)
  29. return res.status(500).send(err.message);
  30. res.setHeader("Access-Control-Allow-Origin", "*");
  31. res.setHeader('Content-Encoding', 'deflate');
  32. res.setHeader('Content-Type', 'application/x-protobuf');
  33. res.send(data);
  34.  
  35. });
  36. });
  37. });
  38.  
  39. function makeVectorTile(options) {
  40.  
  41. var extent = mercator.bbox(options.x, options.y, options.z, false, '3857');
  42. var map = new mapnik.Map(256, 256, '+init=epsg:3857');
  43. map.extent = extent;
  44. var layer = new mapnik.Layer(options.layerName);
  45.  
  46. layer.datasource = new mapnik.Datasource({
  47. type: 'postgis',
  48. dbname: 'db',
  49. table: "(Select * from planet_osm_" + options.layerName + ") as subquery",
  50. user: 'user',
  51. password: 'pass',
  52. geometry_field: 'way'
  53. });
  54. //layer.styles = ['stylesheet.xml'];
  55.  
  56. map.add_layer(layer);
  57.  
  58. return new Promise(function (resolve, reject) {
  59. var vtile = new mapnik.VectorTile(parseInt(options.z), parseInt(options.x), parseInt(options.y));
  60.  
  61. map.render(vtile, function (err, vtile) {
  62. if (err) return reject(err);
  63. resolve(vtile.getData());
  64. });
  65. });
  66. }
  67. app.listen(1234);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement