0

我有一个用例,用户将他的位置(纬度和经度)传递到后端,我必须获取该位置并同时找到他所在位置的英里半径区域内的所有餐厅,我必须给出从他的位置到每家餐厅的距离也是如此。

我的餐桌。

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 英里的距离。

如何修改该查询以实现我的要求?

4

1 回答 1

0

用于查找距离部分

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;
于 2018-11-26T05:02:49.670 回答