/**
* 测试定位
* @param $lng floatval 我的经度
* @param $lat floatval 我的纬度
* @param $limit int 分页
* @return \think\response\Json
*/
public function test(){
$lng = 113.658245;
$lat = 34.716184;
$limit = Input('p',1);
$ad = Db::name('shop')->query("SELECT *,round(2 * 6378.137 * ASIN( SQRT(POW( SIN( PI( ) * ( ".$lng."- lng ) / 360 ), 2 ) + COS( PI( ) * ".$lat." / 180 ) * COS( lat * PI( ) / 180 ) * POW( SIN( PI( ) * ( ".$lat."- lat ) / 360 ), 2 ))),2) AS distance FROM `bsa_shop` GROUP BY id HAVING distance <=5 LIMIT ".$limit.",10;");
unset($lng);
unset($lat);
array_multisort(array_column($ad,'distance'),SORT_ASC,$ad);
print_R($ad);die();
}
/**
* 测试定位
* @param $lng floatval 我的经度
* @param $lat floatval 我的纬度
* @return \think\response\Json
*/
public function tests(){
$lng = 113.658245;
$lat = 34.716184;
$EARTH=6378.137; //地球半径
$PI=3.1415926535898; //PI值
$package_list=Db::name("shop")->field("*,round((2 * $EARTH* ASIN(SQRT(POW(SIN($PI*(".$lat."-lat)/360),2)+COS($PI*".$lat."/180)* COS(lat * $PI/180)*POW(SIN($PI*(".$lng."-lng)/360),2)))),2) as juli")->order('juli asc')->paginate(10);
foreach($package_list as $k=>$v){
if($v['juli'] <=5){
$package_list[$k] =$v;
}
}
unset($lng);
unset($lat);
print_R($package_list);die();
}
/**
* 测试定位
* @param $lng 我的经度
* $param $lat 我的纬度
* @return \think\response\Json
*/
public function dingwei(){
$lng = 113.658245;
$lat = 34.716184;
$shopLists = Db::name('shop')->field('*')->paginate(10);
foreach($shopLists as $k=>$v){
$distance = $this->getDistance($lng, $lat, $shopLists[$k]['lng'], $shopLists[$k]['lat'],2, 2);
$v['distance'] = round($distance,2);
$shopLists[$k] =$v;
}
$info = $shopLists->items();
array_multisort(array_column($info,'distance'),SORT_ASC,$info);
print_R($info);die();
}
/**
* 计算两点地理坐标之间的距离
* @param Decimal $longitude1 起点经度
* @param Decimal $latitude1 起点纬度
* @param Decimal $longitude2 终点经度
* @param Decimal $latitude2 终点纬度
* @param Int $unit 单位 1:米 2:公里
* @param Int $decimal 精度 保留小数位数
* @return Decimal
*/
public function getDistance($longitude1, $latitude1, $longitude2, $latitude2, $unit=2, $decimal=2){
$EARTH_RADIUS = 6378.137; // 地球半径系数
$PI = 3.1415926;
$radLat1 = $latitude1 * $PI / 180.0;
$radLat2 = $latitude2 * $PI / 180.0;
$radLng1 = $longitude1 * $PI / 180.0;
$radLng2 = $longitude2 * $PI /180.0;
$a = $radLat1 - $radLat2;
$b = $radLng1 - $radLng2;
$distance = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2)));
$distance = $distance * $EARTH_RADIUS * 1000;
if($unit==2){
$distance = $distance / 1000;
}
return round($distance, $decimal);
}