diff --git a/query/search.js b/query/search.js index a6c2fd6a..92a9db00 100644 --- a/query/search.js +++ b/query/search.js @@ -1,8 +1,8 @@ var peliasQuery = require('pelias-query'), defaults = require('./search_defaults'), textParser = require('./text_parser'), - check = require('check-types'), - geolib = require('geolib'); + check = require('check-types'); + var placeTypes = require('../helper/placeTypes'); // region_a is also an admin field. addressit tries to detect @@ -77,19 +77,6 @@ function generateQuery( clean ){ }); } - // focus viewport - if( check.number(clean['focus.viewport.min_lat']) && - check.number(clean['focus.viewport.max_lat']) && - check.number(clean['focus.viewport.min_lon']) && - check.number(clean['focus.viewport.max_lon']) ) { - // calculate the centroid from the viewport box - vs.set({ - 'focus:point:lat': clean['focus.viewport.min_lat'] + ( clean['focus.viewport.max_lat'] - clean['focus.viewport.min_lat'] ) / 2, - 'focus:point:lon': clean['focus.viewport.min_lon'] + ( clean['focus.viewport.max_lon'] - clean['focus.viewport.min_lon'] ) / 2 - //, 'focus:scale': calculateDiagonalDistance(clean) + 'km' - }); - } - // boundary rect if( check.number(clean['boundary.rect.min_lat']) && check.number(clean['boundary.rect.max_lat']) && @@ -134,16 +121,4 @@ function generateQuery( clean ){ return query.render( vs ); } -// return diagonal distance in km, with min=1 -function calculateDiagonalDistance(clean) { - var diagonalDistance = geolib.getDistance( - { latitude: clean['focus.viewport.min_lat'], longitude: clean['focus.viewport.min_lon'] }, - { latitude: clean['focus.viewport.max_lat'], longitude: clean['focus.viewport.max_lon'] }, - 1000 - ) / 1000; - - return Math.max(diagonalDistance, 1); - -} - module.exports = generateQuery; diff --git a/sanitiser/_geo_search.js b/sanitiser/_geo_search.js index 8aef9b7f..ae820fbf 100644 --- a/sanitiser/_geo_search.js +++ b/sanitiser/_geo_search.js @@ -1,9 +1,9 @@ var check = require('check-types'); var geo_common = require ('./_geo_common'); + var LAT_LON_IS_REQUIRED = false; var RECT_IS_REQUIRED = false; var CIRCLE_IS_REQUIRED = false; -var VIEWPORT_IS_REQUIRED = false; // validate inputs, convert types and apply defaults module.exports = function sanitize( raw, clean ){ @@ -11,22 +11,10 @@ module.exports = function sanitize( raw, clean ){ // error & warning messages var messages = { errors: [], warnings: [] }; - // disallow specifying both focus.point and focus.viewport - if ( ( raw['focus.viewport.min_lat'] || - raw['focus.viewport.max_lat'] || - raw['focus.viewport.min_lon'] || - raw['focus.viewport.max_lon'] ) && - ( raw['focus.point.lat'] || - raw['focus.point.lon'] ) ) { - messages.errors.push( 'focus.point and focus.viewport can\'t both be set' ); - return messages; - } - try { geo_common.sanitize_point( 'focus.point', clean, raw, LAT_LON_IS_REQUIRED ); geo_common.sanitize_rect( 'boundary.rect', clean, raw, RECT_IS_REQUIRED ); geo_common.sanitize_circle( 'boundary.circle', clean, raw, CIRCLE_IS_REQUIRED ); - geo_common.sanitize_rect( 'focus.viewport', clean, raw, VIEWPORT_IS_REQUIRED ); } catch (err) { messages.errors.push( err.message ); diff --git a/test/unit/query/search.js b/test/unit/query/search.js index 29c8a06e..4ff414c0 100644 --- a/test/unit/query/search.js +++ b/test/unit/query/search.js @@ -73,42 +73,6 @@ module.exports.tests.query = function(test, common) { t.end(); }); - test('search search + viewport', function(t) { - var query = generate({ - text: 'test', querySize: 10, - 'focus.viewport.min_lat': 28.49136, - 'focus.viewport.max_lat': 30.49136, - 'focus.viewport.min_lon': -87.50622, - 'focus.viewport.max_lon': -77.50622, - layers: ['test'] - }); - - var compiled = JSON.parse( JSON.stringify( query ) ); - var expected = require('../fixture/search_linguistic_viewport'); - - t.deepEqual(compiled, expected, 'search_linguistic_viewport'); - t.end(); - }); - - // viewport scale sizing currently disabled. - // ref: https://github.com/pelias/api/pull/388 - // test('search with viewport diagonal < 1km should set scale to 1km', function(t) { - // var query = generate({ - // text: 'test', querySize: 10, - // 'focus.viewport.min_lat': 28.49135, - // 'focus.viewport.max_lat': 28.49137, - // 'focus.viewport.min_lon': -87.50622, - // 'focus.viewport.max_lon': -87.50624, - // layers: ['test'] - // }); - // - // var compiled = JSON.parse( JSON.stringify( query ) ); - // var expected = require('../fixture/search_linguistic_viewport_min_diagonal'); - // - // t.deepEqual(compiled, expected, 'valid search query'); - // t.end(); - // }); - test('search search + focus on null island', function(t) { var query = generate({ text: 'test', querySize: 10, diff --git a/test/unit/sanitiser/search.js b/test/unit/sanitiser/search.js index 53bdb6af..70c4400f 100644 --- a/test/unit/sanitiser/search.js +++ b/test/unit/sanitiser/search.js @@ -206,75 +206,6 @@ module.exports.tests.sanitize_bounding_rect = function(test, common) { }); }; -module.exports.tests.sanitize_viewport = function(test, common) { - test('valid viewport', function(t) { - var req = { - query: { - text: 'test', - 'focus.viewport.min_lat': '37', - 'focus.viewport.max_lat': '38', - 'focus.viewport.min_lon': '-123', - 'focus.viewport.max_lon': '-122' - } - }; - sanitize(req, function() { - t.equal(req.errors[0], undefined, 'no error'); - t.equal(req.clean['focus.viewport.min_lat'], parseFloat(req.query['focus.viewport.min_lat']), 'correct min_lat in clean'); - t.equal(req.clean['focus.viewport.max_lat'], parseFloat(req.query['focus.viewport.max_lat']), 'correct max_lat in clean'); - t.equal(req.clean['focus.viewport.min_lon'], parseFloat(req.query['focus.viewport.min_lon']), 'correct min_lon in clean'); - t.equal(req.clean['focus.viewport.max_lon'], parseFloat(req.query['focus.viewport.max_lon']), 'correct max_lon in clean'); - t.end(); - }); - }); - - test('error returned if focus.point and focus.viewpoint specified', function(t) { - var req = { - query: { - text: 'test', - 'focus.point.lat': '10', - 'focus.point.lon': '15', - 'focus.viewport.min_lat': '37', - 'focus.viewport.max_lat': '38', - 'focus.viewport.min_lon': '-123', - 'focus.viewport.max_lon': '-122' - } - }; - - sanitize(req, function() { - t.equal(req.errors[0], 'focus.point and focus.viewport can\'t both be set', 'no error'); - t.notOk(req.clean.hasOwnProperty('focus.viewport.min_lat'), 'clean should be empty'); - t.notOk(req.clean.hasOwnProperty('focus.viewport.max_lat'), 'clean should be empty'); - t.notOk(req.clean.hasOwnProperty('focus.viewport.min_lon'), 'clean should be empty'); - t.notOk(req.clean.hasOwnProperty('focus.viewport.max_lon'), 'clean should be empty'); - t.notOk(req.clean.hasOwnProperty('focus.point.lat'), 'clean should be empty'); - t.notOk(req.clean.hasOwnProperty('focus.point.lon'), 'clean should be empty'); - t.end(); - }); - }); - - test('error returned if focus.point and focus.viewpoint partially specified', function(t) { - var req = { - query: { - text: 'test', - 'focus.point.lat': '10', - 'focus.viewport.min_lat': '37', - 'focus.viewport.max_lon': '-122' - } - }; - - sanitize(req, function() { - t.equal(req.errors[0], 'focus.point and focus.viewport can\'t both be set', 'no error'); - t.notOk(req.clean.hasOwnProperty('focus.viewport.min_lat'), 'clean should be empty'); - t.notOk(req.clean.hasOwnProperty('focus.viewport.max_lat'), 'clean should be empty'); - t.notOk(req.clean.hasOwnProperty('focus.viewport.min_lon'), 'clean should be empty'); - t.notOk(req.clean.hasOwnProperty('focus.viewport.max_lon'), 'clean should be empty'); - t.notOk(req.clean.hasOwnProperty('focus.point.lat'), 'clean should be empty'); - t.notOk(req.clean.hasOwnProperty('focus.point.lon'), 'clean should be empty'); - t.end(); - }); - }); -}; - module.exports.tests.sanitize_size = function(test, common) { test('invalid size value', function(t) { var req = { query: { size: 'a', text: 'test', lat: 0, lon: 0 } };