我已阅读与此问题相关的所有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
答案 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 变量。