小编Rob*_*e22的帖子

Laravel中两点之间的Haversine距离计算

我正在开发一个laravel应用程序,我需要找到所有在用户坐标的某个半径范围内的产品.产品与用户有一对多的关系,因此用户可以拥有多种产品.

我发现,半正式公式可以计算出两点之间的距离,但我似乎无法使它起作用.

我的控制器中有以下查询:

$latitude = 51.0258761;
$longitude = 4.4775362;
$radius = 20000;

$products = Product::with('user')
->selectRaw("*,
            ( 6371 * acos( cos( radians(" . $latitude . ") ) *
            cos( radians(user.latitude) ) *
            cos( radians(user.longitude) - radians(" . $longitude . ") ) + 
            sin( radians(" . $latitude . ") ) *
            sin( radians(user.latitude) ) ) ) 
            AS distance")
->having("distance", "<", $radius)
->orderBy("distance")
->get();
Run Code Online (Sandbox Code Playgroud)

我将半径设置为20000用于测试目的,看起来所有产品的距离都是5687,..问题似乎是产品的纬度和经度存储在User表中,但我不确定我如何在我的查询中访问这些.我已经尝试过user.latitude'user-> latitude',但似乎没有任何效果.

这是我的模特:

产品型号

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected …
Run Code Online (Sandbox Code Playgroud)

php mysql sql haversine laravel

7
推荐指数
2
解决办法
6264
查看次数

标签 统计

haversine ×1

laravel ×1

mysql ×1

php ×1

sql ×1