高斯坐标和地理坐标的转换代码

这篇博客记录了在项目中实现高斯坐标与地理坐标转换的过程,提供了两种C++实现方式。代码1来源于Java并进行了修改,而代码2由于参数限制,适用于精度和范围要求不高的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于项目需要,了解了关于高斯坐标和地理坐标的相关知识,当然也只是略懂,因为需要在代码中实现,因此也在网上搜索了相关资料,在此记录一下

这里一共两份高斯坐标与地理坐标转换的代码,各有优缺点


代码1

这原本是java代码,我略微修改了一下变成C++代码了

// 高斯坐标和地理坐标的相互转换
class Convertor {
public:

    ~Convertor() {}

    double a;//'椭球体长半轴
    double b;// '椭球体短半轴
    double f; //'扁率
    double e;// '第一偏心率
    double e1; //'第二偏心率
    double FE;//'东偏移
    double FN;//'北偏移
    double L0;//'中央经度
    double W0;//'原点纬线
    double k0;//'比例因子
    /**
     * 幂函数
     * @param e
     * @param i
     * @return
     */
    double MZ(double e, int i) {
        return pow(e, i);
    }

    /**
     * 说明: 用于初始化转换参数
     *
     * @param TuoqiuCanshu    枚举类型,提供北京54、西安80和WGS84三个椭球参数
     * @param CentralMeridian 中央经线
     * @param OriginLatitude  原点纬度,如果是标准的分幅,则该参数是0
     * @param EastOffset      东偏移
     * @param NorthOffset     北偏移
     */
    Convertor(int TuoqiuCanshu, double CentralMeridian, double OriginLatitude, double EastOffset, double NorthOffset) {
        /**
         * 'Krassovsky (北京54采用) 6378245 6356863.0188
         * 'IAG 75(西安80采用) 6378140 6356755.2882
         * 'WGS 84 6378137 6356752.3142
         * 'CGC 2000 6378137 6356752.31414
         */
        if (TuoqiuCanshu == 0)//北京五四
        {
            a = 6378245;
            b = 6356863.0188;
        }
        else if (TuoqiuCanshu == 1)// '西安八零
        {
            a = 6378140;
            b = 6356755.2882;
        }
        if (TuoqiuCanshu == 2)//'WGS84
        {
            a = 6378137;
            b = 6356752.3142;
        }
        if (TuoqiuCanshu == 3)//'CGC2000坐标
        {
            a = 6378137;
            b = 6356752.31414;
        }
        f = (a - b) / a;//扁率
        //e = sqrt(1 - MZ((b / a) ,2));//'第一偏心率
        e = sqrt(2 * f - MZ(f, 2));//'第一偏心率
        //eq = sqrt(MZ((a / b) , 2) - 1);//'第二偏心率
        e1 = e / sqrt(1 - MZ(e, 2));//'第二偏心率
        L0 = CentralMeridian;//中央经
        W0 = OriginLatitude;//原点纬线
        k0 = 1;//'比例因
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值