2 chenyang373 chenyang373 于 2016.03.04 18:03 提问

高斯投影正算关于修改椭球参数的问题
    下面是高斯正算的代码,可以实现BL到54的转换,没有问题,我现在要实现BL到80的转换,我应该怎么改椭球参数呢?

            const double PI = Math.PI; //定义圆周率
    const double rho = 206264.806247096355;
    /// <summary>
    /// 高斯正算
    /// </summary>
    /// <param name="B">纬度(度)</param>
    /// <param name="L">经度(度)</param>
    /// <param name="num">带号</param>
    public double[] CalculateEllipse2plane(double B,double L,double num)
    {
        AngleCalculate ac = new AngleCalculate(); //用于角度弧度转换

        double l,L0,a0,a3,a4,a5,a6,n,c;
        l = 0;L0 = 0;a0 = 0;a3 = 0;a4 = 0;a5 = 0;a6 = 0;n = 0;c = 0;
        double x,y;
        x = 0;y = 0;
        double m, p;
        m = 0;p = 0;
        int N;//带号
        N = 0;
        //判断带号
        if(num == 6)
        {
            N = (int)L/6;//带号
            L0 = 6*N-3;//中央子午线
        }
        else
        {
            N = (int)((L+1.5)/3); //3度带号
            L0 = 3*N;//3度中央子午线
        }

        bool sign = true;

        l = (L - L0) * 3600/rho; //单位秒

        if (l < 0) sign = false;

        B = ac.AngleToArc(B);//将纬度化为弧度
        L = ac.AngleToArc(L);//将经度化为弧度
        L0 = ac.AngleToArc(L0);//将中央子午线转为弧度

        l = Math.Pow(l,2);
        c = Math.Pow(Math.Cos(B),2); //Cos(B)的平方
        //n = 6399596.651988010- (21562.267 - (108.973 - 0.612 * c) * c) * c;
        n = 6399698.902-(21562.267-(108.973-0.612 * c)*c)*c;
        a0 = 32140.404-(135.3302-(0.7092-0.0040*c)*c)*c; 
        a3 =(0.3333333+0.001123*c)*c-0.1666667;
        a4 = (0.25+0.00252*c)*c-0.04166;
        a5=0.0083-(0.1667-(0.1968+0.004*c)*c)*c;
        a6=(0.166*c-0.084)*c; 
        //计算平面坐标并化为国家统一坐标
        m=Math.Sin(B)*Math.Cos(B);
        p = 1+(a3+a5*l)*l;
        x=6367558.4969*B-(a0-(0.5+(a4+a6*l)*l)*l*n)*m;
        y=(p)*Math.Sqrt(l)*n*Math.Cos(B);

        if (sign)
        {
            y = y + 500000 + N * 1000000; //加上常数改正,和带号
        }
        else
        {
            y =  (500000 - y) + N * 1000000; //加上常数改正,和带号
        }

        double[] CalculateResult = new double[2];
        CalculateResult[0] = x;
        CalculateResult[1] = y;

        return CalculateResult;
    }

1个回答

caozhy
caozhy   Ds   Rxr 2016.03.06 08:08
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
高斯投影正反算的代码
  2008-05-28 16:03:29 | 高斯投影正反算的代码 //高斯投影正、反算 //////6度带宽 54年北京坐标系 //高斯投影由经纬度(UnitD)反算大地坐标(含带号,Unit:Metres) void GaussProjCal(double longitude, double latitude, double *X, doubl
高斯投影正算matlab代码
matlab编写的高斯投影正算代码. 以经度和纬度为输入,在代码中修改中央子午线的数值和选用的坐标系信息,即可得到相应的高斯投影平面坐标. 已实测可用.
高斯投影正、反算 代码
//高斯投影正、反算 //////6度带宽 54年北京坐标系 //高斯投影由经纬度(Unit:DD)反算大地坐标(含带号,Unit:Metres) void GaussProjCal(double longitude, double latitude, doubl
C#实现批量高斯投影正算、反算
​欢迎关注博主的微信公众号:跟着MO学习GIS 批量计算有利于提高工作/学习效率,本文以EPSG提供《Coordinate Conversions and Transformations including Formulas》 的高斯投影正算、反算算法写成c#代码为例。。 // 高斯投影反算,将高斯坐标反算出经纬度坐标 class Gausstojw {
高斯投影坐标正反算公式
§8.3高斯投影坐标正反算公式 任何一种投影①坐标对应关系是最主要的;②如果是正形投影,除了满足正形投影的条件外(C-R偏微分方程),还有它本身的特殊条件。 8.3.1高斯投影坐标正算公式:  高斯投影必须满足以下三个条件: ①中央子午线投影后为直线;②中央子午线投影后长度不变;③投影具有正形性质,即正形投影条件。 由第一条件知中央子午线东西两侧的投影必然对称于中央子午线,即(8-1
高斯投影坐标转换的正算java代码
高斯投影坐标转换的正算java代码
高斯投影正反算C++源代码
////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// const double FN = 0.;//南半球FN = 1000000. const double k0 = 1.;//UTM投影中k0=0.9996 gs::gs() { } gs::~gs() { } //初始化坐标系统,并告诉程序您要使用的是3度带还是6度带 void gs::InitCordSys(enum gs::CordParam cord,enum gs::ProjKind projKind) { switch(cord){ case BeiJing1954: { m_a = 6378245.; m_b = 6356863.0188; } break; case XiAn1980: { m_a = 6378140.; m_b = 6356755.2882; } break; case WGS84: { m_a = 6378137.; m_b = 6356752.3142; } break; }
高斯投影正反算c语言程序
大地测量学高斯投影坐标正反算的c语言代码,简单适合初学者
高斯投影正反算公式
网上充斥着高斯投影或高斯-克吕格投影正反算公式,还搞什么泰勒级数展开,确定参数,又讲不明白,搞得人晕头转向,其实这个问题没那么复杂!
高斯正反算(C#实现)
该程序提供了在不同坐标系统下进行高斯正算和反算的功能,用C#编码,代码简洁,界面漂亮。