1. 概述

本文将深入讲解 Haversine 公式(Haversine Formula),它用于计算球面上两点之间的最短距离(即大圆距离)。

我们将从以下角度展开:

  • 首先,回顾在笛卡尔坐标系和极坐标系中如何计算两点距离;
  • 然后,将极坐标系扩展到三维球面坐标系;
  • 最后,介绍 Haversine 公式及其在地理空间计算中的应用。

学习完本文后,你将能理解并实现 Haversine 公式,用于估算地球表面任意两点之间的近似距离。


2. 为什么需要 Haversine 公式?

2.1. 大圆距离的直观理解

在地理信息系统中,计算两点之间的最短路径是一个常见需求,比如:

从 A 地出发,沿地球表面到达 B 地,最短路径是哪条?

globe

这个最短路径就是 大圆路径(Great Circle Path)。Haversine 公式正是用来计算这种路径长度的重要工具。

2.2. 什么是大圆距离?

一个球面可以被无数个平面切割,但只有穿过球心的平面与球面相交形成的圆,才被称为 大圆(Great Circle)。

planes

当两个点位于球面上时,它们之间的大圆距离就是连接它们的唯一一条大圆路径的长度。

✅ 这条路径也被称为 测地线(Geodesic),是球面上两点之间的最短路径。

2.3. 地球不是平的,但也不是完美的球体

在三维平直空间中,我们可以用欧几里得距离(Euclidean Distance)计算两点之间的直线距离。但在球面上,比如地球表面,这种直线并不存在,我们只能沿着球面移动。

3d

因此,我们需要用大圆距离来代替欧几里得距离。

⚠️ 虽然地球不是完美的球体,但在大多数应用中,使用球面近似已足够精确。

2.4. 不仅用于地球表面

除了地球表面,Haversine 公式也适用于以下场景:

  • 卫星轨道(如地球同步轨道)中的路径计算;
  • 飞机航线规划;
  • 电子绕原子核运动的轨迹计算。

satellite

airplane

atom

这些场景的共同点是:运动路径限制在某个球面上

2.5. 距离公式应满足的条件

为了计算球面两点之间的距离,公式应满足以下条件:

  • ✅ 距离是球体半径的单调递增函数;
  • ✅ 当两点重合时,距离为 0;
  • ✅ 当两点位于球体两端时,距离最大(即 π × 半径);
  • ✅ 公式应能表达两点之间的角度差。

这些要求最终都由 Haversine 公式所满足。


3. 平面和球面的距离计算

3.1. 欧几里得距离

在二维平面上,两点 A(x₁, y₁) 和 B(x₂, y₂) 之间的欧几里得距离为:

$$ d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} $$

在更高维空间中,也可以推广为:

$$ d = \sqrt{\sum_{i=1}^n (B_i - A_i)^2} $$

但这种公式只适用于平面,不适用于球面。

3.2. 极坐标系下的距离

在极坐标系中,点用 (r, θ) 表示。两点 A(r₁, θ₁) 和 B(r₂, θ₂) 之间的距离为:

$$ d = \sqrt{r_1^2 + r_2^2 - 2 r_1 r_2 \cos(\theta_1 - \theta_2)} $$

⚠️ 但这个公式也不适用于球面距离。


4. Haversine 公式详解

4.1. 三维极坐标系统

在三维空间中,有两种常见的极坐标扩展:

  • 圆柱坐标系(Cylindrical Coordinates);
  • 球面坐标系(Spherical Coordinates)。

我们主要使用球面坐标系,因为地球表面的点通常用经纬度表示。

在球面坐标系中,大圆路径是球面与穿过球心的平面的交线。

Rendered by QuickLaTeX.com

两点之间的距离就是这条大圆路径的弧长。

4.2. Haversine 公式定义

设两点 A 和 B 的经纬度分别为:

  • A: (φ₁, λ₁)
  • B: (φ₂, λ₂)

其中 φ 表示纬度,λ 表示经度,单位为 弧度

球体半径为 r(通常取地球平均半径 6371 km)。

则两点之间的大圆距离 d 为:

$$ d = r \cdot \text{archav}(\text{hav}(\Delta\phi) + \cos(\phi_1) \cdot \cos(\phi_2) \cdot \text{hav}(\Delta\lambda)) $$

其中:

  • Δφ = φ₂ - φ₁
  • Δλ = λ₂ - λ₁
  • $\text{hav}(\theta) = \sin^2\left(\frac{\theta}{2}\right)$

4.3. 地球不是完美的球体

地球是一个 椭球体,赤道半径约为 6378 km,极半径约为 6356 km。

在实际应用中,我们通常使用平均半径:

$$ r = 6371 \text{ km} $$

但如果两点靠近极地或赤道,可以分别使用极半径或赤道半径以提高精度。


5. 总结

  • ✅ Haversine 公式用于计算球面两点之间的大圆距离;
  • ✅ 它适用于地球表面、卫星轨道、飞机航线等场景;
  • ✅ 公式基于球面三角学,使用经纬度计算;
  • ✅ 实际应用中,地球半径通常取 6371 km。

掌握 Haversine 公式后,你就可以在 Java、Python 或其他语言中轻松实现地理距离计算功能了。


原始标题:Haversine Formula

« 上一篇: 常见网络协议解析
» 下一篇: 高级数据结构详解