--- id: b2fdfd13-695a-4665-8574-6309ee049188 slug: geographic-coordinate-conversion title: 地理坐标转换 summary: "" status: published tags: [] cover: "" version: 1 slug_source: manual slug_locked: true published_at: "2026-01-07T09:27:48+08:00" created_at: "2024-06-29T07:07:00+08:00" updated_at: "2026-01-07T09:27:48+08:00" --- 近些日子的工作频繁接触到了大地测量中的各种知识,在编写程序的时候更是涉及各种地理坐标的转换,虽然没有深入去学习其核心的变化原理,但是简单地使用现存的公式配合程序进行计算还是可以做到的,以下是有关知识的记录。 ### 1.名词解释 #### 1.1 LLA 坐标系 LLA 坐标是地理坐标系中的一种表示方法,LLA 代表经纬度和高度(Latitude, Longitude, and Altitude),它通常用于描述地球表面上的位置。 - **Latitude (纬度)**:表示从地球赤道向北或向南的角度,范围是 -90° 到 +90°。正值表示北纬,负值表示南纬。 - **Longitude (经度)**:表示从本初子午线(通常是通过格林尼治的子午线)向东或向西的角度,范围是 -180° 到 +180°。正值表示东经,负值表示西经。 - **Altitude (高度)**:表示相对于平均海平面的高度,可以是正值(高于海平面)或负值(低于海平面)。 LLA 坐标系也叫全球地理坐标系、大地坐标系、WGS-84坐标系。纬度和经度的数值可以以多种不同的单位或格式出现: - 六十进制度:度、分、秒:40° 26′ 46“ N 79° 58′ 56” W - 度和十进制分:40° 26.767′ N 79° 58.933′ W - 十进制度: +40.446 -79.982 横纬竖经,在计算的过程中,主要也是将之转换为十进制来计算的,以下是计算公式: $$ decimal = degress + \\frac{minutes}{60} + \\frac{seconds}{3600} $$ 关于 **WGS-84** ( World Geodetic System 1984,1984年世界大地测量系统),它是目前全球范围内使用最广泛的地理坐标系统和地球模型,由美国国防部制定和维护,主要用于全球定位系统(GPS)和各种地理信息系统(GIS)。 WGS-84 有几个关键常量用于定义参考椭球体的形状和尺寸,这些常量包括半长轴、半短轴、扁率和离心率等: - **半长轴 (A)**:椭球体的赤道半径 - 其值为 $ 6378137.0 $ 米。 - **半短轴 (B)**:椭球体的极半径 - 其计算公式为: $ B = A*(1-F) $ - 其值为 $ 6356752.3142 $ 米 - **扁率 (F)**:描述椭球体扁平程度的参数 - 其计算公式为:$ F = \\frac{A-B}{A}$ - 其值为:1/298.257223563 - **第一离心率 (E)**:描述椭球体形状的一种参数,反映了椭球体的偏离程度 - 其计算公式:$ E = \\sqrt{1 - (\\frac{B}{A}) ^2} $ - 其值约为: 0.0818191908426 - **第一离心率的平方 (E²)**:减少计算所用 - 其中值约为: 0.00669437999014 #### 1.2 ECEF坐标系 ECEF(Earth-Centered, Earth-Fixed)坐标系是一种三维笛卡尔坐标系,用于表示地球上的位置。ECEF 坐标系也称为地心地固坐标系,它的原点位于地球质心,并且随着地球的自转而旋转。 - **X 轴**:指向穿过地球赤道与本初子午线(通过格林尼治的子午线)交点的方向。 - **Y 轴**:指向穿过地球赤道与东经90度子午线交点的方向。 - **Z 轴**:指向北极方向,与地球自转轴一致。 ECEF 坐标系提供了一个统一的三维坐标框架,可以精确地表示地球表面和近地空间的任何位置。 #### 1.3 ENU坐标系 ENU(East-North-Up)坐标系是一种局部笛卡尔坐标系,用于表示相对于某个参考点的三维位置。 - ENU 坐标系的原点通常位于地球表面的某个参考点,该点的地理坐标为 (Latitude, Longitude, Altitude)。 - **E 轴(东向轴)**:指向地平线的东方。 - **N 轴(北向轴)**:指向地平线的北方。 - **U 轴(上向轴)**:垂直向上,指向天空。 ### 2. 坐标系转换 #### 2.1 从 LLA 坐标到 ECEF 坐标 这里约定LLA的经度为 $\\phi$,纬度为 $\\lambda $,海拔为 $ h $, 选取 WGS-84 坐标系参数,$a$和$b$分别是是赤道半径(半长轴)和极半径(半短轴),$e^2 = 1 - \\frac{b^2}{a^2}$是偏心率的平方, $f=1-\\frac{b}{a} $ 是基准椭球体的极扁率。 $$ \\begin{align} X& = (N(\\phi) + h) cos \\phi cos\\lambda \\\\\\\\ Y& = (N(\\phi) + h) cos \\phi sin\\lambda \\\\\\\\ Z& = (\\frac{b^2}{a^2}N(\\phi) + h)sin\\phi \\\\\\\\ &=((1-e^2)N(\\phi) +h)sin\\phi \\\\\\\\ &=((1-f)^2N(\\phi)+h)sin\\phi \\end{align} $$ 其中 $$ \\begin{align} N(\\phi) = \\frac{a^2}{\\sqrt{a^2cos^2\\phi + b^2sin^2\\phi}} = \\frac{a}{\\sqrt{1-e^2sin^2\\phi}} \\end{align} $$ #### 2.2 从 ECEF 到 LLA坐标 将 ECEF 坐标 (X, Y, Z) 转换为经纬度和高度 (Latitude, Longitude, Altitude) 需要迭代计算。 $$ \\begin{align} \\lambda = atan2(Y,X) \\end{align} $$ 其中,atan2 是反正切函数 $\\lambda$ 是唯一能直接算出的,其余的纬度和高度的转换所要涉及 N 的循环关系 $$ \\begin{align} \\frac{Z}{p}cot\\phi = 1 - \\frac{e^2N}{N+h} \\\\\\\\ h = \\frac{p}{cos\\phi} -N \\end{align} $$ 其中,如公式$(6)$所示,N 的变化取决于 $\\phi$ 的值 纬度和高度需要迭代求解, 例如,从第一个猜测 h≈0 开始,然后更新 N。 其流程是这样的: 1. 猜测 h = 0,通过公式$(8) $ 可以推算 $cot\\phi = \\frac{(1-e^2)p}{Z} $ 求解出一个$\\phi_1$ 2. 将 $\\phi_1$ 带入公式 $(6)$,求解出 $N$ 3. 将 $N$ 带入公式$(9)$ 求解出 $h$ 4. 将 $h$ 带入公式$(8)$ 求解出一个新的 $\\phi_2$ 5. 如果 $\\phi_1$和$\\phi_2$足够接近,则说明迭代出了一个正确的值,如果不是,则需要回到第2步继续迭代。 #### 2.3 从 ECEF 到 ENU 坐标 ENU 坐标又称为站心坐标,6也就是局部坐标,这个坐标需要一个局部参考点。在实际例子中,这个参考点通常是雷达、基站这些地方。 如果基站位于 ${X_0,Y_0,Z_0}$,测站位于 ${X_1,Y_1,Z_1}$ $$ \\begin{bmatrix} e\\\\\\\\ n\\\\\\\\ u \\end{bmatrix}= \\begin{bmatrix} -sin\\lambda_0& cos\\lambda_0 & 0\\\\\\\\ -sin\\phi_0cos\\lambda_0& -sin\\phi_0sin\\lambda_0 &cos\\phi_0 \\\\\\\\ cos\\phi_0cos\\lambda_0& cos\\phi_0sin\\lambda_0 & sin\\phi_0 \\end{bmatrix} \\begin{bmatrix} X_1 -X_0\\\\\\\\ Y_1-Y_0\\\\\\\\ Z_1-Z_0 \\end{bmatrix} $$ (完)