使用空间数据的最新位置数据laravel mysql

时间:2019-03-14 10:28:18

标签: mysql laravel eloquent spatial

我已阅读与此问题相关的所有questions,但找不到解决方案。

我已将坐标保存为mysql列类型 point ,在laravel模型中我已这样保存

use Spatial;
protected $spatial = ['location'];

要获取坐标,我可以这样做

$model->getCoordinates();

但是我想选择距离为10km的所有记录,如何为它创建laravel雄辩的查询?

注意:我的表格中没有单独的经纬度列,因此该查询无法正常工作

$results = DB::select(DB::raw('SELECT id, ( 3959 * acos( cos( radians(' . $lat . ') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(' . $lng . ') ) + sin( radians(' . $lat .') ) * sin( radians(lat) ) ) ) AS distance FROM articles HAVING distance < ' . $distance . ' ORDER BY distance') );

已更新:我已使用laravel Voyager保存地图位置,这里是link

2 个答案:

答案 0 :(得分:0)

尝试这样

$lon = 96.14344130;$lat = 16.86677920;$distance=10;

    MyNode::whereRaw(DB::raw( "(3959 * acos( cos( radians($lat) ) 
                     * cos( radians( ST_Y(geom) ) )  
                     * cos( radians( ST_X(geom) ) - radians($lon) ) 
                     + sin( radians($lat) ) 
                     * sin( radians( ST_Y(geom) ) ) ) ) < $distance "))
                     ->take(10)->get();

答案 1 :(得分:0)

$model->getCoordinates()返回坐标数组。您可以转储该文件并检查阵列数据。我认为这种导出方式有效。

list($lat, $lng) = $model->getCoordinates();

因此您可以拥有 $ lat,$ lng 变量。