diff --git a/app/Service/v3/Implementations/LocationService.php b/app/Service/v3/Implementations/LocationService.php index c828cf6..9cfd504 100644 --- a/app/Service/v3/Implementations/LocationService.php +++ b/app/Service/v3/Implementations/LocationService.php @@ -26,6 +26,37 @@ class LocationService implements LocationServiceInterface public function getMarketListByLocation($cityIds) { $res = Area::query()->with('markets')->whereIn('id',$cityIds)->get(); + foreach ($res as &$v){ + foreach ($v->markets as &$m) + { + $m->Distance = $this->getDistance($m->lng,$m->lat,108.370333,22.813527); + } + } return $res; } + + function getDistance($lng1, $lat1, $lng2, $lat2, $unit = 2, $decimal = 2) + { + + $EARTH_RADIUS = 6370.996; // 地球半径系数 + $PI = 3.1415926535898; + + $radLat1 = $lat1 * $PI / 180.0; + $radLat2 = $lat2 * $PI / 180.0; + + $radLng1 = $lng1 * $PI / 180.0; + $radLng2 = $lng2 * $PI / 180.0; + + $a = $radLat1 - $radLat2; + $b = $radLng1 - $radLng2; + + $distance = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))); + $distance = $distance * $EARTH_RADIUS * 1000; + + if ($unit === 2) { + $distance /= 1000; + } + + return round($distance, $decimal); + } } \ No newline at end of file