有谁知道如何进行查询,允许用户指定他们的 lat / lng 和半径,然后搜索可能是非常大量的位置,这些位置也有 lat 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
但显然这不允许位置有半径。
这个问题的第二部分,这个搜索查询已经是一个非常大的查询的一部分。有没有关于优化这个的建议?每次我在谷歌上搜索上述查询的示例时,总会有人警告说这个查询有多昂贵。目前我能想到的唯一解决方案是拥有一个单独的搜索服务器。