feat : site
This commit is contained in:
@@ -57,4 +57,39 @@ class SystemUtil
|
||||
{
|
||||
return filter_var($realIp, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算距离
|
||||
* @param array $locationOneArr
|
||||
* @param array $locationTwoArr
|
||||
* @param int $unit
|
||||
* @return float|int
|
||||
*/
|
||||
static function calculateDistance(array $locationOneArr, array $locationTwoArr, int $unit = 1): float|int
|
||||
{
|
||||
// 地球平均半径,单位:公里
|
||||
$earthRadius = 6371;
|
||||
|
||||
// 提取经纬度
|
||||
$lat1 = deg2rad($locationOneArr['lat']);
|
||||
$lon1 = deg2rad($locationOneArr['lon']);
|
||||
$lat2 = deg2rad($locationTwoArr['lat']);
|
||||
$lon2 = deg2rad($locationTwoArr['lon']);
|
||||
|
||||
// 计算距离
|
||||
$dLat = $lat2 - $lat1;
|
||||
$dLon = $lon2 - $lon1;
|
||||
|
||||
$a = sin($dLat / 2) * sin($dLat / 2) + cos($lat1) * cos($lat2) * sin($dLon / 2) * sin($dLon / 2);
|
||||
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
|
||||
|
||||
// 根据单位转换距离
|
||||
$distance = $earthRadius * $c;
|
||||
return match ($unit) {
|
||||
1 => $distance, //公里
|
||||
2 => $distance * 1000, //英尺
|
||||
3 => $distance * 3280.84, //米
|
||||
default => 0,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user