工具 / 地理计算 / 两点距离
GEO · 大圆距离

经纬度球面距离与方位角计算

地图上两点之间要走的是大圆航线,不是平面直线。用 Haversine 公式算出的球面距离,才和导航、飞行里程对得上。

Haversine 球面距离 方位角 0° 为正北 地球半径 6371.0088 km
纬度在前、经度在后,南纬西经用负数

输入参数 INPUT

本页用球体模型,与 WGS84 椭球体算出的距离相差约 0.3%–0.5%。导航里程还要叠加路网绕行,通常比直线距离长 20%–40%。

测算结果 OUTPUT

—
填好两组坐标后点计算
只解读几何量,不做路线规划

Haversine:把球面拆成三角

公式先用经纬度差算出球面上两点间的圆心角,再乘地球半径。它对小距离数值稳定,也不会出现平面近似的严重失真。

a = sin²(Δφ/2) + cosφ1·cosφ2·sin²(Δλ/2)
c = 2·atan2(√a, √(1−a))
d = R · c (R = 6371.0088 km)

其中 φ 是纬度、λ 是经度,都要先转成弧度。Δφ、Δλ 是两点的差值。地球半径取 6371.0088 km 是 IUGG 的平均半径,比赤道半径 6378 km 更接近全球平均。

方位角不是「地图上的角度」

θ = atan2( sinΔλ·cosφ2, cosφ1·sinφ2 − sinφ1·cosφ2·cosΔλ )

方位角以正北为 0°、顺时针增加,得到的是起点处的初始航向。沿大圆飞行时航向会持续变化,所以「终点看起点」的反方位角并不是简单加 180°,这里给出的反方位角仅为近似值。

什么时候会算错

  • 经纬度顺序颠倒:北京填成 116,39 会跑到蒙古以北,距离直接翻倍。
  • 南纬西经没加负号:悉尼应是 -33.87, 151.21,里约应是 -22.91, -43.17。
  • 把度分秒当小数:39°54′15″ 应换算为 39.9042,而不是 39.5415。
  • 用平面勾股定理:在高纬度地区误差可达几十个百分点。

精度与用途

球面距离适合估算飞行里程、徒步直线距离、基站覆盖半径。若要做测绘级计算(厘米级),需要用椭球体大地线算法(如 Vincenty 或 GeographicLib),本页不适用。

常见问题

为什么和地图测距差几十公里?

两种可能:一是地图按路网测距,绕行会让里程变长;二是地图用椭球体模型,本页用球体模型,长距离下差异约 0.3%–0.5%。1000 公里的行程,差 3–5 公里属正常。

北京到上海到底多远?

按本页默认坐标(39.9042,116.4074 → 31.2304,121.4737)约 1067 公里。高铁里程 1318 公里、公路约 1200 公里,都比球面直线距离长,这是路网绕行的结果。

方位角 90° 是向东吗?

是。方位角以正北为 0°,顺时针旋转:90° 正东、180° 正南、270° 正西。若你算出的角度是负值,加 360° 归一化即可。

跨越 180° 经线会算错吗?

不会。Haversine 用的是经度差的正弦与余弦,Δλ = 179° 与 Δλ = −181° 在三角函数下等价,会自动走最短的那一侧,不需要手动处理跨日界线。

球面模型计算结果,测绘与导航请使用椭球体大地线算法。