优化距离计算功能

pul*_*200 8 c# geolocation

在我的代码中,我必须在lat/long值对之间进行大量的距离计算.

代码如下所示:

double result = Math.Acos(Math.Sin(lat2rad) * Math.Sin(lat1rad) 
+ Math.Cos(lat2rad) * Math.Cos(lat1rad) * Math.Cos(lon2rad - lon1rad));
Run Code Online (Sandbox Code Playgroud)

(lat2rad例如纬度转换为弧度).

我已将此功能确定为我的应用程序的性能瓶颈.有没有办法改善这个?

(因为坐标不同,我不能使用查找表).我也看过这个问题,建议像网格一样的查找方案,这可能是一种可能性.

谢谢你的时间!;-)

vla*_*adr 5

如果你的目标是排名(比较)距离,那么近似(sincos表查找)可以大大减少你需要的计算量(实现快速拒绝).

如果近似距离(待排名或比较)之间的差异低于某个阈值,您的目标是仅进行实际的三角计算.

例如,使用具有1000个样本的查找表(即sin,cos每个采样2*pi/1000),查找不确定性最多为0.006284.使用参数的不确定性计算ACos,累积不确定度,也是阈值不确定性,最多为0.018731.

因此,如果为两个坐标集对(距离)评估Math.Sin(lat2rad) * Math.Sin(lat1rad) + Math.Cos(lat2rad) * Math.Cos(lat1rad) * Math.Cos(lon2rad - lon1rad)使用sincos查找表产生一定的排名(一个距离看起来比基于近似的另一个更大),并且差异的模数大于上面的阈值,那么近似值是有效.否则继续进行实际的三角计算.