5

我想知道从 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 系统,其中只有一个值发生变化?

非常感谢!

4

1 回答 1

3

如果你看这张图: ECEF坐标系

那么你明白为什么了。ECEF 是一个围绕地球的立方体,以地球中心为中心。如果海拔升高,你就搬出去。Lat/lon 是一个“角度”坐标系,其中 lat,lon 是角度,ECEF 是cartesian坐标系!

可能你认为 ECEF 就像地球中心的 LatLon 高度为 0,但事实并非如此。

于 2013-05-17T16:50:12.230 回答