Convert Latitude and Longitude to point in 3D space

3d, data-conversion, latitude-longitude, math, python

Solution

As TreyA statet, `LLA to ECEF` is the solution. See http://www.mathworks.de/help/toolbox/aeroblks/llatoecefposition.html

Problem

I need to convert latitude and longitude values to a point in the 3-dimensional space. I've been trying this for about 2 hours now, but I do not get the correct results. The Equirectangular coordinates come from openflights.org. I've tried several combinations of cos and sin, but the result did never look like our little beloved earth. In the following, you can see the result of applying the conversion Wikipedia suggests. I think one can guess from context what `c4d.Vector` is. ``` def llarToWorld(latit, longit, altid, rad): x = math.sin(longit) * math.cos(latit) z = math.sin(longit) * math.sin(latit) y = math.cos(longit) v = c4d.Vector(x, y, z) v = v * altid + v * rad return v ``` Red: X, Green: Y, Blue: Z One can indeed identify North- and South America, especially the land around the Gulf of Mexico. However, it looks somewhat squished and kind of in the wrong place.. As the result looks somewhat rotated, I think, I tried swapping latitude and longitude. But that result is somewhat awkward. ``` def llarToWorld(latit, longit, altid, rad): temp = latit latit = longit longit = temp x = math.sin(longit) * math.cos(latit) z = math.sin(longit) * math.sin(latit) y = math.cos(longit) v = c4d.Vector(x, y, z) v = v * altid + v * rad return v ``` This is what the result looks like without converting the values. ``` def llarToWorld(latit, longit, altid, rad): return c4d.Vector(math.degrees(latit), math.degrees(longit), altid) ``` Question: How can I convert the longitude and latitude correctly? Solution Thanks to TreyA, I found this page on mathworks.com. The code that does it's work is the following: ``` def llarToWorld(lat, lon, alt, rad): # see: http://www.mathworks.de/help/toolbox/aeroblks/llatoecefposition.html f = 0 # flattening ls = atan((1 - f)**2 * tan(lat)) # lambda x = rad * cos(ls) * cos(lon) + alt * cos(lat) * cos(lon) y = rad * cos(ls) * sin(lon) + alt * cos(lat) * sin(lon) z = rad * sin(ls) + alt * sin(lat) return c4d.Vector(x, y, z) ``` Actually, I switched `y` and `z` because the earth was rotated then, however, it works! That's the result:

Original source