PHP根据传入的经纬度,和距离范围,返回所有在距离范围内的经纬度的取值范围
/** * 根据传入的经纬度,和距离范围,返回所有在距离范围内的经纬度的取值范围 * @param float $lng 经度 * @param float $lat 纬度 * @param float $distance 距离(km) * @return array */ function getSquarePoint($lng, $lat, $distance) { $earthRadius = 6371; //地球半径,km $d_lng = 2 * asin(sin($distance / (2 * $earthRadius)) / cos(deg2rad($lat))); $d_lng = rad2deg($d_lng); $d_lat = $distance / $earthRadius; $d_lat = rad2deg($d_lat); return array( 'lng_start' => $lng - $d_lng,//经度开始 'lng_end' => $lng + $d_lng, //经度结束 'lat_start' => $lat - $d_lat,//纬度开始 'lat_end' => $lat + $d_lat,//纬度结束 ); }
/** * 计算两个已知经纬度之间的距离 * @param float $lng1 经度1 * @param float $lat1 纬度1 * @param float $lng2 经度2 * @param float $lat2 纬度2 * @return float 距离(单位米) */ function getPointDistance($lng1, $lat1, $lng2, $lat2) { $earthRadius = 6371; //地球平均半径,km //deg2rad()函数将角度转为弧度 $radLat1 = deg2rad($lat1); $radLat2 = deg2rad($lat2); $radLng1 = deg2rad($lng1); $radLng2 = deg2rad($lng2); $d_lat = $radLat1 - $radLat2; $d_lng = $radLng1 - $radLng2; $distance = 2 * asin(sqrt(pow(sin($d_lat / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($d_lng / 2), 2))) * $earthRadius * 1000; return intval($distance / 1000); }