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
44 lines (41 loc) · 1.42 KB
/
Copy pathHaversine.js
File metadata and controls
44 lines (41 loc) · 1.42 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
35
36
37
38
39
40
41
42
43
44
/**
* @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}