以最佳性能计算给定的短距离(最大10 km)之间的两个纬度点之间的距离

时间:2019-01-14 07:53:09

标签: mysql latitude-longitude

给出两个经纬度的点,我知道它们之间的距离最大为10KM,我是否必须使用Haversine公式计算点之间的距离,还是有一种更简单的方法(假设地球是平坦的)我得到几乎相同的结果,但性能更好?

1 个答案:

答案 0 :(得分:0)

您是否只是“计算”一些项目的距离?还是您“在10公里范围内进行搜索?有很大的不同。

后者实际上是一个算法问题,如何将2D问题变成1D索引机制。

计划A:无相关索引-必须检查所有行。

方案B:INDEX(lat), INDEX(lng),并使用“边界框”:WHERE lat BETWEEN... AND lng BETWEEN...-优化器将选择一个或另一个索引。

计划C:如果您有数百万行,请这样说。有一种更快(但更多complex)的方式。

我没有回答您的问题,因为它是算法中最不重要的部分。但我现在会回答。

Haversine花费的时间大约是平地加上毕达哥拉斯的时间的两倍。 但这只是为了计算;

对于如此短的距离,不必具有Haversine。我认为,越过日期线或极点,它甚至可以“正确”运行。我怀疑平地在这些极端情况下会遇到麻烦。

对于平地,请确保将经度差除以COS(RADIANS(deg))。 (经度1度在赫尔辛基(纬度60度)是赤道的一半。)