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