"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(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 += `

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

Download OSM XML file for this test
Download OSM PBF file for this test
Download request used for this test
Download raw response for this test
RouteTurns
OSRM${results.expected.route}${results.expected.turns}
Valhalla${results.got.route}${results.got.turns}

`; // 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(` `);