Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

On my previous question, it was advised I convert lat/lon/altitude to spherical or Cartesian coordinates. I'm not working near the poles and it would be safe to assume a spherical earth. What would be the best way to go about this with the minimal amount of operations? Would it be best to use x/y/z or phi/theta/rho? I'm working on a small microcontroller, with no hardware FPU (software FPU only!) so every cycle counts.

share|improve this question
    
Using a spherical model introduces huge errors in the Cartesian coordinates (relative to the range of topographic elevations on the earth), because the ellipsoid has about a 23 km vertical deviation from the spheroid in places. Make sure your application can tolerate such errors. –  whuber Dec 4 '10 at 19:01
    
@whuber: These errors are tolerable. –  Thomas O Dec 4 '10 at 19:14
add comment

1 Answer

Note that "Lat/Lon/Alt" is just another name for spherical coordinates, and phi/theta/rho are just another name for latitude, longitude, and altitude. :) (A minor difference: altitude is usually measured from the surface of the sphere; rho is measured from the center -- to convert, just add/subtract the radius of the sphere.)

To convert phi/theta/rho to cartesian x/y/z where (0,0,0) is the center of the earth and rho is the distance from the center:

    # python
    x = math.cos(phi) * math.cos(theta) * rho
    y = math.cos(phi) * math.sin(theta) * rho
    z = math.sin(phi) * rho # z is 'up'

(Note there's some slightly arbitrary choices here in what each axis means... you might want 'y' to point at the north pole instead of 'z', for example.)

The inverse, and a lot more information, can be found at Wikipedia: http://en.wikipedia.org/wiki/Spherical_coordinate_system

share|improve this answer
    
Quick note that (a) I obviously copy'n'pasted this from some python code I had sitting around, and (b) should have named 'alt' to be 'rho' for consistency. –  Dan S. Dec 3 '10 at 23:10
1  
you may want to edit your post for clarity instead of including it in a comment if you think it helps understanding. –  scw Dec 4 '10 at 0:53
    
@scw: good call, and done. –  Dan S. Dec 4 '10 at 5:07
    
@Dan On a spherical earth, 'rho' is another name for radius of the earth PLUS altitude, not the altitude alone. –  whuber Dec 4 '10 at 19:00
    
@whuber True, which is why I said "as measured from (0,0,0)" Think I should edit to make that more explicit? –  Dan S. Dec 7 '10 at 17:43
show 2 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.