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.
70 lines
1.8 KiB
70 lines
1.8 KiB
|
|
var logger = require('../src/logger'); |
|
|
|
// Build pelias suggest query |
|
function generate( params, query_mixer, fuzziness ){ |
|
|
|
var CmdGenerator = function(params){ |
|
this.params = params; |
|
this.cmd = { |
|
'text': params.input |
|
}; |
|
}; |
|
|
|
CmdGenerator.prototype.get_precision = function() { |
|
var zoom = this.params.zoom; |
|
switch (true) { |
|
case (zoom > 15): |
|
return 5; // zoom: >= 16 |
|
case (zoom > 9): |
|
return 4; // zoom: 10-15 |
|
case (zoom > 5): |
|
return 3; // zoom: 6-9 |
|
case (zoom > 3): |
|
return 2; // zoom: 4-5 |
|
default: |
|
return 1; // zoom: 1-3 or when zoom: undefined |
|
} |
|
}; |
|
|
|
CmdGenerator.prototype.add_suggester = function(name, precision, layers, fuzzy) { |
|
this.cmd[name] = { |
|
'completion' : { |
|
'size' : this.params.size, |
|
'field' : 'suggest', |
|
'context': { |
|
'dataset': layers || this.params.layers, |
|
'location': { |
|
'value': [ this.params.lon, this.params.lat ], |
|
'precision': precision || this.get_precision() |
|
} |
|
}, |
|
'fuzzy': { |
|
'fuzziness': fuzzy || fuzziness || 0 |
|
} |
|
} |
|
}; |
|
}; |
|
|
|
var cmd = new CmdGenerator(params); |
|
if (query_mixer && query_mixer.length) { |
|
query_mixer.forEach(function(item, index){ |
|
if (item.precision && Array.isArray( item.precision ) && item.precision.length ) { |
|
item.precision.forEach(function(precision) { |
|
cmd.add_suggester(index, precision, item.layers, item.fuzzy); |
|
}); |
|
} else { |
|
cmd.add_suggester(index, undefined, item.layers, item.fuzzy); |
|
} |
|
}); |
|
} else { |
|
cmd.add_suggester(0); |
|
} |
|
|
|
|
|
// logger.log( 'cmd', JSON.stringify( cmd.cmd, null, 2 ) ); |
|
return cmd.cmd; |
|
|
|
} |
|
|
|
module.exports = generate; |