PHP MYSQL 搜索周边坐标,并计算两个点之间的距离
时间:2021-07-01 10:21:17
帮助过:2人阅读
*
* 获取周围坐标
* Enter description here ...
* @param unknown_type $lng 固定坐标经度
* @param unknown_type $lat 固定坐标纬度
* @param unknown_type $distance 搜索周边距离,单位KM
* @return multitype:multitype:number
*/
function returnSquarePoint(
$lng,
$lat,
$distance = 1
){
$earthRadius = 6378.138;
//地球半径,单位KM
$dlng = 2 *
asin(
sin(
$distance / (2 *
$earthRadius)) /
cos(
deg2rad(
$lat)));
$dlng =
rad2deg(
$dlng);
$dlat =
$distance/
$earthRadius;
$dlat =
rad2deg(
$dlat);
return array(
‘left-top‘=>
array(‘lat‘=>
$lat +
$dlat,‘lng‘=>
$lng-
$dlng),
‘right-top‘=>
array(‘lat‘=>
$lat +
$dlat, ‘lng‘=>
$lng +
$dlng),
‘left-bottom‘=>
array(‘lat‘=>
$lat -
$dlat, ‘lng‘=>
$lng -
$dlng),
‘right-bottom‘=>
array(‘lat‘=>
$lat -
$dlat, ‘lng‘=>
$lng +
$dlng)
);
//使用此函数计算得到结果后,带入sql查询。
// $squares = returnSquarePoint($lng, $lat);
// $info_sql = "select id,locateinfo,lat,lng from `lbs_info` where lat<>0 and lat>{$squares[‘right-bottom‘][‘lat‘]} and lat<{$squares[‘left-top‘][‘lat‘]} and lng>{$squares[‘left-top‘][‘lng‘]} and lng<{$squares[‘right-bottom‘][‘lng‘]} ";
}
/**
* 计算两个坐标的直线距离
* Enter description here ...
* @param unknown_type $lat1
* @param unknown_type $lng1
* @param unknown_type $lat2
* @param unknown_type $lng2
*/
function getDistance(
$lat1,
$lng1,
$lat2,
$lng2){
$earthRadius = 6378.138;
//近似地球半径千米
// 转换为弧度
$lat1 = (
$lat1 *
pi()) / 180
;
$lng1 = (
$lng1 *
pi()) / 180
;
$lat2 = (
$lat2 *
pi()) / 180
;
$lng2 = (
$lng2 *
pi()) / 180
;
// 使用半正矢公式 用尺规来计算
$calcLongitude =
$lng2 -
$lng1;
$calcLatitude =
$lat2 -
$lat1;
$stepOne =
pow(
sin(
$calcLatitude / 2), 2) +
cos(
$lat1) *
cos(
$lat2) *
pow(
sin(
$calcLongitude / 2), 2
);
$stepTwo = 2 *
asin(
min(1,
sqrt(
$stepOne)));
$calculatedDistance =
$earthRadius *
$stepTwo;
return round(
$calculatedDistance);
}
PHP MYSQL 搜索周边坐标,并计算两个点之间的距离
标签: