Долгота, широта, высота в трехмерных декартовых системах координат

Мне интересно узнать о преобразовании значений Lat, Lon, Alt в 3D-системы, такие как ECEF (Earth-Centered).

Это можно реализовать следующим образом (https://gist.github.com/1536054):

/*
 * WGS84 ellipsoid constants Radius
 */
private static final double a = 6378137;
/*
 * eccentricity
 */
private static final double e = 8.1819190842622e-2;

private static final double asq = Math.pow(a, 2);
private static final double esq = Math.pow(e, 2);

void convert(latitude,longitude,altitude){
   double lat = Math.toRadians(latitude);
   double lon = Math.toRadians(longitude);
   double alt = altitude;

   double N = a / Math.sqrt(1 - esq * Math.pow(Math.sin(lat), 2));

   x = (N + alt) * Math.cos(lat) * Math.cos(lon);
   y = (N + alt) * Math.cos(lat) * Math.sin(lon);
   z = ((1 - esq) * N + alt) * Math.sin(lat);
}

Что на мой взгляд кажется очень странным, так это тот факт, что небольшое изменение высоты влияет на x, y и z, тогда как я ожидал, что оно влияет только на одну ось. Например, если у меня есть две точки GPS, которые имеют одинаковые значения широты и долготы, но разные значения высоты, я получу 3 разных координаты x, y, z.

Может кто-нибудь объяснить «идею», стоящую за этим? Мне это кажется очень любопытным ... Есть ли еще какая-нибудь 3D-система, в которой изменяется только одно из значений, когда я уменьшаю / увеличиваю свое значение высоты?

Большое спасибо!


person Frame91    schedule 17.05.2013    source источник


Ответы (1)


Если вы посмотрите на это изображение: Система координат ECEF

тогда вы поймете почему. ECEF - это куб вокруг Земли с центром в центре Земли. если высота повышается, вы выходите. Широта / долгота - это "угловая" система координат, где широта, долгота - углы, а ECEF - это cartesian система координат!

Возможно, вы думаете, что ECEF похож на LatLon с центром земли и высотой 0, но это не так.

person AlexWien    schedule 17.05.2013
comment
ах, это именно то, что я искал;) - person Frame91; 17.05.2013