2013-05-17 10 views
5

Mi chiedo sulla trasformazione da Lat, Lon, Alt Values ​​a 3D-Systems come ECEF (Earth-Centered).Longitudine, latitudine, altitudine a 3D-Sistema di coordinate cartesiane

Ciò può essere implementato come segue (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); 
} 

Che a mio parere sembra molto strano è il fatto, che un piccolo cambiamento di altitudine, colpisce x, y, z, dove avrei aspettati che incida solo su un asse. Ad esempio, se ho due punti GPS, che hanno gli stessi valori lat/lon ma diversi valori di altitudine, otterrò 3 diverse coordinate x, y, z.

Qualcuno può spiegare l'idea dietro questo? Questo mi sembra molto curioso ... Esiste un altro sistema 3D, in cui solo uno dei valori sta cambiando, quando ho più o meno alto il mio valore di altitudine?

Grazie mille!

risposta

3

Se si guarda a questa immagine: ECEF Coordinate System

poi si vede il motivo. ECEF è un cubo intorno alla terra, centrato nel centro della Terra. se l'altitudine aumenta, ti muovi. Lat/lon è un sistema di coordinate "angolare" in cui lat, lon sono angoli, ECEF è un sistema di coordinate cartesian!

Probaly you thtgt ECEF è come LatLon con terra centrale ha un'altitudine 0, ma non è questo il caso.

+0

ah, questo è esattamente quello che stavo cercando;) – Frame91

Problemi correlati