"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 = ` testmap geojson ${basefile} testroute-line testroute-markers geojson ${routefile} `; var map = new mapnik.Map(300, 200); map.fromStringSync(stylesheet,{strict:true}); map.zoomAll(); var extent = map.extent; extent[0] = extent[0] - Math.abs(extent[0]) * 0.00001; extent[1] = extent[1] - Math.abs(extent[1]) * 0.00001; extent[2] = extent[2] + Math.abs(extent[2]) * 0.00001; extent[3] = extent[3] + Math.abs(extent[3]) * 0.00001; map.zoomToBox(extent); var buffer = new mapnik.Image(300,200) 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]}`.replace(/\//g,'_'); var png = makemappng(`${files[1]}.geojson`, `${files[1]}_${files[2]}_shape.geojson`, (png) => { fs.writeFileSync(`report/${imagefile}`,png); }); toc.push({ title: `${results.feature} - ${results.scenario}`, link: imagefile }); report += `

${results.feature} - ${results.scenario}

RouteTurns
Expected${results.expected.route}${results.expected.turns}
Got${results.got.route}${results.got.turns}

`; // Generate HTML table }); console.log(` `); toc.forEach(r => { console.log(`${r.title}
`); }); console.log(report); console.log(` `);