栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

计算两点之间地理距离的更快方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

计算两点之间地理距离的更快方法

如果您不介意忽略地球的微小扁圆度(无论如何,您发布的Haversine代码也可以做到这一点),请考虑将每个球形(纬度/经度)坐标首先预先转换为3D
单位长度的 笛卡尔坐标,具体如下:

http://en.wikipedia.org/wiki/Spherical_coordinate_system

然后直角坐标系之间的球面距离

p1
,并
p2
很简单:

r * acos(p1 . p2)

由于

p1
并且
p2
将具有单位长度,因此每对减少为四个乘法,两个加法和一个反向触发操作。

还要注意,点积的计算是优化的理想选择,例如通过GPU,MMX扩展,向量库等。

此外,如果您打算按距离对对 排序
,可能会忽略更远的对,则可以

r*acos()
通过仅对点乘积值进行排序来推迟等式的昂贵部分,因为对于所有有效输入(即范围
[-1,1]
),都可以保证那:

acos(x) < acos(y) if x > y

然后,您只需选择

acos()
您真正感兴趣的值即可。

关于:使用的潜在错误,

acos()
仅在使用单精度
float
变量时,这些错误才真正重要。使用
double
包含16个有效数字的数字,您可以将距离准确地控制在1米以内。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507304.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号