前段时间因项目需求,用到了关于坐标点计算的几个方法,就在这里整理下:
1. 计算两个坐标点之间的距离
2. 已知一个坐标点和最大距离,求另一坐标可能在的坐标区域
3. 判断一个坐标点是否在一个多边形内
计算两个坐标点之间的距离
/**
* 计算两个坐标之间的距离
* @param $lat1 坐标点1的纬度
* @param $lng1 坐标点1的经度
* @param $lat2 坐标点2的纬度
* @param $lng2 坐标点2的经度
* @return float
*/
function GetDistance($lat1, $lng1, $lat2, $lng2){
$PI = 3.1415926535898;
$EARTH_RADIUS = 6378.137;
$radLat1 = $lat1 * ($PI / 180);
$radLat2 = $lat2 * ($PI / 180);
$a = $radLat1 - $radLat2;
$b = ($lng1 * ($PI / 180)) - ($lng2 * ($PI / 180));
$s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)));
return round($s * $EARTH_RADIUS * 1000);
}
已知一个坐标点和最大距离,求另一坐标可能在的坐标区域
/**
* 已知一个坐标点和最大距离,求另一坐标的区域范围
* @param $lng 经度
* @param $lat 纬度
* @param int $distance 距离
* @return array
*/
function returnSquarePoint($lng,$lat,$distance = 1500){
$earthRadius = 6371000;
//deg2rad()将角度转换为相应的弧度
//rad2deg()将弧度数转换为相应的角度数
$dlng = 2 * asin(sin($distance / (2 * $earthRadius)) / cos(deg2rad($lat)));
<