You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<?php
namespace App\Service\v3\Implementations;use App\Service\v3\Interfaces\LocationServiceInterface;use App\Model\v3\Area;use App\Model\v3\Market;class LocationService implements LocationServiceInterface{
public function do() { // TODO: Implement do() method.
}
public function check() { // TODO: Implement check() method.
}
public function undo() { // TODO: Implement undo() method.
}
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; }
public function searchMarket($keywords,$cityId = 2163) { $res = Market::query()->where([ ['name','like','%'.$keywords.'%'], ['city_id','=',$cityId] ]) ->get(); foreach ($res as &$v){ $v->Distance = $this->getDistance($v->lng,$v->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); }
//获取服务站信息
function getMarketsInfo() { return Market::where('status',1)->get(); }}
|