Просмотр исходного кода

统一坐标距离单位: 米

liugc 1 год назад
Родитель
Сommit
509df66a08

+ 1 - 1
app/adminapi/lists/master_worker/MasterWorkerLists.php

@@ -96,7 +96,7 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
         $queryWhere = $this->queryWhere();
         // 派单搜索条件 - 订单坐标距离排序
         if($this->lat && $this->lon){
-            $fields[] = Db::raw('ROUND(6371 * ACOS(COS(RADIANS('.$this->lat.')) * COS(RADIANS(mw.lat)) * COS(RADIANS(mw.lon) - RADIANS('.$this->lon.')) + SIN(RADIANS('.$this->lat.')) * SIN(RADIANS(mw.lat))), 2) AS user_distance');
+            $fields[] = Db::raw('ROUND(6371* 1000 * ACOS(COS(RADIANS('.$this->lat.')) * COS(RADIANS(mw.lat)) * COS(RADIANS(mw.lon) - RADIANS('.$this->lon.')) + SIN(RADIANS('.$this->lat.')) * SIN(RADIANS(mw.lat))), 2) AS user_distance');
             $orders = 'user_distance';
         }
         return MasterWorker::alias('mw')

+ 2 - 2
app/adminapi/service/DistributeLeafletsService.php

@@ -84,7 +84,7 @@ class DistributeLeafletsService
         $nearbyMasters = [];
         foreach ($masters as $master) {
             $distance = self::haversineDistance($customer_lat, $customer_lon, $master['lat'], $master['lon']);
-            if ($radius>0) { // 距离小于或等于10公里
+            if ($radius>0) {
                 ($distance <= $radius) && $nearbyMasters[$master['id']] = $distance;
             }else{
                 $nearbyMasters[$master['id']] = $distance;
@@ -103,7 +103,7 @@ class DistributeLeafletsService
         $dlat = $lat2 - $lat1;
         $a = sin($dlat / 2)**2 + cos($lat1) * cos($lat2) * sin($dlon / 2)**2;
         $c = 2 * asin(sqrt($a));
-        $r = 6371; // 地球平均半径,单位为公里
+        $r = 6371*1000; // 地球平均半径,单位为公里/米
         $distance = $c * $r;
 
         return $distance;