zoukankan      html  css  js  c++  java
  • 大地坐标系和空间直角坐标系的转换

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

    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_latlonhei2xyz(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_xyz2lonlathei(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_xyz2lonlathei(x=-2850172.518796192, y=4659579.331978275, z=3282233.397176004))
    #(121.4533008922, 31.1720088176, 15.06900000013411)
  • 相关阅读:
    远程控制.scrcpy&其他资料&我的游戏辅助方案
    虚拟机.第三方.droid4x(海马玩)
    私.微信
    私.Modbus测试_ZC03_rtu,ascii,tcp
    Modbus资料
    私.Modbus测试_ZC02_串口方式
    私.Modbus测试_ZC01_TCP方式
    私.01.serialport
    C# Type Basics
    NORFLASH驱动详细说明
  • 原文地址:https://www.cnblogs.com/dasheng-maritime/p/12498146.html
Copyright © 2011-2022 走看看