Нужно объяснить алгоритм ecef в enu - PullRequest
0 голосов
/ 21 мая 2019

Я нашел несколько полезных кодов преобразования координат в https://gist.github.com/govert/1b373696c9a27ff4c72a

Однако в функции EcefToEnu есть кое-что, что мне не совсем понятно на

// Converts the Earth-Centered Earth-Fixed (ECEF) coordinates (x, y, z) to 
// East-North-Up coordinates in a Local Tangent Plane that is centered at the 
// (WGS-84) Geodetic point (lat0, lon0, h0).
public static void EcefToEnu(double x, double y, double z,
                                double lat0, double lon0, double h0,
                                out double xEast, out double yNorth, out double zUp)
{
    // Convert to radians in notation consistent with the paper:
    var lambda = DegreesToRadians(lat0);
    var phi = DegreesToRadians(lon0);
    var s = Sin(lambda);
    var N = a / Sqrt(1 - e_sq * s * s);

    var sin_lambda = Sin(lambda);
    var cos_lambda = Cos(lambda);
    var cos_phi = Cos(phi);
    var sin_phi = Sin(phi);

    double x0 = (h0 + N) * cos_lambda * cos_phi;
    double y0 = (h0 + N) * cos_lambda * sin_phi;
    double z0 = (h0 + (1 - e_sq) * N) * sin_lambda;

    double xd, yd, zd;
    xd = x - x0;
    yd = y - y0;
    zd = z - z0;

    // This is the matrix multiplication
    xEast = -sin_phi * xd + cos_phi * yd;
    yNorth = -cos_phi * sin_lambda * xd - sin_lambda * sin_phi * yd + cos_lambda * zd;
    zUp = cos_lambda * cos_phi * xd + cos_lambda * sin_phi * yd + sin_lambda * zd;
}

Я получаю входные данные, первые 4 строки преобразования, 4 строки sin и cos, и я получаю умножение матриц - в алгоритме есть множество примеров с этим. Но что мне не ясно, так это часть

    double x0 = (h0 + N) * cos_lambda * cos_phi;
    double y0 = (h0 + N) * cos_lambda * sin_phi;
    double z0 = (h0 + (1 - e_sq) * N) * sin_lambda;

    double xd, yd, zd;
    xd = x - x0;
    yd = y - y0;
    zd = z - z0;

Я не узнаю этот раздел ни по одному из алгоритмов, которые я видел. Похоже, это какое-то смещение, но кроме этого мне неясно, откуда появились формулы или что именно делает этот код. Может ли кто-нибудь объяснить мне, что делает этот фрагмент кода? Я просто хочу понять, на что я смотрю.

1 Ответ

0 голосов
/ 21 мая 2019

Это преобразование геодезических координат (широта, длина, высота), иначе (phi, lambda, h0), в ecef декартовы (x0, y0, z0), а затем вычисление вектора ecef из (x0, y0, n0).) к (x, y, z).

Для первой части обратите внимание, что если бы эллипсоид был сферой (e == 0), то первая часть была бы преобразованием сферических поляр в декартовы

...