diff --git a/app/Http/Controllers/Mobile/OtherController.php b/app/Http/Controllers/Mobile/OtherController.php index 3ec2489..bf0303b 100755 --- a/app/Http/Controllers/Mobile/OtherController.php +++ b/app/Http/Controllers/Mobile/OtherController.php @@ -140,20 +140,20 @@ class OtherController extends CommonController $sortName = $all['sort_name'] ?? 'distance'; $sortType = $all['sort_type'] ?? 'asc'; - // 使用简单的距离计算公式 + // 使用简化的距离计算公式,避免精度问题 $distanceFormula = " - (6371 * acos( - cos(radians(?)) * - cos(radians(CAST(company_latitude AS DECIMAL(10,8)))) * - cos(radians(CAST(company_longitude AS DECIMAL(10,8))) - radians(?)) + - sin(radians(?)) * - sin(radians(CAST(company_latitude AS DECIMAL(10,8)))) + (6371 * 2 * asin( + sqrt( + pow(sin(radians((CAST(company_latitude AS DECIMAL(10,8)) - ?) / 2)), 2) + + cos(radians(?)) * cos(radians(CAST(company_latitude AS DECIMAL(10,8)))) * + pow(sin(radians((CAST(company_longitude AS DECIMAL(10,8)) - ?) / 2)), 2) + ) )) AS distance "; // 先构建基础查询 $query = Company::select('*') - ->selectRaw($distanceFormula, [$latitude, $longitude, $latitude]) + ->selectRaw($distanceFormula, [$latitude, $latitude, $longitude]) ->where(function ($query) use ($all) { if (isset($all['company_name'])) { $query->where('company_name', 'like', '%' . $all['company_name'] . '%'); @@ -213,7 +213,7 @@ class OtherController extends CommonController 'expected_distance' => 13.22, 'actual_distance' => $result->first() ? $result->first()->distance : 'N/A', 'formula' => $distanceFormula, - 'parameters' => [$latitude, $longitude, $latitude] + 'parameters' => [$latitude, $latitude, $longitude] ]); return $this->success($result);