MySQL根据距离过滤数据并计算该距离



我有一个用例,用户将他的位置(纬度和经度(传递到后端,我必须获取该位置并找到所有Miles radius地区的餐厅是他的位置,同时我必须给出从他的位置到每个餐厅的距离好

我的餐桌。

res_name    |   lat         |   lng
--------------------------------------------------------------
McDonalds'  |   6.8705452   |   79.884038
KFC     |   6.8705452   |   79.884038
Burger king |   6.8686279   |   79.8873961
--------------------------------------------------------------

查找与用户提供坐标的英里半径匹配的记录我可以使用这个查询

SELECT
id, (
3959 * acos (
cos ( radians(78.3232) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(65.3234) )
+ sin ( radians(78.3232) )
* sin( radians( lat ) )
)
) AS distance
FROM markers
HAVING distance < 30
ORDER BY distance
LIMIT 0 , 20;

这也是我从stackoverflow问题中得到的,它很有效。现在我的问题是,如何获得每个匹配结果的用户位置到餐厅位置之间的距离?

我希望你能明白我的要求。

用户将通过其当前位置。根据这个位置,我需要筛选半径30英里范围内的餐厅。同时,我不得不说餐厅离他现在的位置还有多远。

我的预期输出将是这样的。你们在30英里的范围内有两家餐馆。对于肯德基,你有12英里的路程。对于麦当劳,你有29英里的路程

如何修改该查询以满足我的要求?

用于查找距离部分

SELECT test2.restaurants.res_name, 
111.111 *
DEGREES(ACOS(COS(RADIANS(6.9117))
* COS(RADIANS(test2.restaurants.lat))
* COS(RADIANS(79.8646 - test2.restaurants.lng))
+ SIN(RADIANS(6.9117))
* SIN(RADIANS(test2.restaurants.lat)))) AS distance_in_km
FROM test2.restaurants;

最新更新