mirror of https://github.com/pelias/api.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.2 KiB
57 lines
1.2 KiB
/** |
|
* |
|
* Accuracy level should be set for each item in the results. |
|
* The level can be any of the following: |
|
* - point |
|
* - interpolated |
|
* - centroid |
|
*/ |
|
|
|
var check = require('check-types'); |
|
|
|
var accuracyLevelPoint = 'point'; |
|
var accuracyLevelInterpolated = 'interpolated'; |
|
var accuracyLevelCentroid = 'centroid'; |
|
|
|
|
|
function setup() { |
|
return computeAccuracy; |
|
} |
|
|
|
function computeAccuracy(req, res, next) { |
|
// do nothing if no result data set |
|
if (check.undefined(res) || check.undefined(res.data)) { |
|
return next(); |
|
} |
|
|
|
// loop through data items and determine accuracy levels |
|
res.data = res.data.map(computeAccuracyLevelForResult); |
|
|
|
next(); |
|
} |
|
|
|
/** |
|
* Determine accuracy level based on the type of result being returned. |
|
* |
|
* @param {object} hit |
|
* @returns {object} |
|
*/ |
|
function computeAccuracyLevelForResult(hit) { |
|
|
|
// TODO: add a check for interpolated addresses when that feature lands |
|
|
|
switch (hit.layer) { |
|
case 'venue': |
|
case 'address': |
|
hit.accuracy = accuracyLevelPoint; |
|
break; |
|
// this means it's a street or admin area |
|
default: |
|
hit.accuracy = accuracyLevelCentroid; |
|
break; |
|
} |
|
|
|
return hit; |
|
} |
|
|
|
module.exports = setup;
|
|
|