javascript如何来计算两个地方之间的距离?我相信会有很多种方法都可以实现,接下来的这篇文章就给大家来介绍javascript通过经纬度来计算两地之间的距离。
最近工作需要,网上搜索了下根据经纬度计算两地距离的方法,发现要么是几何法,画图、作一堆辅助线,然后证明推理,要么二话不说直接套公式。这篇文章介绍一种容易理解的方式来求这个距离。
思路地球是个不规则的椭球体、为了简便我们当作球体来计算。
球体上两地的最短距离就是经过两点的大圆的劣弧长度。
思路如下:
弧长 ← 弦长(两点距离) ← 两点坐标(直角坐标) ← 经纬度
计算1. 坐标转换设:
地球半径为 $r$
地心到 e 0° n 0° 的连线为 x 轴
地心到 e 90° n 0° 的连线为 y 轴
地心到 e 0° n 90° 的连线为 z 轴
地球表面有一点 $a$, 经度为 $e$, 纬度为 $n$, 单位为弧度
则 $a$ 的坐标可表示为:
$$x = r \cdot cos(n) \cdot cos(e)\\y = r \cdot cos(n) \cdot sin(e)\\z = r \cdot sin(n)$$
代码const r = 6371const {cos, sin, pi} = mathlet getpoint = (e, n) => { //首先将角度转为弧度 e *= pi/180 n *= pi/180 reutrn { x: r*cos(n)*cos(e), y: r*cos(n)*sin(e), z: r*sin(n) }}
2. 根据坐标计算两点距离这个太简单,跳过
3. 根据弦长求弧长这个可以画个图,帮助理解:
现在已知弦长 $c$, 半径 $r$, 要求弧 $r$ 的长度
这很简单, 只需先求出 $∠\alpha$ 的大小 :
$$\alpha = \arcsin(c/2/r)\\r = 2\alpha \cdot r$$
代码const {asin} = mathconst r = 6371r = asin(c/2/r)*2*r
最终代码/** * 获取两经纬度之间的距离 * @param {number} e1 点1的东经, 单位:角度, 如果是西经则为负 * @param {number} n1 点1的北纬, 单位:角度, 如果是南纬则为负 * @param {number} e2 * @param {number} n2 */function getdistance(e1, n1, e2, n2){ const r = 6371 const { sin, cos, asin, pi, hypot } = math /** 根据经纬度获取点的坐标 */ let getpoint = (e, n) => { e *= pi/180 n *= pi/180 //这里 r* 被去掉, 相当于先求单位圆上两点的距, 最后会再将这个距离放大 r 倍 return {x: cos(n)*cos(e), y: cos(n)*sin(e), z: sin(n)} } let a = getpoint(e1, n1) let b = getpoint(e2, n2) let c = hypot(a.x - b.x, a.y - b.y, a.z - b.z) let r = asin(c/2)*2*r return r}
相关推荐:
根据经纬度计算两地距离
php根据两点间的经纬度计算距离,php两点经纬度计算
以上就是javascript通过经纬度来计算两地之间的距离的详细内容。