speed-filter
Version:
Filters GPS data based on speed
119 lines (114 loc) • 3.37 kB
JavaScript
var chai = require("chai");
var expect = chai.expect;
var speedFilter = require('./speedfilter.js');
var LOWER = 1.5, // Meters / Second
HIGHER = 14,
points = [{
lng: -88.19593,
lat: 40.1108353,
time: '2016-07-11T17:48:42.489Z'
}, {
lng: -88.1944071,
lat: 40.1079313,
time: '2016-07-11T17:52:39.716Z'
}, {
lng: -88.1953208,
lat: 40.1077055,
time: '2016-07-11T17:52:57.270Z'
}, {
lng: -88.1955493,
lat: 40.1062688,
time: '2016-07-11T17:53:33.622Z'
}, {
lng: -88.1949401,
lat: 40.1056192,
time: '2016-07-11T17:54:50.591Z'
}, {
lng: -88.1932268,
lat: 40.1060327,
time: '2016-07-11T17:55:59.240Z'
}, {
lng: -88.1917419,
lat: 40.1051694,
time: '2016-07-11T17:56:12.507Z'
}, {
lng: -88.1921988,
lat: 40.1058967,
time: '2016-07-11T17:57:11.741Z'
}, {
lng: -88.1896857,
lat: 40.1052974,
time: '2016-07-11T17:57:29.459Z'
}, {
lng: -88.1895334,
lat: 40.105215,
time: '2016-07-11T17:59:52.109Z'
}, {
lng: -88.1867917,
lat: 40.1062125,
time: '2016-07-11T18:00:09.763Z'
}];
describe("Calc Speeds", function() {
speeds = speedFilter.calcSpeeds(points);
it("speeds should be greater than 0", function() {
for (var i = 0; i < speeds.length; i++) {
expect(speeds[i]).to.be.above(0);
}
});
});
describe("Calc elapsed time", function() {
var time1 = "2016-07-12 17:16:30.123+00";
var time2 = "2016-07-12 17:16:39.241+00";
var elapsed = speedFilter.calcElapsed(time1, time2);
it("should calc time accurately in seconds", function() {
expect(Math.abs(elapsed - 9)).to.be.below(1);
});
it("should be greater than 0", function() {
expect(elapsed).to.be.above(0);
});
});
describe("Calc Dists", function() {
var dists;
beforeEach(function() {
dists = speedFilter.calcDists(points);
});
it("should return distances", function() {
for (var i = 0; i < dists.length; i++) {
expect(dists[i]).to.be.above(0);
}
});
it("should have a length one less", function() {
expect(dists.length - points.length).to.be.equal(-1);
});
});
describe("Dist", function() {
var pt1 = {
x: 43.12123,
y: 34.23
},
pt2 = {
x: -15.343,
y: -34.99
};
var distance = speedFilter.dist(pt1, pt2);
it("should calculate distance", function() {
expect(Math.abs(distance - (9568 * 1000))).to.be.most(300 * 1000);
});
it("should be greater than 0", function() {
expect(speedFilter.dist(points[0], points[1])).to.be.above(0);
});
});
describe("Filter Speeds", function() {
var filtered = speedFilter.filter(points, LOWER, HIGHER);
speeds = speedFilter.calcSpeeds(filtered);
it("should remove speeds below lower bound", function() {
for (var i = 0; i < speeds.length; i++) {
expect(speeds[i]).to.be.above(LOWER);
}
});
it("should remove speeds above higher bound", function() {
for (var i = 0; i < speeds.length; i++) {
expect(speeds[i]).to.be.below(HIGHER);
}
});
});