Esempio n. 1
0
function printFromBbox(req, res, next){
    // bbox is [w,s,e,n] boundaries for rectangle
    var params = {};
    params.zoom = req.params.z | 0;
    params.bbox = [req.params.w, req.params.s, req.params.e, req.params.n];
    params.scale = (req.params.scale) ? parseFloat(req.params.scale) : undefined;
    params.scale = params.scale > 9 ? 8 : params.scale;
    params.format = (req.params.format !== 'png') ? req.params.format : 'png';
    params.quality = req.params.quality | 0 || null;
    params.limit = 20000;

    var filename = req.style.data.name + '-z' +
        params.zoom + '_' + req.params.w +
        '_' + req.params.s + '_' + req.params.e +
        '_' + req.params.n + '_' + (req.params.scale | 0);

    var source = req.params.format === 'vector.pbf'
        ? req.style._backend._source
        : req.style;

    params.getTile = source.getTile.bind(source);
    printer(params, function(err, image, header){
        if (err) return next(err);
        _(header).each(function(v, k) {
            res.set(k, v);
        });
        res.set({'Content-disposition': 'attachment; filename=' + filename+ '.' + params.format});
        return res.send(image);
    });
}
Esempio n. 2
0
 var processStaticMap = function(areaParams, req, res, next) {
   var scale = getScale(req.params.scale),
       format = req.params.format,
       params = {
         zoom: req.params.z | 0,
         scale: scale,
         bbox: areaParams.bbox,
         center: areaParams.center,
         format: format,
         getTile: function(z, x, y, callback) {
           return getTile(z, x, y, scale, format, function(err, data, headers) {
             if (!err && data == null) {
               err = new Error("Not found");
               err.status = 404;
             }
             callback(err, data, headers);
           });
         }
       };
   return abaculus(params, function(err, data, headers) {
     if (err && !err.status) {
       return next(err);
     }
     res.set(headers);
     res.status((err && err.status) || 200);
     return res.send((err && err.message) || data);
   });
 };
Esempio n. 3
0
function printFromCenter(req, res, next){
    // x & y are lng,lat at the center of the map
    var params = {};
    params.zoom = req.params.z | 0;
    params.center = {
        x: parseFloat(req.params.x),
        y: parseFloat(req.params.y),
        w: req.params.px | 0,
        h: req.params.py | 0
    };

    params.scale = (req.params.scale) ? parseFloat(req.params.scale) : undefined;
    params.scale = params.scale > 9 ? 8 : params.scale;
    params.format = (req.params.format !== 'png') ? req.params.format : 'png';
    params.quality = req.params.quality | 0 || null;
    params.limit = 20000;

    var filename = req.style.data.name + '-z' + params.zoom + '_' +
        req.params.x + '_' +
        req.params.y + '_' +
        (req.params.scale | 0);

    var source = req.params.format === 'vector.pbf'
        ? req.style._backend._source
        : req.style;

    params.getTile = source.getTile.bind(source);
    printer(params, function(err, image, header){
        if (err) return next(err);
        _(header).each(function(v, k) {
            res.set(k, v);
        });
        res.set({'Content-disposition': 'attachment; filename=' + filename + '.'+params.format});
        return res.send(image);
    });
}
Esempio n. 4
0
    return source(id, function(err, s) {
        if (err) return callback(err);
        var style = s.style;
        var params = {
            zoom: s.data.center[2],
            scale: 2,
            center: {
                x: s.data.center[0],
                y: s.data.center[1],
                w: 256,
                h: 256
            },
            getTile: style.getTile.bind(style)
        };

        abaculus(params, function(err, buffer) {
            if (err) return callback(err);
            callback(null, buffer);
            // Save the thumb to disk.
            fs.writeFile(dest, buffer, function(err) {
                if (err && err.code !== 'ENOENT') console.error(err);
            });
        });
    });