/** * Calculate distance between two coord sets * @author zbrown * * @param ApiRequestObject $apiRequest * @return array */ public function calculateDistance(ApiRequestObject $apiRequest) { $primaryLatitude = $apiRequest->getLatitude(); $primaryLongitude = $apiRequest->getLongitude(); $secondaryLatitude = $apiRequest->getSecondaryLatitude(); $secondaryLongitude = $apiRequest->getSecondaryLongitude(); $metricUnit = $apiRequest->getMetricUnit(); $roundMath = $apiRequest->getRoundMath(); $payload = array(); $theta = $primaryLongitude - $secondaryLongitude; $dist = sin(deg2rad($primaryLatitude)) * sin(deg2rad($secondaryLatitude)) + cos(deg2rad($primaryLatitude)) * cos(deg2rad($secondaryLatitude)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtolower($metricUnit); if ($unit == 'k') { $distance = $miles * 1.609344; $payload['unitName'] = 'kilometers'; } else { if ($unit == 'n') { $distance = $miles * 0.8683999999999999; $payload['unitName'] = 'nautical miles'; } else { $distance = $miles; $payload['unitName'] = 'miles'; } } if (!empty($roundMath)) { $final = round($distance, $roundMath); } else { $final = $distance; } $payload = ['distance' => $final, 'metric' => strtoupper($apiRequest->getMetricUnit())]; return $payload; }