@mapnik/mapnik
Version:
Node.js bindings for Mapnik (mapnik.org)
65 lines (55 loc) • 1.67 kB
JavaScript
;
var fs = require('fs');
var path = require('path');
var child_process = require('child_process');
var usage = 'usage: render.js <stylesheet> <image>';
var stylesheet = process.argv[2];
if (!stylesheet) {
console.log(usage);
process.exit(1);
}
var image = process.argv[3];
if (!image) {
console.log(usage);
process.exit(1);
}
var mapnik = require('../');
mapnik.register_default_fonts();
mapnik.register_default_input_plugins();
function renderMap(stylesheet, image) {
var map = new mapnik.Map(600, 400);
map.loadSync(stylesheet,{strict:true});
map.zoomAll();
map.renderFileSync(image);
child_process.exec('open', [image]);
}
if (path.extname(stylesheet).match(/.mml/i)) {
try {
var carto = require('carto');
new carto.Renderer({
filename: stylesheet,
local_data_dir: path.dirname(stylesheet)
}).render(fs.readFileSync(stylesheet, 'utf-8'), function(err, output) {
if (err) {
if (Array.isArray(err)) {
err.forEach(function(e) {
carto.writeError(e, {});
});
}
process.exit(1);
} else {
fs.writeFileSync(
stylesheet.replace('mml', 'xml'),
output, 'utf-8');
stylesheet = stylesheet.replace('mml', 'xml');
renderMap(stylesheet, image);
}
});
} catch (e) {
console.log('Carto is required to render .mml files.');
process.exit(1);
}
} else {
renderMap(stylesheet, image);
}