javascript如何来计算两个地方之间的距离?我相信会有很多种方法都可以实现,接下来的这篇文章就给大家来介绍javascript通过经纬度来计算两地之间的距离。
最近工作需要,网上搜索了下根据经纬度计算两地距离的方法,发现要么是几何法,画图、作一堆辅助线,然后证明推理,要么二话不说直接套公式。这篇文章介绍一种容易理解的方式来求这个距离。
地球是个不规则的椭球体、为了简便我们当作球体来计算。
球体上两地的最短距离就是经过两点的大圆的劣弧长度。
思路如下:
弧长 ← 弦长(两点距离) ← 两点坐标(直角坐标) ← 经纬度
立即学习“Java免费学习笔记(深入)”;
设:
地球半径为 $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 = 6371
const {cos, sin, PI} = Math
let 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)
}
}这个太简单,跳过
这个可以画个图,帮助理解:

现在已知弦长 $c$, 半径 $R$, 要求弧 $r$ 的长度
这很简单, 只需先求出 $∠lpha$ 的大小 :
$$ lpha = rcsin(c/2/R)\ r = 2lpha cdot R $$
const {asin} = Math
const R = 6371
r = 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
}相关推荐:
以上就是javascript通过经纬度来计算两地之间的距离的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号