|
|
|
var extend = require('extend');
|
|
|
|
var geojsonify = require('../helper/geojsonify').search;
|
|
|
|
|
|
|
|
function setup(peliasConfig) {
|
|
|
|
|
|
|
|
peliasConfig = peliasConfig || require( 'pelias-config' ).generate().api;
|
|
|
|
|
|
|
|
function middleware(req, res, next) {
|
|
|
|
return convertToGeocodeJSON(peliasConfig, req, res, next);
|
|
|
|
}
|
|
|
|
|
|
|
|
return middleware;
|
|
|
|
}
|
|
|
|
|
|
|
|
function convertToGeocodeJSON(peliasConfig, req, res, next) {
|
|
|
|
|
|
|
|
res.body = { geocoding: {} };
|
|
|
|
|
|
|
|
// REQUIRED. A semver.org compliant version number. Describes the version of
|
|
|
|
// the GeocodeJSON spec that is implemented by this instance.
|
|
|
|
res.body.geocoding.version = '0.1';
|
|
|
|
|
|
|
|
// OPTIONAL. Default: null. The attribution of the data. In case of multiple sources,
|
|
|
|
// and then multiple attributions, can be an object with one key by source.
|
|
|
|
// Can be a URI on the server, which outlines attribution details.
|
|
|
|
res.body.geocoding.attribution = peliasConfig.host + 'attribution';
|
|
|
|
|
|
|
|
// OPTIONAL. Default: null. The query that has been issued to trigger the
|
|
|
|
// search.
|
|
|
|
// Freeform object.
|
|
|
|
// This is the equivalent of how the engine interpreted the incoming request.
|
|
|
|
// Helpful for debugging and understanding how the input impacts results.
|
|
|
|
res.body.geocoding.query = req.clean;
|
|
|
|
|
|
|
|
// OPTIONAL. Warnings and errors.
|
|
|
|
addMessages(req, 'warnings', res.body.geocoding);
|
|
|
|
addMessages(req, 'errors', res.body.geocoding);
|
|
|
|
|
|
|
|
// OPTIONAL
|
|
|
|
// Freeform
|
|
|
|
addEngine(peliasConfig, res.body.geocoding);
|
|
|
|
|
|
|
|
// response envelope
|
|
|
|
res.body.geocoding.timestamp = new Date().getTime();
|
|
|
|
|
|
|
|
// convert docs to geojson and merge with geocoding block
|
|
|
|
extend(res.body, geojsonify(res.data || []));
|
|
|
|
|
|
|
|
next();
|
|
|
|
}
|
|
|
|
|
|
|
|
function addMessages(req, msgType, geocoding) {
|
|
|
|
if (req.hasOwnProperty(msgType) && req[msgType].length) {
|
|
|
|
geocoding[msgType] = req[msgType];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function addEngine(peliasConfig, geocoding) {
|
|
|
|
geocoding.engine = {
|
|
|
|
name: 'Pelias',
|
|
|
|
author: 'Mapzen',
|
|
|
|
version: peliasConfig.version
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = setup;
|