大地坐标系和空间直角坐标系的转换

Posted dasheng-maritime

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大地坐标系和空间直角坐标系的转换相关的知识,希望对你有一定的参考价值。

大地坐标系转空间直角坐标系

import math
A_ALIS = 6378137
B_ALIS = 6356752.3142

E = math.sqrt(A_ALIS * A_ALIS - B_ALIS * B_ALIS) / A_ALIS

def transform_latlonhei2xyz(lon, lat, h):
    """ 大地坐标系 转 空间直角坐标系 """
    lon, lat, h = math.radians(float(lon)), math.radians(float(lat)), float(h)

    W = math.sqrt(1 - E * E * math.sin(lat) * math.sin(lat))
    N = A_ALIS / W

    x = (N + h) * math.cos(lat) * math.cos(lon)
    y = (N + h) * math.cos(lat) * math.sin(lon)
    z = (N * (1 - E * E) + h) * math.sin(lat)

    return x, y, z

print(transform_dadi2zhijiao(lon=121.4533008922, lat=31.1720088176, h=15.069))
# (-2850172.518796192, 4659579.331978275, 3282233.397176004)

  空间直角坐标系转大地坐标系

import math
A_ALIS = 6378137
B_ALIS = 6356752.3142
E2 = (A_ALIS * A_ALIS - B_ALIS * B_ALIS) / (B_ALIS * B_ALIS)
def transform_xyz2latlonhei(x, y, z):
    """空间直角坐标系转大地坐标系 """
lon = math.degrees(math.atan2(y, x))

S = math.atan2(z * A_ALIS, math.sqrt(x * x + y * y) * B_ALIS)

lat = math.atan2(z + E2 * B_ALIS * math.pow(math.sin(S), 3),
(math.sqrt(x * x + y * y) - E * E * A_ALIS * math.pow(math.cos(S), 3)))

W = math.sqrt(1 - E * E * math.sin(lat) * math.sin(lat))
N = A_ALIS / W
hei = math.sqrt(x * x + y * y) / math.cos(lat) - N

lat = math.degrees(lat)
return lon, lat, hei
print(transform_zhijiao2dadi(x=-2850172.518796192, y=4659579.331978275, z=3282233.397176004)) 
#(121.4533008922, 31.1720088176, 15.06900000013411)

  

以上是关于大地坐标系和空间直角坐标系的转换的主要内容,如果未能解决你的问题,请参考以下文章

将经纬度坐标转化为xy坐标有啥好处

如何将WGS84坐标转换成经纬度坐标

同一点84坐标系下的经纬度怎么转换为54坐标系下经纬度

坐标转换经纬度

OpenGL入门(四)-- OpenGL坐标系与坐标变换

地理坐标系和球面极坐标系的区别和联系