高斯投影反算

# coding=utf-8
import math

"""2000国家大地坐标系(cgcs2000)椭球常数"""  
a = 6378137.0  # 椭球长半轴
b = 6356752.31414036  # 椭球短半轴
f = 1.0 / 298.257222101  # 椭球扁率
e1 = 0.0066943800229  # 椭球第一偏心率 e^2
ee = 0.00673949677548  # 椭球第二偏心率 e`^2
c = 6399593.62586  # 极点子午圈曲率半径

def xytoBl():
    m0 = a * (1 - e1)
    m2 = 1.5 * e1 * m0
    m4 = 5.0 / 4.0 * e1 * m2
    m6 = 7.0 / 6.0 * e1 * m4
    m8 = 9.0 / 8.0 * e1 * m6

    a0 = m0 + 0.5 * m2 + 3.0 / 8.0 * m4 + 5.0 / 16.0 * m6 + 35.0 / 128.0 * m8
    a2 = 0.5 * m2 + 0.5 * m4 + 15.0 / 32.0 * m6 + 7.0 / 16.0 * m8
    a4 = 1.0 / 8.0 * m4 + 3.0 / 16.0 * m6 + 7.0 / 32.0 * m8
    a6 = 1.0 / 32.0 * m6 + 1.0 / 16.0 * m8
    a8 = 1.0 / 128.0 * m8

    X = float(input("请输入x坐标值:"))
    Y = float(input("请输入y坐标值:")) - 36000000 - 500000
    l0 = float(input("请输入中央子午线:")) / 180.0 * math.pi

# 迭代求取低点纬度
    B = [0] * 20
    f = [0] * 20
    B[0] = float(X) / a0
    f[0] = -(a2 / 2.0 * math.sin(2 * B[0]) + a4 / 4.0 * math.sin(4.0 * B[0]) - a6 / 6.0 * math.sin(
        6.0 * B[0]) + a8 / 8.0 * math.sin(8.0 * B[0]))
    deltad = B[1] - B[0]
    for i in range(10):
        f[i] = -(a2 / 2.0 * math.sin(2 * B[i]) + a4 / 4.0 * math.sin(4.0 * B[i]) - a6 / 6.0 * math.sin(
            6.0 * B[i]) + a8 / 8.0 * math.sin(8.0 * B[i]))
        B[i + 1] = (X - f[i]) / a0
        deltad = B[i + 1] - B[i]
        if deltad < pow(10, -10):
            i += 1
            break

    """参数"""
    tf = math.tan(B[i])
    mf = c / pow(math.sqrt(1 + ee * pow(math.cos(B[i]), 2)), 3)
    nf = c / math.sqrt(1 + ee * pow(math.cos(B[i]), 2))
    n = math.sqrt(ee) * math.cos(B[i])

    # longitude纬度计算公式
    latitude = B[i] - (tf / (2.0 * mf) * Y * (Y / nf)) * (1.0 - (1.0 / 12.0) * (
            5.0 + 3.0 * pow(tf, 2) + pow(n, 2) - 9.0 * pow(n, 2) * pow(tf, 2)) *
                                                          pow(Y / nf, 2) + 1.0 / 360.0 * (
                                                                  61.0 + 90.0 * pow(tf, 2) + 45.0 * pow(tf, 4)) *
                                                          pow(Y / nf, 4))
    # longitude 纬度计算公式
    longitude = 1.0 / math.cos(B[i]) * (Y / nf) * (
            1.0 - 1.0 / 6.0 * (1.0 + 2.0 * pow(tf, 2) + pow(n, 2)) * pow(Y / nf, 2) + 1.0 / 120.0 * (
            5.0 + 28.0 * pow(tf, 2) + 24.0 * pow(tf, 4) + 6.0 * pow(n, 2) + 8.0 * pow(n, 2) * pow(tf, 2)) * pow(Y / nf,
                                                                                                                4))

    # 将经纬度的弧度转换为度
    lat = latitude * 180 / 3.14159265358979
    long = (longitude + l0) * 180 / 3.14159265358979

    return lat, long

2000坐标系高斯反算;

计算过程中的角度均为弧度;

最后将弧度转换为角度, 角度 = 弧度 *  180 / pi

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高斯投影反算公式是测量地球表面上两点间距离和方位角的重要工具,它是通过高斯投影正算公式的逆推方法得出的。在进行GPS测量、地图制作、地球物理勘探等各种地学领域研究中,需要使用高斯投影反算公式去计算地球上两点的距离、方位角等参数。 首先,需要明确高斯投影正算公式和反算公式中所涉及的各个参数和符号的含义。高斯投影正算公式通常用于将地球表面上的三维坐标点转换为具有平面坐标的投影坐标点,而高斯投影反算公式则是将投影坐标点转换为地球表面上的三维坐标点。 在高斯投影反算公式中,需要提供的输入参数包括已知的坐标系的中央经线、投影坐标的东、北坐标值、以及该地区的椭球体参数。输出参数则包括计算得出的该点的经度和纬度坐标值、以及该点与某一起始点的方位角和距离。对于反算公式,通过利用相关数学公式的推导,采用迭代法或牛顿迭代法等方法进行计算即可。 在csdn等网站上,有很多关于高斯投影反算公式的教程和代码案例,需要仔细的查找和借鉴。为了提升计算精度,必须要注意一些细节问题,比如精度控制、计算方法、程序优化等等。总之,高斯投影反算公式在地学领域中具有广泛的应用,熟练掌握该公式的理论原理和实际运用技能将有助于提升地学研究工作的效率和精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值