forked from TheAlgorithms/JavaScript
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHaversine.js
More file actions
Latest commit
34 lines (31 loc) · 1.38 KB
/
Copy pathHaversine.js
File metadata and controls
34 lines (31 loc) · 1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
* @function HaversineDistance
* @description Calculate the distance between two coordinates using the haversine formula
* @param {Integer} latitude1 - The input integer
* @param {Integer} latitude2 - The input integer
* @param {Integer} longitude1 - The input integer
* @param {Integer} longitude2 - The input integer
* @return {Integer} Haversine Distance.
* @see [Haversine_Distance](https://pt.wikipedia.org/wiki/F%C3%B3rmula_de_Haversine)
*/
consthaversineDistance=(latitude1=0,longitude1=0,latitude2=0,longitude2=0)=>{
validateLatOrLong(latitude1)
validateLatOrLong(latitude2)
validateLatOrLong(longitude1)
validateLatOrLong(longitude2)
constearthRadius=6371e3// 6,371km
constpi=Math.PI
constcos1=latitude1*pi/180.0
constcos2=latitude2*pi/180.0
constdeltaLatitude=(latitude2-latitude1)*pi/180.0
constdeltaLongitude=(longitude2-longitude1)*pi/180.0
constalpha=Math.sin(deltaLatitude/2)*Math.sin(deltaLatitude/2)+Math.cos(cos1)*Math.cos(cos2)*Math.sin(deltaLongitude/2)*Math.sin(deltaLongitude/2)
constconstant=2*Math.atan2(Math.sqrt(alpha),Math.sqrt(1-alpha))
returnearthRadius*constant
}
constvalidateLatOrLong=value=>{
if(typeofvalue!=='number'){
thrownewTypeError('The value of latitude or longitude should be a number')
}
}
export{haversineDistance}