dbr*_*dbr 3 mysql distance spatial laravel
谁能帮我正确回答这个问题。
我有一个Concert模型和另一个Location模型。演唱会属于一个地点。位置表有一个空间点字段。
我需要做三件事:
到目前为止,我已成功设置数据库并获取距用户一定距离的音乐会,如下所示:
$condition = ($lat != null && $lon != null && $distance != null);
Concert::when($condition, function ($query) use ($distance,$lat,$lon) {
return $query->whereHas('location', function($query) use ($distance,$lat,$lon) {
$query->whereRaw('st_distance(location,POINT('.$lat.','.$lon.')) < '.$distance);
});
})
->get();
Run Code Online (Sandbox Code Playgroud)
你能帮我如何st_distance在视图中显示它吗?
我如何按距离排序?
正如我在以度为单位的$distance文档中读到的那样,获取英里/公里的正确方法是什么?st_distance
小智 6
您可以选择ST_DISTANCE或ST_DISTANCE_SPHERE( MySQL Spatial Convenience Functions ),然后:
ORDER BYsql 子句对结果进行排序HAVING使用sql子句添加距离约束(为什么这里不能使用WHERE子句)$raw = 'SELECT
ST_X(location) AS longitude,
ST_Y(location) AS latitude,
ST_DISTANCE_SPHERE(location, POINT(?, ?)) AS dist
FROM
concerts,
locations
WHERE
concerts.id = locations.id
HAVING
dist < ?
ORDER BY
dist';
$pointsWithDist = DB::select($raw, [$lon, $lat, $distance]);
Run Code Online (Sandbox Code Playgroud)
笔记:
POINT空间函数的第一个参数,将纬度存储为第二个参数ST_DISTANCE都会返回以米ST_DISTANCE_SPHERE为单位的距离您可以使用谷歌地图来显示数据