###数据库的一种写法
$lat="24.88718";
$lng="118.60347";
$fujin=\think\Db::name("zhiyuan")
->field("warehouseName,lat,lng,
( 3959 * acos (cos ( radians({$lat}) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians({$lng}) ) + sin ( radians({$lat}) ) * sin( radians( lat ) ) )
) AS distance")
->order("distance asc")
->select();
###函数写法
/**单位为米
* @param $lat1
* @param $lon1
* @param $lat2
* @param $lon2
* @param float $radius 星球半径 公里
* @return float
*/
function distance($lat1, $lon1, $lat2,$lon2,$radius = 6378.137)
{
$rad = floatval(M_PI / 180.0);
$lat1 = floatval($lat1) * $rad;
$lon1 = floatval($lon1) * $rad;
$lat2 = floatval($lat2) * $rad;
$lon2 = floatval($lon2) * $rad;
$theta = $lon2 - $lon1;
$dist = acos(sin($lat1) * sin($lat2) +
cos($lat1) * cos($lat2) * cos($theta)
);
if ($dist < 0 ) {
$dist += M_PI;
}
$dist = $dist * $radius;
return round($dist,2);
}