29 lines
		
	
	
		
			913 B
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			29 lines
		
	
	
		
			913 B
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
<?php
 | 
						||
 | 
						||
namespace app\service;
 | 
						||
 | 
						||
class Location
 | 
						||
{
 | 
						||
    const EARTH_RADIUS = 6378.137;//地球半径 公里
 | 
						||
 | 
						||
    /**
 | 
						||
     * 计算两组经纬度坐标 之间的距离
 | 
						||
     * params :lat1 纬度1; lng1 经度1; lat2 纬度2; lng2 经度2; len_type (1:m or 2:km);
 | 
						||
     * return m or km
 | 
						||
     */
 | 
						||
    public static function getDistance($lat1, $lng1, $lat2, $lng2, $len_type = 1, $decimal = 2): float
 | 
						||
    {
 | 
						||
        $pi = pi();
 | 
						||
        $radLat1 = $lat1 * $pi / 180.0;
 | 
						||
        $radLat2 = $lat2 * $pi / 180.0;
 | 
						||
        $a       = $radLat1 - $radLat2;
 | 
						||
        $b       = ($lng1 * $pi / 180.0) - ($lng2 * $pi / 180.0);
 | 
						||
        $s       = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2)));
 | 
						||
        $s       = $s * self::EARTH_RADIUS;
 | 
						||
        $s       = round($s * 1000);
 | 
						||
        if ($len_type > 1) {
 | 
						||
            $s /= 1000;
 | 
						||
        }
 | 
						||
        return round($s, $decimal);
 | 
						||
    }
 | 
						||
} |