10

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.

Taras
36k7 gold badges77 silver badges153 bronze badges
asked Dec 3, 2010 at 22:23
2
  • 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. Commented Dec 4, 2010 at 19:01
  • @whuber: These errors are tolerable. Commented Dec 4, 2010 at 19:14

1 Answer 1

18

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

answered Dec 3, 2010 at 22:34
7
  • 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. Commented Dec 3, 2010 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. Commented Dec 4, 2010 at 0:53
  • @scw: good call, and done. Commented Dec 4, 2010 at 5:07
  • 2
    @Dan On a spherical earth, 'rho' is another name for radius of the earth PLUS altitude, not the altitude alone. Commented Dec 4, 2010 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? Commented Dec 7, 2010 at 17:43

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.