JavaScript实现地球表面两点间距离计算:大圆距离与椭球修正公式

作者:木棉

时间:2026-10-27

浏览:310

本文介绍如何使用JavaScript计算地球表面两点间的距离。首先讲解基于球面假设的大圆距离公式及其JS实现,指出其在相对点处理时的局限性。随后提供基于地球椭球模型的修正公式代码,以提高计算精度。文章包含完整的函数定义、参数说明及关键变量解释,适用于地理信息系统开发中的距离测算场景。

文章目录

基于球面假设的大圆距离计算

利用JavaScript实现根据经纬度计算地球表面两点间距离的功能。


近期项目中需要计算地球表面两点间的距离,因此使用JavaScript进行了具体实现。


计算地球表面两点间距离通常有两种主要方法。



第一种方法

第一种方法假设地球是一个光滑的球体,计算任意两点间的距离,这种距离被称为大圆距离(The Great Circle Distance)。


具体计算公式如下。


使用JavaScript语言实现该公式的代码如下。


具体代码实现如下:

 
var EARTH_RADIUS = 6378137.0; //单位M
var PI = Math.PI;
function getRad(d){
return d*PI/180.0;
} 
/** 
/* caculate the great circle distance */
/* @param {Object} lat1 */
/* @param {Object} lng1 */
/* @param {Object} lat2 */
/* @param {Object} lng2 */
*/ 
function getGreatCircleDistance(lat1,lng1,lat2,lng2){
var radLat1 = getRad(lat1);
var radLat2 = getRad(lat2);
var a = radLat1 - radLat2;
var b = getRad(lng1) - getRad(lng2);
var s = 2*Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
s = s*EARTH_RADIUS;
s = Math.round(s*10000)/10000.0;
return s;
} 

该公式在大多数情况下结果较为准确,但在处理球面上相对点(antipodal points)时会出现问题。

存在一个修正的公式

由于实际需求中未遇到此类极端情况,故未深入探究其具体错误表现,相关信息可在Wiki上查阅。


基于地球椭球模型的修正公式

此外,我们知道地球并非完美的球体,而是一个椭球体,因此存在另一种更精确的计算公式。


相关代码实现如下:

 
/** 
/* approx distance between two points on earth ellipsoid */
/* @param {Object} lat1 */
/* @param {Object} lng1 */
/* @param {Object} lat2 */
/* @param {Object} lng2 */
*/ 
function getFlatternDistance(lat1,lng1,lat2,lng2){
var f = getRad((lat1 + lat2)/2);
var g = getRad((lat1 - lat2)/2);
var l = getRad((lng1 - lng2)/2);
var sg = Math.sin(g);
var sl = Math.sin(l);
var sf = Math.sin(f);
var s,c,w,r,d,h1,h2;
var a = EARTH_RADIUS;
var fl = 1/298.257;
sg = sg*sg;
sl = sl*sl;
sf = sf*sf;
s = sg*(1-sl) + (1-sf)*sl;
c = (1-sg)*(1-sl) + sf*sl;
w = Math.atan(Math.sqrt(s/c));
r = Math.sqrt(s*c)/w;
d = 2*w*a;
h1 = (3*r -1)/2/c;
h2 = (3*r +1)/2/s;
return d*(1 + fl*(h1*sf*(1-sg) - h2*(1-sf)*sg));
} 

使用此公式计算出的结果比第一种方法更为精确,但最终结果的精度仍取决于传入坐标的精度。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章