dlh_test_server/app/api/logic/LocalStoreLogic.php

58 lines
2.0 KiB
PHP
Raw Normal View History

<?php
namespace app\api\logic;
use app\common\basics\Logic;
use app\common\model\LocalStore;
use think\facade\Db;
class LocalStoreLogic extends Logic
{
public function getLocalList($data){
$model = new LocalStore;
$distance = "";
$s = "address like '%".$data['search']."%'";
$count = $model->where('is_delete',0)
->where($s)
->count();
// $lists = $model->where('is_delete',0)
// ->where($s)
// ->page($data['page'], $data['size'])
// ->order('lstore_id desc')
// ->select();
$page = ($data['page']-1)*$data['size'];
$sql = "SELECT *, ST_Distance_Sphere(POINT(".$data['longitude'].",".$data['latitude']."),POINT(longitude, latitude)) AS distance
FROM ls_local_store where is_delete = 0 $s
ORDER BY distance limit '".$page."','".$data['size']."'";
$lists = Db::query($sql);
foreach($lists as $key=>$value){
$lists[$key]['distance'] = $this->distance($data['latitude'], $data['longitude'], $value['latitude'], $value['longitude']);
}
$data = [
'list' => $lists,
'page' => $data['page'],
'size' => $data['size'],
'count' => $count,
'more' => is_more($count, $data['page'], $data['size'])
];
return $data;
}
function distance($lat1, $lon1, $lat2, $lon2) {
$earthRadius = 6371000; // 地球平均半径,单位为米
// 将经纬度转换为弧度
$lat1 = deg2rad($lat1);
$lon1 = deg2rad($lon1);
$lat2 = deg2rad($lat2);
$lon2 = deg2rad($lon2);
// 使用haversine公式计算距离
$diffLat = $lat2-$lat1;
$diffLon = $lon2-$lon1;
$a = sin($diffLat / 2) * sin($diffLat / 2) + cos($lat1) * cos($lat2) * sin($diffLon / 2) * sin($diffLon / 2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
$distance = $earthRadius * $c;
return $distance;
}
}