limitatio
Version:
calculates Roman centuriation given a central survey point
79 lines (68 loc) • 3.33 kB
JavaScript
;
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var grid = _interopDefault(require('@turf/square-grid'));
var helpers = require('@turf/helpers');
var transformRotate = _interopDefault(require('@turf/transform-rotate'));
var distance = _interopDefault(require('@turf/distance'));
var cheapRuler = _interopDefault(require('cheap-ruler'));
// constant roman measurements in meters
const actus = 35.5;
const pes = 0.296;
function index(groma, bearing) {
const coords = groma.geometry.coordinates;
const ruler = cheapRuler(coords[1], 'meters');
const decumanusUltra = ruler.destination(coords, 10 * actus, -90);
const decumanusCitra = ruler.destination(coords, 10 * actus, 90);
const cardoDextera = ruler.destination(coords, 10 * actus, 0);
const cardoSinistra = ruler.destination(coords, 10 * actus, 180);
const extent = [
decumanusUltra[0], cardoSinistra[1],
decumanusCitra[0], cardoDextera[1]
];
function viae() {
//cardo and decumanus
let cardoMaximus = helpers.lineString([cardoDextera, cardoSinistra], { name: 'cardo maximus', width: 20 * pes });
let decumanusMaximus = helpers.lineString([decumanusUltra, decumanusCitra], { name: 'decumanus maximus', width: 40 * pes });
//limites quintarii
let ultraSinistra = [decumanusUltra[0], cardoSinistra[1]];
let ultraDextera = [decumanusUltra[0], cardoDextera[1]];
let citraDextera = [decumanusCitra[0], cardoDextera[1]];
let citraSinistra = [decumanusCitra[0], cardoSinistra[1]];
let limites = { name: 'limite quintarius', width: 8 * pes };
let limiteUltra = helpers.lineString([ultraSinistra, ultraDextera], limites);
let limiteCitra = helpers.lineString([citraSinistra, citraDextera], limites);
let limiteDextera = helpers.lineString([ultraDextera, citraDextera], limites);
let limiteSinistra = helpers.lineString([ultraSinistra, citraSinistra], limites);
let fc = transformRotate(helpers.featureCollection([cardoMaximus, decumanusMaximus, limiteUltra, limiteCitra, limiteDextera, limiteSinistra]), bearing);
return fc;
}
function heredia() {
let h = _height();
let w = _width();
let cellSize = h > w ? w : h;
//round down to deal with lat lng errors
let rounded = Math.floor((cellSize / 20) * 1000) / 1000;
let herediaGrid = grid(extent, 2 * (rounded.toFixed(3)), { units: 'meters' });
let fc = transformRotate(herediaGrid, bearing);
return fc;
}
function _height() {
let from = helpers.point([extent[0], extent[1]]);
let to = helpers.point([extent[0], extent[3]]);
let options = { units: 'meters' };
let dist = distance(from, to, options);
return dist;
}
function _width() {
let from = helpers.point([extent[0], extent[1]]);
let to = helpers.point([extent[2], extent[1]]);
let options = { units: 'meters' };
let dist = distance(from, to, options);
return dist;
}
let output = [];
output = output.concat(heredia().features);
output = output.concat(viae().features);
return helpers.featureCollection(output);
}
module.exports = index;