Преобразование широты и долготы в точку в трехмерном пространстве

Мне нужно преобразовать значения широты и долготы в точку в трехмерном пространстве. Я пытался сделать это около 2 часов, но я не получил правильных результатов.

Equirectangular координаты приходят изopenflights.org, Я пробовал несколько комбинацийcos а такжеsin, но результат никогда не был похож на нашу маленькую любимую землю.

Далее вы можете увидеть результат применения конверсииВикипедия предлагает. Я думаю, из контекста можно догадаться, чтоc4d.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>

enter image description here

Red: X, Green: Y, Blue: Z

Можно действительно идентифицировать Северную и Южную Америку, особенно землю вокруг Мексиканского залива. Тем не менее, это выглядит несколько раздавленным и вроде не в том месте ..

Поскольку результат выглядит несколько повернутым, я думаю, что я попытался поменять местами широту и долготу. Но этот результат несколько неловкий.

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

enter image description here

Вот как выглядит результат без преобразования значений.

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

enter image description here

Question: Как правильно преобразовать долготу и широту?

Solution

Благодаря TreyA я нашелэтот страница на mathworks.com. Код, который выполняет эту работу, является следующим:

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

На самом деле я перешелy а такжеz потому что земля была повернута, однако, это работает! Это результат:

enter image description here

Ответы на вопрос(3)

Ваш ответ на вопрос