有没有人知道如何进行查询,让用户指定他们的纬度lng和半径,然后搜索可能有大量纬度lng+半径的位置,看看是否有重叠,然后允许按距离排序?
我们已经被要求允许公司在他们经营的郊区地图上放置标记,并能够绘制半径,但我在谷歌上找不到这样的查询。
我目前正在使用以下查询,
(SELECT ( 6371.01 * acos( cos( radians( $lat ) ) * cos( radians( location.lat ) )
cos( radians( location.lng ) - radians( $lng ) )
sin( radians( $lat ) ) * sin( radians( location.lat ) ) ) ) AS distance
FROM location
HAVING distance <= $radius
ORDER BY distance ASC) as distance
但显然这不允许这些位置有半径。
这个问题的第二部分,这个搜索查询已经是一个非常大的查询的一部分。。有没有关于优化这一点的建议?每次我在谷歌上搜索类似上述查询的示例时,总会有人警告这种查询有多么昂贵。目前,我唯一能想到的解决方案是拥有一个单独的搜索服务器。