master
cody 3 months ago
parent edfb49025e
commit 374d96ab84

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

Loading…
Cancel
Save