我有一个用例,用户将他的位置(纬度和经度(传递到后端,我必须获取该位置并找到所有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;