package Ġcom . k em ana . backend Ċ Ċ import Ġcom . k em ana . backend . model . Position Ċ Ċ fun Ġdistance ( lat 1 : ĠDouble , Ġlat 2 : ĠDouble , Ġlon 1 : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġlon 2 : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġval ĠR Ġ= Ġ 6 3 7 1 Ġ// ĠRadius Ġof Ġthe Ġearth ĊĊĠĠĠ Ġval Ġlat Distance Ġ= ĠMath . to Radians ( lat 2 Ġ- Ġlat 1 ) ĊĠĠĠ Ġval Ġlon Distance Ġ= ĠMath . to Radians ( lon 2 Ġ- Ġlon 1 ) ĊĠĠĠ Ġval Ġa Ġ= ĠMath . sin ( lat Distance Ġ/ Ġ 2 ) Ġ* ĠMath . sin ( lat Distance Ġ/ Ġ 2 ) Ġ+ Ġ( Math . cos ( Math . to Radians ( lat 1 )) Ġ* ĠMath . cos ( Math . to Radians ( lat 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠMath . sin ( lon Distance Ġ/ Ġ 2 ) Ġ* ĠMath . sin ( lon Distance Ġ/ Ġ 2 )) ĊĠĠĠ Ġval Ġc Ġ= Ġ 2 Ġ* ĠMath . atan 2 ( Math . sqrt ( a ), ĠMath . sqrt ( 1 Ġ- Ġa )) ĊĠĠĠ Ġvar Ġdistance Ġ= ĠR . toDouble () Ġ* Ġc Ġ* Ġ 1 0 0 0 . 0 Ġ// Ġconvert Ġto Ġmeters ĊĊĠĠĠ Ġdistance Ġ= ĠMath . pow ( distance , Ġ 2 . 0 ) Ġ+ ĠMath . pow ( 0 . 0 , Ġ 2 . 0 ) ĊĊĠĠĠ Ġreturn ĠMath . sqrt ( distance ) Ċ } Ċ Ċ fun ĠPosition . distance To ( position : ĠPosition ): ĠDouble Ġ{ ĊĠĠĠ Ġval Ġlat 1 Ġ= Ġlat !! ĊĠĠĠ Ġval Ġlon 1 Ġ= Ġlon !! ĊĠĠĠ Ġval Ġlat 2 Ġ= Ġposition . lat !! ĊĠĠĠ Ġval Ġlon 2 Ġ= Ġposition . lon !! ĊĊĠĠĠ Ġval ĠR Ġ= Ġ 6 3 7 1 ĊĊĠĠĠ Ġval Ġlat Distance Ġ= ĠMath . to Radians ( lat 2 Ġ- Ġlat 1 ) ĊĠĠĠ Ġval Ġlon Distance Ġ= ĠMath . to Radians ( lon 2 Ġ- Ġlon 1 ) ĊĠĠĠ Ġval Ġa Ġ= ĠMath . sin ( lat Distance Ġ/ Ġ 2 ) Ġ* ĠMath . sin ( lat Distance Ġ/ Ġ 2 ) Ġ+ Ġ( Math . cos ( Math . to Radians ( lat 1 )) Ġ* ĠMath . cos ( Math . to Radians ( lat 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠMath . sin ( lon Distance Ġ/ Ġ 2 ) Ġ* ĠMath . sin ( lon Distance Ġ/ Ġ 2 )) ĊĠĠĠ Ġval Ġc Ġ= Ġ 2 Ġ* ĠMath . atan 2 ( Math . sqrt ( a ), ĠMath . sqrt ( 1 Ġ- Ġa )) ĊĠĠĠ Ġvar Ġdistance Ġ= ĠR . toDouble () Ġ* Ġc Ġ* Ġ 1 0 0 0 . 0 Ġ// Ġconvert Ġto Ġmeters ĊĊĠĠĠ Ġdistance Ġ= ĠMath . pow ( distance , Ġ 2 . 0 ) Ġ+ ĠMath . pow ( 0 . 0 , Ġ 2 . 0 ) ĊĊĠĠĠ Ġreturn ĠMath . sqrt ( distance ) Ċ Ċ }