问题描述
|
我有一张带邮政编码(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。
这里有一个非常完整的讨论:
计算地理邻近度的公式