Преобразовать широту и долготу в систему координат ECEF

Я изучаю пример кода Apple и как он работает. кто-нибудь знает, как преобразовать широту и долготу в координаты ECEF, и работают ли скрытые координаты ECEF в координатах ENU с центром в заданных широтах, функции? Я просто хочу понять, что происходит в этой функции!

Благодарю.

void latLonToEcef(double lat, double lon, double alt, double *x, double *y, double *z)
{   
    double clat = cos(lat * DEGREES_TO_RADIANS);
    double slat = sin(lat * DEGREES_TO_RADIANS);
    double clon = cos(lon * DEGREES_TO_RADIANS);
    double slon = sin(lon * DEGREES_TO_RADIANS);

    double N = WGS84_A / sqrt(1.0 - WGS84_E * WGS84_E * slat * slat);

    *x = (N + alt) * clat * clon;
    *y = (N + alt) * clat * slon;
    *z = (N * (1.0 - WGS84_E * WGS84_E) + alt) * slat;
}
// Coverts ECEF to ENU coordinates centered at given lat, lon
void ecefToEnu(double lat, double lon, double x, double y, double z, double xr, double yr, double zr, double *e, double *n, double *u)
{
    double clat = cos(lat * DEGREES_TO_RADIANS);
    double slat = sin(lat * DEGREES_TO_RADIANS);
    double clon = cos(lon * DEGREES_TO_RADIANS);
    double slon = sin(lon * DEGREES_TO_RADIANS);
    double dx = x - xr;
    double dy = y - yr;
    double dz = z - zr;

    *e = -slon*dx  + clon*dy;
    *n = -slat*clon*dx - slat*slon*dy + clat*dz;
    *u = clat*clon*dx + clat*slon*dy + slat*dz;
}

1 ответ

Решение

latLonToEcef Метод представляет собой реализацию алгоритма, описанного в разделе Преобразование географических координат - От геодезических до координатных страниц в википедии:

геодезические к ECEF

где

Φ - широта, λ - долгота и

н-широта

Аналогично ecefToEnu Метод представляет собой реализацию алгоритма ECEF to ENU:

ЕЭК ООН в ЕНУ

Если вам нужны дополнительные ссылки, их можно найти в нижней части этой страницы Википедии. Вы также можете обратиться к спецификации World Geodetic System 1984.

Другие вопросы по тегам