mirror of https://github.com/pelias/api.git
Peter Johnson
8 years ago
7 changed files with 174 additions and 4 deletions
@ -0,0 +1,36 @@ |
|||||||
|
|
||||||
|
/** |
||||||
|
normalize co-ordinates that lie outside of the normal ranges. |
||||||
|
**/ |
||||||
|
|
||||||
|
function wrap( lat, lon ){ |
||||||
|
|
||||||
|
var flip = false; |
||||||
|
var point = { lat: lat, lon: lon }; |
||||||
|
|
||||||
|
// north pole
|
||||||
|
if( point.lat > 90 ){ |
||||||
|
point.lat = 90 - point.lat % 90; |
||||||
|
point.lon += 180; |
||||||
|
} |
||||||
|
|
||||||
|
// south pole
|
||||||
|
else if( point.lat < -90 ){ |
||||||
|
point.lat = -90 - point.lat % 90; |
||||||
|
point.lon += 180; |
||||||
|
} |
||||||
|
|
||||||
|
// reduce lon
|
||||||
|
while( point.lon > 180 ){ |
||||||
|
point.lon -= 360; |
||||||
|
} |
||||||
|
|
||||||
|
// increase lon
|
||||||
|
while( point.lon < -180 ){ |
||||||
|
point.lon += 360; |
||||||
|
} |
||||||
|
|
||||||
|
return point; |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = wrap; |
@ -0,0 +1,71 @@ |
|||||||
|
|
||||||
|
var wrap = require('../../../sanitiser/wrap'); |
||||||
|
|
||||||
|
module.exports.tests = {}; |
||||||
|
|
||||||
|
module.exports.tests.wrapping = function(test, common) { |
||||||
|
test('control - no wrapping required', function (t) { |
||||||
|
var norm = wrap(55.555, 22.222); |
||||||
|
t.equal(norm.lat, 55.555); |
||||||
|
t.equal(norm.lon, 22.222); |
||||||
|
t.end(); |
||||||
|
}); |
||||||
|
test('positive longitude wrapping', function (t) { |
||||||
|
var norm = wrap(0, 181); |
||||||
|
t.equal(norm.lat, 0); |
||||||
|
t.equal(norm.lon, -179); |
||||||
|
t.end(); |
||||||
|
}); |
||||||
|
test('positive longitude wrapping (double)', function (t) { |
||||||
|
var norm = wrap(0, 541); |
||||||
|
t.equal(norm.lat, 0); |
||||||
|
t.equal(norm.lon, -179); |
||||||
|
t.end(); |
||||||
|
}); |
||||||
|
test('negative longitude wrapping', function (t) { |
||||||
|
var norm = wrap(0, -181); |
||||||
|
t.equal(norm.lat, 0); |
||||||
|
t.equal(norm.lon, 179); |
||||||
|
t.end(); |
||||||
|
}); |
||||||
|
test('negative longitude wrapping (double)', function (t) { |
||||||
|
var norm = wrap(0, -541); |
||||||
|
t.equal(norm.lat, 0); |
||||||
|
t.equal(norm.lon, 179); |
||||||
|
t.end(); |
||||||
|
}); |
||||||
|
test('positive latitudinal wrapping', function (t) { |
||||||
|
var norm = wrap(91, 0); |
||||||
|
t.equal(norm.lat, 89); |
||||||
|
t.equal(norm.lon, 180); |
||||||
|
t.end(); |
||||||
|
}); |
||||||
|
test('positive latitudinal wrapping (double)', function (t) { |
||||||
|
var norm = wrap(271, 0); |
||||||
|
t.equal(norm.lat, 89); |
||||||
|
t.equal(norm.lon, 180); |
||||||
|
t.end(); |
||||||
|
}); |
||||||
|
test('negative latitudinal wrapping', function (t) { |
||||||
|
var norm = wrap(-91, 0); |
||||||
|
t.equal(norm.lat, -89); |
||||||
|
t.equal(norm.lon, 180); |
||||||
|
t.end(); |
||||||
|
}); |
||||||
|
test('negative latitudinal wrapping (double)', function (t) { |
||||||
|
var norm = wrap(-271, 0); |
||||||
|
t.equal(norm.lat, -89); |
||||||
|
t.equal(norm.lon, 180); |
||||||
|
t.end(); |
||||||
|
}); |
||||||
|
}; |
||||||
|
|
||||||
|
module.exports.all = function (tape, common) { |
||||||
|
function test(name, testFunction) { |
||||||
|
return tape('SANTIZE wrap ' + name, testFunction); |
||||||
|
} |
||||||
|
|
||||||
|
for( var testCase in module.exports.tests ){ |
||||||
|
module.exports.tests[testCase](test, common); |
||||||
|
} |
||||||
|
}; |
Loading…
Reference in new issue