摘要:获取地球两点的距离最近在做小程序的时候遇到要计算两点之间的距离但小程序没有相关的方法只好自己来了背景知识地球的半径地球虽然是个椭圆但也极像个正圆相差大概公里所以就按正圆来算了半径是公里弧长公式弧度圆心角度数余弦定律模型思路假设求两点的距
获取地球两点的距离
最近在做小程序的时候遇到要计算两点之间的距离,但小程序没有相关的方法,只好自己来了.
背景知识 地球的半径地球虽然是个椭圆,但也极像个正圆(相差大概20公里),所以就按正圆来算了,半径是6371.393公里.
弧长公式L = 弧度 * R = 圆心角度数 × π × R / 180
余弦定律2abcosC=a^2+b^2-c^2
c^2 = a^2+b^2-2abcosC
假设求A,B两点的距离,半径已经知道了,
现在只需求∠AOB弧度.
但∠AOB弧度可以通过AB的长度获得
运算过程根据上面的图算
假设A坐标(JA,WA),B坐标(JB,WB).
即∠AOC = WA, ∠BOD = WB.
根据三角形函数
AC = sin(WA) R, BD = sin(WB) R
所以 BE = BD - AC
因为∠COD = (JB - JA), 根据余弦定律
CO = cos(WA) R, DO = cos(WB) R
所以 AE = CD = 根号[CO^2 + DO^2 - 2 CO DO * cos(∠COD)]
根据勾股定律
AB^2 = AE^2 + BE^2
因为∆AOB是等腰三角形,三线合一,GO为垂直平分线
AB^2 = 2R^2 - 2R^2 * cosC;
cosC = [2R^2 - AB^2] / 2R^2;
简化的
∠AOB弧度 = acos[sin(WA)sin(WB) + cos(WA)cos(WB)cos(JB-JA)]
L = ∠AOB弧度 * R
代码function _Radian(num) { return num * Math.PI / 180; } function CalculateDistance(lata, lnga, latb, lngb) { var earthR = 6371.393; var WA, WB; WA = _Radian(lata); WB = _Radian(latb); var lngMinus = Math.abs(lngb - lnga) > 180? 360 - Math.abs(lngb - lnga): Math.abs(lngb - lnga); var lngRadian = _Radian(lngMinus); var ANGLE = Math.sin(WA) * Math.sin(WB) + Math.cos(WA) * Math.cos(WB) * Math.cos(lngRadian); var L = Math.acos(ANGLE) * earthR; return L; }
用_Radian发角度转化为弧度.
因为取两点的最小值,所以但经度之间差大于180时,再用360 - 经度差,取最小经度差.
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/89577.html
摘要:最近工作需要,网上搜索了下根据经纬度计算两地距离的方法,发现要么是几何法,画图作一堆辅助线,然后证明推理,要么二话不说直接套公式。球体上两地的最短距离就是经过两点的大圆的劣弧长度。 最近工作需要,网上搜索了下根据经纬度计算两地距离的方法,发现要么是几何法,画图、作一堆辅助线,然后证明推理,要么二话不说直接套公式。这篇文章介绍一种容易理解的方式来求这个距离。 0b00 思路 地球是个不规...
摘要:计算精度与谷歌地图的距离精度差不多,相差范围在米以下。以上代码大部分来自网上收集,经过验证过的,可以使用 根据经纬度计算距离公式 showImg(https://segmentfault.com/img/bV6zX2?w=437&h=76); 图片来自互联网 对上面的公式解释如下: Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度; a=Lat1 – Lat2...
摘要:计算精度与谷歌地图的距离精度差不多,相差范围在米以下。以上代码大部分来自网上收集,经过验证过的,可以使用 根据经纬度计算距离公式 showImg(https://segmentfault.com/img/bV6zX2?w=437&h=76); 图片来自互联网 对上面的公式解释如下: Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度; a=Lat1 – Lat2...
阅读 1639·2021-09-26 10:00
阅读 2908·2021-09-06 15:00
阅读 3510·2021-09-04 16:40
阅读 2276·2019-08-30 15:44
阅读 679·2019-08-30 10:59
阅读 1862·2019-08-29 18:34
阅读 3580·2019-08-29 15:42
阅读 2273·2019-08-29 15:36