繁体   English   中英

如何在laravel中搜索给定距离和给定纬度和经度的所有位置

[英]how to search all the location for given distance and given latitude and longitude in laravel

这是我的senario:我通过以下方式在mysql数据库中保存了商店详细信息。

shopName,纬度,经度,

现在,如果有人在经度和距离(如5公里)的位置给出了他的位置,我需要在距离他5公里范围内填写所有商店,

在这里用户是中心,半径是5公里,我需要找到该圈内的所有商店,我的应用程序是在laravel 5.1中开发的

我试图遵循这个代码 ,但它不起作用。

谁能帮我。

您可以在模型中添加以下代码

public function ScopeDistance($query,$from_latitude,$from_longitude,$distance)
{
  // This will calculate the distance in km
  // if you want in miles use 3959 instead of 6371
  $raw = \DB::raw('ROUND ( ( 6371 * acos( cos( radians('.$from_latitude.') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('.$from_longitude.') ) + sin( radians('.$from_latitude.') ) * sin( radians( latitude ) ) ) ) ) AS distance');
  return $query->select('*')->addSelect($raw)->orderBy( 'distance', 'ASC' )->groupBy('distance')->having('distance', '<=', $distance);
}

你可以用这样的东西

$ads = Ad::with(['user','photos'])->distance($from_latitude,$from_longitude,$distance)->get();

检查一下: 计算给定2点,纬度和经度的距离

对于问题的代码部分,我认为最快的是将计算分成两部分。

首先我们从坐标建立一个5x5km的正方形,然后在laravel中选择whereBetween子句之间的每个商店。

您使用链接中的公式计算精确距离。 基本上它的5 = <sqrt((纬度1纬度2)^ 2 +(经度1 - 经度2)^ 2)

只需“转换”(latitude1-latitude2)和(longitude1-longitude2)到公里:)

微调参数。我已经给出.50但你可以选择更小的值,以减少覆盖范围。

$latitude = \Input::get('latitude');
$longitude = \Input::get('longitude');

$upper_latitude = $latitude + (.50); //Change .50 to small values
$lower_latitude = $latitude - (.50); //Change .50 to small values
$upper_longitude = $longitude + (.50); //Change .50 to small values
$lower_longitude = $longitude - (.50); //Change .50 to small values

$result = \DB::table('table')
        ->whereBetween('geo_locations.latitude', [$lower_latitude, $upper_latitude])
        ->whereBetween('geo_locations.logitude', [$lower_longitude, $upper_longitude])
        ->get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM