当前位置:  开发笔记 > 编程语言 > 正文

优化距离计算功能

如何解决《优化距离计算功能》经验,为你挑选了1个好方法。

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

代码如下所示:

double result = Math.Acos(Math.Sin(lat2rad) * Math.Sin(lat1rad) 
+ Math.Cos(lat2rad) * Math.Cos(lat1rad) * Math.Cos(lon2rad - lon1rad));

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

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

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

谢谢你的时间!;-)



1> vladr..:

如果你的目标是排名(比较)距离,那么近似(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查找表产生一定的排名(一个距离看起来比基于近似的另一个更大),并且差异的模数大于上面的阈值,那么近似值是有效.否则继续进行实际的三角计算.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有