2013-05-17 159 views
5

我想知道從Lat,Lon,Alt值到ECEF(地球居中)等3D系統的轉換。經度,緯度,海拔高度到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系統,其中只有一個值正在改變?

非常感謝!

回答

3

如果你看一下這樣的畫面:ECEF Coordinate System

那麼你知道爲什麼。 ECEF是地球周圍的立方體,以地心爲中心。如果高度提高,你搬出去。 Lat/lon是一個「角」座標系,其中lat,lon是角度, ECEF是一個cartesian座標系!

你很喜歡ECEF,就像LatLon一樣,中心地球的高度爲0,但事實並非如此。

+0

啊,這正是我所尋找的;) – Frame91