"use strict"
const fs = require('fs');
const path = require('path');
const d3 = require('d3-queue');
var mapnik = require('mapnik');
mapnik.register_default_input_plugins();
mapnik.register_system_fonts()
//console.log(mapnik.fonts());
const find = (dir) =>
fs.readdirSync(dir)
.reduce((files, file) =>
fs.statSync(path.join(dir, file)).isDirectory() ?
files.concat(find(path.join(dir, file))) :
files.concat(path.join(dir, file)),
[]);
function makemappng(basefile, routefile, callback) {
var stylesheet = `
`;
var map = new mapnik.Map(400, 300);
map.fromStringSync(stylesheet,{strict:true});
map.zoomAll();
var extent = map.extent;
extent[0] = extent[0] - Math.abs(extent[0]) * 0.00005;
extent[1] = extent[1] - Math.abs(extent[1]) * 0.00005;
extent[2] = extent[2] + Math.abs(extent[2]) * 0.00005;
extent[3] = extent[3] + Math.abs(extent[3]) * 0.00005;
map.zoomToBox(extent);
var buffer = new mapnik.Image(400,300)
map.render(buffer, {}, (err,image) => {
callback(image.encodeSync('png'));
});
}
var report = "";
var toc = [];
find('test/cache').filter((f) => f.match(/[0-9]+_results.json$/)).forEach((f) => {
var files = f.match(/(.*?)_([0-9]+)_results.json$/,f);
var results = JSON.parse(fs.readFileSync(f));
// Generate map image
var imagefile = `${files[1]}_${files[2]}.png`.replace(/\//g,'_');
var png = makemappng(`${files[1]}.geojson`, `${files[1]}_${files[2]}_shape.geojson`, (png) => {
fs.writeFileSync(`report/${imagefile}`,png);
});
var osmfile = `${files[1]}`.replace(/\//g,'_');
var pbffile = `${files[1]}`.replace(/\//g,'_').replace(/.osm/,'.pbf');
var responsefile = `${files[1]}_${files[2]}_response.json`.replace(/\//g,'_');
var requestfile = `${files[1]}_${files[2]}_request.txt`.replace(/\//g,'_');
fs.writeFileSync(`report/${osmfile}`, fs.readFileSync(files[1]));
fs.writeFileSync(`report/${pbffile}`, fs.readFileSync(`${files[1].replace(/.osm$/,'.pbf')}`));
fs.writeFileSync(`report/${responsefile}`, fs.readFileSync(`${files[1]}_${files[2]}_response.json`));
fs.writeFileSync(`report/${requestfile}`, fs.readFileSync(`${files[1]}_${files[2]}_request.txt`));
toc.push({ title: `${results.feature} - ${results.scenario}`, link: imagefile });
if (typeof results.got.turns === 'object')
results.got.turns = results.got.turns.join(',');
if (typeof results.expected.turns === 'string')
results.expected.turns = results.expected.turns.replace(/slight /g,'').replace(/sharp /g, '');
if (typeof results.got.turns === 'string')
results.got.turns = results.got.turns.replace(/slight /g,'').replace(/sharp /g, '');
report += `
`;
// Generate HTML table
});
console.log(`
Notes: OSRM "slight" and "sharp" indicators have been removed for comparison purposes.
`);
toc.forEach(r => {
console.log(`${r.title}
`);
});
console.log(report);
console.log(`
`);