1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

帖子
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 65413|回复: 33

[讨论] 求根据经纬度精确计算距离的公式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-12-27 10:39 | 显示全部楼层 |阅读模式
在网上找了一下,基本都那么一个公式,
地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为 6356.755千米,平均半径6371.004千米。如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R。如果以0度经线为基 准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算值)。设第一点A的经 纬度为(LonA, LatA),第二点B的经纬度为(LonB, LatB),按照0度经线的基准,东经取经度的正值(Longitude),西经取经度负值(-Longitude),北纬取90-纬度值(90- Latitude),南纬取90+纬度值(90+Latitude),则经过上述处理过后的两点被计为(MLonA, MLatA)和(MLonB, MLatB)。那么根据三角推导,可以得到计算两点距离的如下公式:

C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)

Distance = R*Arccos(C)*Pi/180

这里,R和Distance单位是相同,如果是采用6371.004千米作为半径,那么Distance就是千米为单位,如果要使用其他单位,比如mile,还需要做单位换算,1千米=0.621371192mile


根据上面的公式计算的结果与google earth、mapinfo的结果有差距,如下:


经度                  纬度             计算距离         mapinfo距离        google earth距离
109.99309        39.81625                       
109.99456        39.81595               0.143603392             0.13             0.13
109.99323        39.8144               0.206140802             0.2064        0.21
109.99456        39.81485               0.209179973             0.1999        0.2
                               
                               
109.99693        39.819                       
110.00117        39.81976                0.410852166             0.3728        0.37

可以看出google earth 与mapinfo计算的距离是一致的,求精确计算的算法,谢谢。

TA的精华主题

TA的得分主题

发表于 2010-12-27 10:52 | 显示全部楼层
原帖由 yinghaoromeo 于 2010-12-27 10:39 发表
在网上找了一下,基本都那么一个公式,
地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为 6356.755千米,平均半径6371.004千米。如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半 ...

占位学习!

TA的精华主题

TA的得分主题

发表于 2010-12-27 19:10 | 显示全部楼层
原因很简单,你的公式是错误的,正确的公式是
C = sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2-lon1)
以上全部是弧度单位

还是外国网页比较靠得住
http://www.movable-type.co.uk/scripts/latlong.html

[ 本帖最后由 灰袍法师 于 2010-12-27 19:52 编辑 ]

根据经纬度计算两点的地表距离.rar

4.09 KB, 下载次数: 2691

TA的精华主题

TA的得分主题

发表于 2011-1-12 19:03 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-16 15:30 | 显示全部楼层
十分感谢,该公式的计算结果与mapinfo,google earth完全相同!


原帖由 灰袍法师 于 2010-12-27 19:10 发表
原因很简单,你的公式是错误的,正确的公式是
C = sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2-lon1)
以上全部是弧度单位

还是外国网页比较靠得住
http://www.movable-type.co.uk/scripts/latl ...

TA的精华主题

TA的得分主题

发表于 2011-3-19 20:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢灰袍法师和楼主,要的就是这个!

TA的精华主题

TA的得分主题

发表于 2012-1-20 15:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
能批量计算距离吗?

TA的精华主题

TA的得分主题

发表于 2012-1-20 16:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
很明显,批量没问题。

TA的精华主题

TA的得分主题

发表于 2012-9-6 19:09 | 显示全部楼层
找了半天,只有这个是最最精确的,试验了一下,30公里的距离,实际误差20米左右,很厉害啦。我手头还有几个版本,误差都比这个大。
顺带一提,这个问题,有很多种计算原理和计算方法。
但是,能否同时提供下,两点间的相对角度呢?
相对角度的意思就是,从A点到B点,相对于正北方向(设为0度),角度为多少?就像谷歌地图里的标尺功能一样。

TA的精华主题

TA的得分主题

发表于 2012-9-6 20:00 | 显示全部楼层
本帖最后由 灰袍法师 于 2012-9-6 20:04 编辑

楼上说的是不是这个网页的 bearing 计算
http://www.movable-type.co.uk/scripts/latlong.html

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

1234

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-2-28 04:19 , Processed in 0.024691 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表