三维坐标怎样表示地球空间:球、椭球与经纬度

This article is extracted from the chat log with AI. Please identify it with caution.

AI 参与说明(Agent:/root/root/find_existing_docs/root/source_check):本文由 Agent 根据公开的一手资料辅助调研、撰写与校验。内容按 2026-08-14 的资料整理;坐标转换必须同时确认实际采用的坐标参考系统、数据版本和高程基准。

可以。三维坐标并不会把地球“压成平面”:它是在三维空间中给地球表面或地球附近的点编号。日常说“地球是圆的”更准确的说法是“地球近似是球体”;在数学上,二维的“圆”和三维的“球面”不是同一个对象。

若把地球先近似成半径为 R 的球,球面上的每个点都满足 x² + y² + z² = R²。这组 (x, y, z) 恰好描述的是一张弯曲的球面,而不是一张平面。经纬度则是给这张曲面选另一种更方便人读的坐标:纬度、经度定位表面上的位置;再加高度,便能定位地表上方、地表或地下的三维位置。

地球不只是一个完美的球#

工程中通常不会把地球当成完美球体。以 World Geodetic System 1984(WGS 84)为例,它使用一个绕地轴略扁的参考椭球:半长轴 a = 6,378,137.0 m,反扁率 1 / f = 298.257223563。NGA 将 WGS 84 定义为 Earth-Centered, Earth-Fixed(ECEF)的三维地球参考系统,也是 GPS 所使用的参考系统。NGA 的 WGS 84 定义

还要区分三个概念:

  • 地形表面:山、谷、建筑物所在的真实表面,不规则。
  • 大地水准面(geoid):由重力场定义、近似全球平均海平面的起伏曲面;它常用于理解“海拔零点”。NOAA 对 geoid 的说明
  • 参考椭球(reference ellipsoid):光滑、可计算的近似模型;WGS 84 的经纬度和椭球高以它为基准。

所以,“地球是圆的”并不妨碍使用坐标;恰恰相反,坐标系统会明确说明要按球、椭球还是大地水准面来计算。

两种常用表示法#

  1. 大地坐标(geodetic coordinates)纬度 φ,经度 λ,椭球高 h。这是地图、定位接口中最常见的形式;只给 φ, λ 时,通常只是在参考椭球表面上定位。
  2. ECEF 笛卡尔坐标X, Y, Z,WGS 84 的原点定义为包括海洋和大气在内的地球质心,坐标轴随地球转动而固定。它适合卫星定位、全球三维计算和坐标转换。

两者描述的是同一个位置,只是“标签方式”不同。把全球表面投到地图上的 Web Mercator、UTM 等平面坐标则是第三种表示:它便于画图或局部测量,但任何全球平面投影都会保留某些性质、牺牲另一些性质,不能同时保持所有距离、面积和角度不变。

从经纬高转换为 X, Y, Z#

对 WGS 84 椭球,转换公式如下(φ 为纬度,λ 为经度):

e² = 2f − f²
N  = a / √(1 − e² sin²φ)
X  = (N + h) cosφ cosλ
Y  = (N + h) cosφ sinλ
Z  = [N(1 − e²) + h] sinφ

这是地理三维坐标 (φ, λ, h) 与地心 Cartesian 坐标 (X, Y, Z) 的标准转换形式;公式与适用条件可核对 IOGP / EPSG Guidance Note 7-2

下面的 Python 标准库示例可直接运行。输入为十进制度的纬度、经度和 WGS 84 椭球高(米),输出为 ECEF 米制坐标:

from math import cos, radians, sin, sqrt

A = 6_378_137.0
INV_F = 298.257223563
F = 1 / INV_F
E2 = F * (2 - F)


def wgs84_to_ecef(latitude_deg: float, longitude_deg: float, height_m: float = 0.0):
    phi = radians(latitude_deg)
    lam = radians(longitude_deg)
    n = A / sqrt(1 - E2 * sin(phi) ** 2)

    x = (n + height_m) * cos(phi) * cos(lam)
    y = (n + height_m) * cos(phi) * sin(lam)
    z = (n * (1 - E2) + height_m) * sin(phi)
    return x, y, z


x, y, z = wgs84_to_ecef(0.0, 0.0)
print(f"X={x:.3f} m, Y={y:.3f} m, Z={z:.3f} m")

预期输出为:

X=6378137.000 m, Y=0.000 m, Z=0.000 m

这个点位于赤道与本初子午线的交点。它没有把地球摊平;只是把椭球面上的位置转换成从地心量出的三个直角坐标值。

实际使用时最容易忽略的前提#

  • 坐标值本身不够:应同时保存坐标参考系统(CRS)和轴顺序;同一组数字在不同 datum 下可能表示不同位置。
  • h 是椭球高,不必然等于人们口中的“海拔”。若业务需要相对平均海平面的高度,还要指定 geoid / 垂直基准并完成高程转换。
  • 对全球位置、卫星轨道等问题可使用 ECEF;对城市范围内的距离、方向和局部建模,通常会再转换到合适的局部坐标或投影坐标。

一句话总结:地球的表面可以看作嵌在三维空间中的曲面;三维坐标、经纬高和地图投影是描述这张曲面的不同工具,而不是互相矛盾的说法。

参考资料#

本文共 1684 字,创建于 Aug 14, 2026

相关标签: Math, ByAI