MySQL纬度/经度半径搜索

问题描述

| 我有一张带邮政编码(int)和位置(point)的表。我正在寻找MySQL查询函数。这是日期的示例。我想返回100英里。
37922|POINT(35.85802 -84.11938)
一个简单的查询可以实现这一目标吗? 好吧,我有这个
select x(Location),Y(Location) FROM zipcodes
这将给我两点,但是我如何找出x / y距离之内的内容呢?     

解决方法

        用于执行此操作的查询不是很困难,但是很慢。您可能要使用Haversine公式。 http://en.wikipedia.org/wiki/Haversine_formula 将其转换为SQL并不是很困难,但是随着数据集的增加,计算表中每个记录的距离会变得很昂贵。 通过使用geohash函数限制候选记录的位置,可以大大减少工作量。如果准确性很重要,则可以将Haversine公式应用于geohash区域内的记录。 如果mysql人员从未完成过他们的GIS和Spatial扩展,请考虑使用ElasticSearch或MongoDB。 这里有一个非常完整的讨论: 计算地理邻近度的公式