tatry
Version:
Elevation API server.
36 lines (29 loc) • 839 B
JavaScript
const { default: Flatbush } = require('flatbush');
const debug = require('debug')('tatry:file-bag');
module.exports = fileBag;
function init(data) {
const tree = new Flatbush(data.length);
for (const { minX, minY, maxX, maxY } of data) {
tree.add(minX, minY, maxX, maxY);
}
tree.finish();
return tree;
}
function fileBag(data) {
debug('Working with %d files', data.length);
const tree = init(data);
function find(ll) {
const indexes = tree.search(ll[0], ll[1], ll[0], ll[1]);
if (indexes.length === 0) {
return;
}
if (indexes.length === 1) {
return data[indexes[0]];
}
// pick the one with smallest pixels i.e. biggest scale in inverted transformation
return indexes.map(i => data[i]).reduce((a, b) => (a.meta.it[1] > b.meta.it[1] ? a : b));
}
return {
find
};
}