geolocation-utils
Version:
A utility library for calculations with geolocations
97 lines (77 loc) • 2.05 kB
JavaScript
import test from 'ava'
import { approxDeepEqual } from './approx'
import { cpa, cpaTime, cpaDistance } from '../src/cpa'
test('test1', t => {
const track1 = {
position: {x: 0, y: 0},
vector: {x: 1, y: 1}
}
const track2 = {
position: {x: 1, y: 0},
vector: {x: -1, y: 1}
}
t.is(cpaTime(track1, track2), 0.5)
t.is(cpaDistance(track1, track2), 0)
})
test('test2', t => {
const track1 = {
position: {x: 0, y: 0},
vector: {x: 0, y: 1}
}
const track2 = {
position: {x: 1, y: 1},
vector: {x: -1, y: 0}
}
t.is(cpaTime(track1, track2), 1)
t.is(cpaDistance(track1, track2), 0)
})
test('test3', t => {
const track1 = {
position: {x: 0, y: 0},
vector: {x: 0, y: 1}
}
const track2 = {
position: {x: 1, y: 1},
vector: {x: -2, y: 0}
}
t.is(cpaTime(track1, track2), 0.6)
t.is(cpaDistance(track1, track2), 0.4472135954999579)
})
test('test4', t => {
const ship1 = {
location: {lon: 4.61039, lat: 51.70401},
speed: 5, // meters/second
heading: 200 // degrees
}
const ship2 = {
location: {lon: 4.60109, lat: 51.69613},
speed: 0.8334, // meters/second
heading: 180 // degrees
}
// the following outputs look realistic to me (I based it on two ships I saw on screen)
const actual = cpa(ship1, ship2)
const expected = {
time: 251.22255125913932, // seconds
distance: 231.90976012822378 // meters
}
t.truthy(approxDeepEqual(actual, expected))
})
test('test5', t => {
const ship1 = {
location: {lon: 4.61935, lat: 51.71854},
speed: 2.7777778, // m/s
heading: 204.2 // degrees
}
const ship2 = {
location: {lon: 4.6247, lat: 51.71587},
speed: 5.833333, // m/s
heading: 254.4 // degrees
}
// the following outputs look realistic to me (I based it on two ships I saw on screen)
const actual = cpa(ship1, ship2)
const expected = {
time: 92.37206214154632, // seconds
distance: 212.8459458277701 // meters
}
t.truthy(approxDeepEqual(actual, expected))
})