Мне интересно узнать о преобразовании значений 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-система, в которой изменяется только одно из значений, когда я уменьшаю / увеличиваю свое значение высоты?
Большое спасибо!