我想知道从Lat,Lon,Alt值到ECEF(以地球为中心)等3D系统的转换。
这可以通过以下方式实现(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系统,其中只有一个值在变化吗?
非常感谢!
答案 0 :(得分:3)
如果你看这张照片:ECEF Coordinate System
然后你明白为什么。
ECEF是一个围绕地球的立方体,以地心为中心。
如果海拔升高你就会搬出去。
Lat / lon是一个“角”坐标系,其中lat,lon是角度,
ECEF是一个cartesian
坐标系!
Probaly你认为ECEF就像LatLon,中心地球的高度为0,但事实并非如此。