Converter Latitude e Longitude para apontar no espaço 3D

Eu preciso converter os valores de latitude e longitude para um ponto no espaço tridimensional. Eu tenho tentado isso por cerca de 2 horas agora, mas não obtenho os resultados corretos.

oEquirectangular coordenadas vêm deopenflights.org. Eu tentei várias combinações decos epecado, mas o resultado nunca pareceu nossa amada terra.

A seguir, você pode ver o resultado da aplicação da conversãoWikipedia sugere. Acho que se pode adivinhar do contexto o quec4d.Vector é.

<code>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
</code>

Vermelho: X, verde: Y, azul: Z

Pode-se realmente identificar as Américas do Norte e do Sul, especialmente as terras ao redor do Golfo do México. No entanto, parece um pouco esmagado e meio que no lugar errado ..

Como o resultado parece um pouco rotacionado, eu acho que tentei trocar latitude e longitude. Mas esse resultado é um pouco estranho.

<code>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
</code>

É assim que o resultado parece sem converter os valores.

<code>def llarToWorld(latit, longit, altid, rad):
    return c4d.Vector(math.degrees(latit), math.degrees(longit), altid)
</code>

Questão: Como posso converter a longitude e a latitude corretamente?

Solução

Graças à TreyA, encontreiisto página em mathworks.com. O código que funciona é o seguinte:

<code>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)
</code>

Na verdade, eu mudeiy ez porque a terra foi girada então, no entanto, funciona! Esse é o resultado:

questionAnswers(3)

yourAnswerToTheQuestion