各种地理坐标系统及其在作战仿真中的应用

15 阅读5分钟

0.经纬度坐标系

经纬度坐标系(LLA - Latitude/Longitude/Altitude)是最常用的地球表面位置表示方法,使用角度值描述位置。

CGCS2000 与WGS84

CGCS2000 (China Geodetic Coordinate System 2000) 是一种地心坐标系,与 WGS84 在数学模型上基本一致,都基于 GRS80 椭球体。

  • GeographicLib 的 Geodesic 类直接支持基于椭球体的距离计算
      • 对于坐标转换,可以使用 PROJ 库(GeographicLib 可以与 PROJ 配合使用)
// 使用 GeographicLib 计算 CGCS2000 坐标间的距离
#include <GeographicLib/Geodesic.hpp>

double lat1 = 39.9042; // 北京(CGCS2000)
double lon1 = 116.4074;
double lat2 = 31.2304; // 上海(CGCS2000)
double lon2 = 121.4737;

GeographicLib::Geodesic geod(6378137.0, 1/298.257223563); // GRS80 椭球参数(CGCS2000使用)
double s12;
geod.Inverse(lat1, lon1, lat2, lon2, s12);

1. ECEF 坐标系(地心地固坐标)

  • X, Y, Z :以地心为原点的三维直角坐标
  • 单位:米
  • 用于:卫星定位、空间计算
#include <GeographicLib/Geocentric.hpp>

GeographicLib::Geocentric earth(GeographicLib::Constants::WGS84_a(), 
                                 GeographicLib::Constants::WGS84_f());

double lat = 39.9042, lon = 116.4074, h = 50; // 经纬度 + 高度
double X, Y, Z;
earth.Forward(lat, lon, h, X, Y, Z); // 转换为 ECEF

// 反向转换
earth.Reverse(X, Y, Z, lat, lon, h);

2. UTM 投影坐标(平面坐标 + 高度)

  • X (Easting) :东向坐标
  • Y (Northing) :北向坐标
  • Z :高度
  • 单位:米
#include <GeographicLib/UTMUPS.hpp>

int zone;
bool northp;
double x, y;
GeographicLib::UTMUPS::Forward(lat, lon, zone, northp, x, y); // 经纬度 -> UTM

// 反向转换
GeographicLib::UTMUPS::Reverse(zone, northp, x, y, lat, lon);

3. MGRS 坐标

  • 军事网格参考系统,基于 UTM
#include <GeographicLib/MGRS.hpp>

std::string mgrs;
GeographicLib::MGRS::Forward(zone, northp, x, y, lat, 5, mgrs);

4. 局部切平面坐标(ENU)

  • E (East) :东向
  • N (North) :北向
  • U (Up) :天向(高度)
#include <GeographicLib/LocalCartesian.hpp>

GeographicLib::LocalCartesian proj(lat0, lon0, h0); // 定义原点

double e, n, u;
proj.Forward(lat, lon, h, e, n, u); // 转换为局部坐标

// 反向转换
proj.Reverse(e, n, u, lat, lon, h);

5. 北-东-地 坐标系(NED)

NED(North-East-Down)是 北-东-地 坐标系,一种 本地切平面坐标系。

        N(北/North)
         ↑
         │
         │
         │
         └──────→ E(东/East)
        ╱
       ╱
      D(地/Down)↓

特点:
- 原点:参考点(载机/载舰/仿真中心)
- N轴:指向正北(真北)
- E轴:指向正东
- D轴:指向地心(垂直向下)
- 单位:米
- 正交坐标系:N ⊥ E ⊥ D

与 ENU 的区别

特性NEDENU
垂直轴D(向下)U(向上)
轴顺序N-E-DE-N-U
应用飞行器地面/传感器
高度-DU
// 经纬度 → NED
void llaToNED(double lat, double lon, double alt,
            double refLat, double refLon, double refAlt,
            double& n, double& e, double& d) {
    
    // 1. LLA → ECEF
    double x, y, z;
    GeographicLib::Geocentric earth(GeographicLib::Constants::WGS84_a(), 
                                     GeographicLib::Constants::WGS84_f());
    earth.Forward(lat, lon, alt, x, y, z);
    
    // 2. ECEF → NED
    GeographicLib::LocalCartesian local(refLat, refLon, refAlt);
    local.Reverse(x, y, z, e, n, u);  // 注意:LocalCartesian 输出是 ENU
    
    // 3. ENU → NED
    n = n;  // 北向不变
    e = e;  // 东向不变
    d = -u; // 天向取反为地向
}
// NED → 经纬度
void nedToLLA(double n, double e, double d,
            double refLat, double refLon, double refAlt,
            double& lat, double& lon, double& alt) {
    
    // 1. NED → ENU
    double u = -d;  // 地向取反为天向
    
    // 2. ENU → ECEF
    GeographicLib::LocalCartesian local(refLat, refLon, refAlt);
    double x, y, z;
    local.Forward(e, n, u, x, y, z);
    
    // 3. ECEF → LLA
    GeographicLib::Geocentric earth(GeographicLib::Constants::WGS84_a(), 
                                     GeographicLib::Constants::WGS84_f());
    earth.Reverse(x, y, z, lat, lon, alt);
}

6.坐标系对比

坐标系X/Y 含义Z 含义适用场景
ECEF地心三维坐标地心三维坐标卫星定位、空间计算
UTM东向/北向高度地图投影、区域测量
ENU东向/北向天向局部区域、相对位置
经纬度经度/纬度高度全球定位、导航

7.典型仿真系统选择

典型仿真流程:

经纬度(LLA) ──→ ECEF ──→ ENU/NED
    │            │          │
    │            │          └── 动力学计算
    │            └── 实体间相对位置
    └── 数据输入/显示

转换公式:
LLA → ECEF:GeographicLib::Geocentric::Forward()
ECEF → ENU:GeographicLib::LocalCartesian::Forward()
ECEF → NED:旋转矩阵转换

8.军事仿真系统主流选择 :

场景主坐标原因
飞行器仿真NED符合飞行力学,高度直观
导弹仿真ECEF + NED全球定位 + 本地制导
地面仿真ENU/UTM地面作战直观
分布式仿真ECEF全球统一,互操作性强

9. AFSim 坐标系

AFSim(Advanced Framework for Simulation)是美国空军开发的作战仿真框架,其坐标系设计如下:

9.1. 主要坐标系

坐标系 用途 说明 ECEF 内部计算、实体定位 地心地固坐标系,主要工作坐标系 NED 飞行器动力学 北-东-地坐标系,本地参考系 LLA 输入输出 经度-纬度-高度,用户接口 ECI 轨道计算 地心惯性坐标系,卫星/弹道

9.2. 坐标系层次结构

用户层          LLA(经纬度高度)
                  │
                  ↓ 转换
────────────────────────────────────
核心层          ECEF(地心地固)
                  │
                  ↓ 转换
────────────────────────────────────
平台层          NED(北东地)
                  │
                  ↓ 动力学计算
────────────────────────────────────

9.3. 各平台坐标系

平台类型本地坐标系说明
飞机NED机体系 → NED → ECEF
导弹NED制导计算在 NED
卫星ECI轨道动力学
地面车辆ENU/UTM地面作战
舰船NED海面作战

9.4. AFSim 坐标转换

// AFSim 典型坐标转换流程

// 输入:经纬度
LLA position = {39.9042, 116.4074, 10000}; // 高度10km

// 转换为 ECEF(内部存储)
ECEF ecefPos;
WCS_Convert::LLA_To_ECEF(position, ecefPos);

// 转换为 NED(飞行器本地)
NED nedPos;
WCS_Convert::ECEF_To_NED(ecefPos, nedPos, refPoint);

// 动力学计算在 NED 中进行
// ...

9.5. AFSim 坐标约定

参数约定
角度单位度(输入)、弧度(内部计算)
距离单位
高度参考WGS84 椭球或 MSL(平均海平面)
经度范围-180° ~ +180°
纬度范围-90° ~ +90°

9.6. 平台姿态表示

AFSim 姿态定义:
- Roll(滚转):绕纵轴旋转
- Pitch(俯仰):绕横轴旋转  
- Yaw(偏航):绕垂直轴旋转

参考系:
- 机体系:相对于飞机本体
- NED:相对于本地北东地

9.7. 与 DIS/HLA 的关系

标准 坐标系 说明 DIS ECEF IEEE 1278 标准 HLA ECEF IEEE 1516 标准 AFSim ECEF 兼容 DIS/HLA

9.8. 典型应用场景

场景1:空战仿真
LLA(输入)→ ECEF(全局)→ NED(本地动力学)→ ECEF → LLA(输出)

场景2:导弹制导
ECEF(发射点)→ NED(制导计算)→ ECEF(目标拦截)

场景3:卫星轨道
ECI(轨道计算)→ ECEF(地面相对位置)→ LLA(显示)

9.9. AFSim 配置示例

<!-- AFSim 场景配置 -->
<scenario>
  <platform name="Fighter">
    <position>
      <latitude>39.9042</latitude>
      <longitude>116.4074</longitude>
      <altitude>10000</altitude>  <!-- 米 -->
    </position>
    <orientation>
      <heading>90</heading>    <!-- 度 -->
      <pitch>0</pitch>
      <roll>0</roll>
    </orientation>
  </platform>
</scenario>

9.10. 总结

层次 坐标系 用途 用户接口 LLA 输入输出、显示 核心计算 ECEF 全局定位、实体间关系 平台动力学 NED 飞行器运动方程 轨道计算 ECI 卫星/弹道导弹

一句话总结 :AFSim 以 ECEF 为核心坐标系 , LLA 为用户接口 , NED 为飞行器本地坐标系 ,符合军事仿真标准(DIS/HLA)规范。

10.投影、经纬度、坐标之间

graph TD
    A["地球(真实物理位置)"] --> B["地心坐标系(现代)<br/>原点:地球质心"]
    A --> C["参心坐标系(传统)<br/>原点:参考椭球中心"]

    B --> D["WGS84<br/>(GPS)"]
    B --> E["CGCS2000<br/>(中国)"]
    B --> F["ITRF<br/>(国际)"]

    C --> G["北京54<br/>(中国老)"]
    C --> H["西安80<br/>(中国老)"]
    C --> I["NAD27<br/>(美国老)"]

    D & E & F & G & H & I --> J["坐标转换<br/>(七参数/四参数)"]
    J --> K["经纬度坐标(LLA)<br/>Longitude, Latitude, Altitude<br/>例:116.4074°E, 39.9042°N, 50m"]

    K --> L["不投影<br/>(三维坐标)"]
    K --> M["投影变换<br/>(曲面→平面)"]

    L --> N["ECEF<br/>地心地固坐标<br/>X, Y, Z(米)<br/>用于:卫星轨道/导弹制导"]

    M --> O["平面投影坐标<br/>(米为单位)"]
    M --> P["加密坐标<br/>(中国特有)"]

    N --> Q["ENU/NED<br/>局部切平面<br/>ENU: 东-北-天<br/>用于:传感器/地面仿真<br/>NED: 北-东-地<br/>用于:飞行器/导弹制导"]

    O --> R["墨卡托投影<br/>Web地图/航海"]
    O --> S["UTM投影<br/>60分带/军事仿真"]
    O --> T["高斯-克吕格<br/>3°/6°分带/中国测绘"]
    O --> U["兰伯特投影<br/>圆锥投影/航空/气象"]

    P --> V["GCJ-02<br/>(火星坐标)"]
    P --> W["BD-09<br/>(百度坐标)<br/>用于:高德/百度地图/腾讯地图"]