diff --git a/app/Http/Controllers/Mobile/OtherController.php b/app/Http/Controllers/Mobile/OtherController.php index 8588c41..3643d45 100755 --- a/app/Http/Controllers/Mobile/OtherController.php +++ b/app/Http/Controllers/Mobile/OtherController.php @@ -140,19 +140,19 @@ class OtherController extends CommonController $sortName = $all['sort_name'] ?? 'distance'; $sortType = $all['sort_type'] ?? 'asc'; - // 使用更稳定的距离计算公式,避免 acos 的精度问题 + // 使用标准的 Haversine 公式计算距离 $distanceFormula = " - (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) - ) + (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)))) )) AS distance "; $query = Company::with('users')->select('*') - ->selectRaw($distanceFormula, [$latitude, $latitude, $longitude]) + ->selectRaw($distanceFormula, [$latitude, $longitude, $latitude]) ->where(function ($query) use ($all) { if (isset($all['company_name'])) { $query->where('company_name', 'like', '%' . $all['company_name'] . '%');