Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var zlib = require('zlib');
- var express = require('express');
- var mapnik = require('mapnik');
- var Promise = require('promise');
- var SphericalMercator = require('sphericalmercator');
- var geobuf = require('geobuf');
- var Pbf = require('pbf');
- mapnik.register_default_input_plugins();
- var mercator = new SphericalMercator({
- size: 256 //tile size
- });
- var app = express();
- app.get('/vector-tiles/:layerName/:z/:x/:y.pbf', function(req, res) {
- var options = {
- x: parseInt(req.params.x),
- y: parseInt(req.params.y),
- z: parseInt(req.params.z),
- layerName: req.params.layerName
- };
- makeVectorTile(options).then(
- function(vectorTile) {
- zlib.deflate(vectorTile, function(err, data) {
- if (err)
- return res.status(500).send(err.message);
- res.setHeader("Access-Control-Allow-Origin", "*");
- res.setHeader('Content-Encoding', 'deflate');
- res.setHeader('Content-Type', 'application/x-protobuf');
- res.send(data);
- });
- });
- });
- function makeVectorTile(options) {
- var extent = mercator.bbox(options.x, options.y, options.z, false, '3857');
- var map = new mapnik.Map(256, 256, '+init=epsg:3857');
- map.extent = extent;
- var layer = new mapnik.Layer(options.layerName);
- layer.datasource = new mapnik.Datasource({
- type: 'postgis',
- dbname: 'db',
- table: "(Select * from planet_osm_" + options.layerName + ") as subquery",
- user: 'user',
- password: 'pass',
- geometry_field: 'way'
- });
- //layer.styles = ['stylesheet.xml'];
- map.add_layer(layer);
- return new Promise(function (resolve, reject) {
- var vtile = new mapnik.VectorTile(parseInt(options.z), parseInt(options.x), parseInt(options.y));
- map.render(vtile, function (err, vtile) {
- if (err) return reject(err);
- resolve(vtile.getData());
- });
- });
- }
- app.listen(1234);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement