You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
901 B
28 lines
901 B
const DistanceResovler = require('./DistanceResolver.js')
|
|
|
|
class SimpleDistanceResolver extends DistanceResovler {
|
|
/**
|
|
* Gets (great-circle) distance between point A and point B
|
|
* @param {Number[]} A - array [longitude, latitude]
|
|
* @param {Number[]} B - array [longitude, latitude]
|
|
* @returns {Return Promise<Number>} distance between points in meters
|
|
*/
|
|
getDistance (A, B) {
|
|
super.getDistance(A, B)
|
|
const radConv = Math.PI / 180
|
|
const earthRadius = 6371 * 1000 // kilometers to meters
|
|
|
|
const lonA = A[0] * radConv
|
|
const lonB = B[0] * radConv
|
|
const latA = A[1] * radConv
|
|
const latB = B[1] * radConv
|
|
|
|
const lonD = Math.abs(lonA - lonB)
|
|
|
|
const absAngle = Math.acos(Math.sin(latA) * Math.sin(latB) + Math.cos(latA) * Math.cos(latB) * Math.cos(lonD))
|
|
|
|
return Promise.resolve(absAngle * earthRadius)
|
|
}
|
|
}
|
|
|
|
module.exports = SimpleDistanceResolver
|
|
|