133 lines
3.2 KiB
JavaScript
Executable File
133 lines
3.2 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
'use strict';
|
|
|
|
let fs = require('fs'); // Node 4.x required!
|
|
|
|
let VERSION = "route_5.0";
|
|
let SAMPLE_SIZE = 20;
|
|
let NUM_REQUEST = 100;
|
|
let NUM_COORDS = 2;
|
|
let PORT = 5000;
|
|
let url_templates = {
|
|
"route_5.0": "http://127.0.0.1:{port}/route/v1/driving/{coords}?steps=false&alternatives=false",
|
|
"route_4.9": "http://127.0.0.1:{port}/viaroute?{coords}&instructions=false&alt=false",
|
|
"table_5.0": "http://127.0.0.1:{port}/table/v1/driving/{coords}",
|
|
"table_4.9": "http://127.0.0.1:{port}/table?{coords}"
|
|
};
|
|
|
|
let coord_templates = {
|
|
"route_5.0": "{lon},{lat}",
|
|
"route_4.9": "loc={lat},{lon}",
|
|
"table_5.0": "{lon},{lat}",
|
|
"table_4.9": "loc={lat},{lon}"
|
|
};
|
|
|
|
let coords_separators = {
|
|
"route_5.0": ";",
|
|
"route_4.9": "&",
|
|
"table_5.0": ";",
|
|
"table_4.9": "&"
|
|
};
|
|
var axis = "distance";
|
|
|
|
var sw = [Number.MAX_VALUE, Number.MAX_VALUE];
|
|
var ne = [Number.MIN_VALUE, Number.MIN_VALUE];
|
|
|
|
if (process.argv.length > 2 && process.argv[2] == "planet")
|
|
{
|
|
sw = [-180., -85.];
|
|
ne = [180., 85.];
|
|
}
|
|
if (process.argv.length > 2 && process.argv[2] == "us")
|
|
{
|
|
sw = [-127., 24.];
|
|
ne = [-67., 48.];
|
|
}
|
|
else if (process.argv.length > 2 && process.argv[2] == "dc")
|
|
{
|
|
sw = [-77.138, 38.808];
|
|
ne = [-76.909, 38.974];
|
|
}
|
|
else if (process.argv.length > 2)
|
|
{
|
|
let poly_path = process.argv[2];
|
|
let poly_data = fs.readFileSync(poly_path, 'utf-8');
|
|
|
|
// lets assume there is only one ring
|
|
// cut of name and ring number and the two END statements
|
|
let coordinates = poly_data.split('\n')
|
|
.filter((l) => l != '')
|
|
.slice(2, -2).map((coord_line) => coord_line.split(' ')
|
|
.filter((elem) => elem != ''))
|
|
.map((coord) => [parseFloat(coord[0]), parseFloat(coord[1])]);
|
|
|
|
coordinates.forEach((c) => {
|
|
sw[0] = Math.min(sw[0], c[0]);
|
|
sw[1] = Math.min(sw[1], c[1]);
|
|
ne[0] = Math.max(ne[0], c[0]);
|
|
ne[1] = Math.max(ne[1], c[1]);
|
|
});
|
|
}
|
|
|
|
if (process.argv.length > 3)
|
|
{
|
|
axis = process.argv[3];
|
|
}
|
|
|
|
console.error(sw);
|
|
console.error(ne);
|
|
|
|
// Yes this an own seeded random number generator because its only a few lines
|
|
var seed = 0x1337;
|
|
function seededRandom(min, max) {
|
|
seed = (seed * 9301 + 49297) % 233280;
|
|
var rnd = seed / 233280;
|
|
return min + rnd * (max - min);
|
|
}
|
|
|
|
function getRandomCoordinate() {
|
|
let lon = seededRandom(sw[0], ne[0]);
|
|
let lat = seededRandom(sw[1], ne[1]);
|
|
return [lon, lat];
|
|
}
|
|
|
|
function makeQuery(coords) {
|
|
let coords_string = coords.map((c) => coord_templates[VERSION].replace("{lon}", c[0]).replace("{lat}", c[1])).join(coords_separators[VERSION]);
|
|
return url_templates[VERSION].replace("{coords}", coords_string).replace("{port}", PORT);
|
|
}
|
|
|
|
if (axis == "distance")
|
|
{
|
|
for (var i = 0; i < NUM_REQUEST; ++i)
|
|
{
|
|
var coords = [];
|
|
for (var j = 0; j < NUM_COORDS; ++j)
|
|
{
|
|
coords.push(getRandomCoordinate());
|
|
}
|
|
console.log(makeQuery(coords));
|
|
}
|
|
}
|
|
else if (axis == "waypoints")
|
|
{
|
|
for (var power = 0; power <= 1; ++power)
|
|
{
|
|
for (var factor = 1; factor <= 10; ++factor)
|
|
{
|
|
let num_coords = factor*Math.pow(10, power);
|
|
console.error(num_coords);
|
|
for (var i = 0; i < SAMPLE_SIZE; ++i)
|
|
{
|
|
var coords = [];
|
|
for (var j = 0; j < num_coords; ++j)
|
|
{
|
|
coords.push(getRandomCoordinate());
|
|
}
|
|
console.log(makeQuery(coords));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|