`

C# 高斯正算 高斯反算 高斯换带等

    博客分类:
  • C#
 
阅读更多

首先,你要确定椭球参数:

a = 6378140;  //西安80椭球 IGA75
e2 = 0.006694384999588;
m0 = a * (1 - e2);
m2 = 3.0 / 2 * e2 * m0;
m4 = 5.0 / 4 * e2 * m2;
m6 = 7.0 / 6 * e2 * m4;
m8 = 9.0 / 8 * e2 * m6;
a0 = m0 + m2 / 2 + (3.0 / 8.0) * m4 + (5.0 / 16.0) * m6 + (35.0 / 128.0) * m8;
a2 = m2 / 2 + m4 / 2 + 15.0 / 32 * m6 + 7.0 / 16 * m8;
a4 = m4 / 8 + 3.0 / 16 * m6 + 7.0 / 32 * m8;
a6 = m6 / 32 + m8 / 16;
a8 = m8 / 128;
xx = 0;
yy = 0;
_x = 0;
_y = 0;
BB = 0;
LL = 0;

 下面才开始正题:

 高斯正算:把经纬度坐标转换为平面坐标

 

        void GaussPositive(double B, double L, double L0)
        {
            double X, t, N, h2, l, m, Bmiao, Lmiao;
            int Bdu, Bfen, Ldu, Lfen;
            Bdu = (int)B;
            Bfen = (int)(B * 100) % 100;
            Bmiao = (B - Bdu - Bfen * 0.01) * 10000.0;
            B = Bdu * PI / 180.0 + (Bfen / 60.0) * PI / 180.0 + Bmiao / 3600.0 * PI / 180.0;
            Ldu = (int)L;
            Lfen = (int)(L * 100) % 100;
            Lmiao = (L - Ldu - Lfen * 0.01) * 10000.0;
            L = Ldu * PI / 180.0 + (Lfen / 60.0) * PI / 180 + Lmiao / 3600.0 * PI / 180.0;
            l = L - L0 * PI / 180;
            X = a0 * B - Math.Sin(B) * Math.Cos(B) * ((a2 - a4 + a6) + (2 * a4 - 16.0 / 3.0 * a6) * Math.Sin(B) * Math.Sin(B) + 16.0 / 3.0 * a6 * Math.Pow(Math.Sin(B), 4)) + a8 / 8.0 * Math.Sin(8 * B);
            t = Math.Tan(B);
            h2 = e2 / (1 - e2) * Math.Cos(B) * Math.Cos(B);
            N = a / Math.Sqrt(1 - e2 * Math.Sin(B) * Math.Sin(B));
            m = Math.Cos(B) * l;
            xx = X + N * t * ((0.5 + (1.0 / 24.0 * (5 - t * t + 9 * h2 + 4 * h2 * h2) + 1.0 / 720.0 * (61 - 58 * t * t + Math.Pow(t, 4)) * m * m) * m * m) * m * m);
            yy = N * ((1 + (1.0 / 6.0 * (1 - t * t + h2) + 1.0 / 120.0 * (5 - 18 * t * t + Math.Pow(t, 4) + 14 * h2 - 58 * h2 * t * t) * m * m) * m * m) * m);
            yy = yy + 500000;
        }

    高斯反算:把平面坐标转换为经纬度坐标:

   

         void GaussNegative(double x, double y, double L0)
        {
            double Bf, Vf, l, tf, hf2, Nf, Bmiao, Lmiao;
            int Bdu, Bfen, Ldu, Lfen;
            y = y - 500000;
            Bf = hcfansuan(x);
            Vf = Math.Sqrt(1 + e2 / (1 - e2) * Math.Cos(Bf) * Math.Cos(Bf));
            tf = Math.Tan(Bf);
            hf2 = e2 / (1 - e2) * Math.Cos(Bf) * Math.Cos(Bf);
            Nf = a / Math.Sqrt(1 - e2 * Math.Sin(Bf) * Math.Sin(Bf));
            BB = (Bf - 0.5 * Vf * Vf * tf * (Math.Pow(y / Nf, 2) - 1.0 / 12 * (5 + 3 * tf * tf + hf2 - 9 * hf2 * tf * tf) * Math.Pow(y / Nf, 4) + 1.0 / 360 * (61 + 90 * tf * tf + 45 * tf * tf) * Math.Pow(y / Nf, 6))) * 180 / PI;
            Bdu = (int)BB;
            Bfen = (int)((BB - Bdu) * 60);
            Bmiao = ((BB - Bdu) * 60 - Bfen) * 60;
            BB = Bdu + 0.01 * Bfen + 0.0001 * Bmiao;
            l = 1.0 / Math.Cos(Bf) * (y / Nf - 1.0 / 6.0 * (1 + 2 * tf * tf + hf2) * Math.Pow(y / Nf, 3) + 1.0 / 120.0 * (5 + 28 * tf * tf + 24 * Math.Pow(tf, 4) + 6 * hf2 + 8 * hf2 * tf * tf) * Math.Pow(y / Nf, 5)) * 180.0 / PI;
            LL = L0 + l;
            Ldu = (int)LL;
            Lfen = (int)((LL - Ldu) * 60);
            Lmiao = ((LL - Ldu) * 60 - Lfen) * 60;
            LL = Ldu + 0.01 * Lfen + 0.0001 * Lmiao;
        }

   里面涉及到的弧长反算:

  

        double hcfansuan(double pX)
        {
            double Bf0 = pX / a0;
            double Bf1, Bf2;
            Bf1 = Bf0;
            Bf2 = (pX - F(Bf1)) / a0;
            while ((Bf2 - Bf1) > 1.0E-11)
            {
                Bf1 = Bf2;
                Bf2 = (pX - F(Bf1)) / a0;
            }
            return Bf1;
        }

    高斯换带就比较简单了:

   

        void GaussZone(double x, double y, double L0, double L0new)
        {
            GaussNegative(x, y, L0);
            GaussPositive(BB, LL, L0new);
        }

 

分享到:
评论

相关推荐

    C#实现高斯正反算

    这个“C#实现高斯正反算”项目显然是一个利用C#编程语言来实现高斯投影的计算过程,包括正算和反算两个部分。下面我们将深入探讨这两个概念以及它们在实际应用中的重要性。 **高斯投影正算**是将地理坐标(经度L和...

    c#高斯正算

    "C#高斯正算"是一个程序,它实现了将全球定位系统(GPS)所使用的WGS84坐标系中的坐标,转换为适用于地面测量的高斯平面坐标系。这个程序对于那些需要在地面上精确定位、绘制地图或进行测量工作的专业人员来说,是...

    利用C#编写一个高斯正反算程序

    展示文章及源码链接:https://blog.csdn.net/Zj1638/article/details/125380593 通过实习指导书的公式,利用c#进行window窗体应用编写,可以实现大地坐标与高斯坐标的相互转换。

    C#实现高斯坐标正反算

    高斯坐标正算涉及到将地理坐标(经度λ、纬度φ)转换为平面坐标(X、Y)。正算公式如下: 1. 首先确定所在的高斯投影带,一般以中央经线λ0作为分界,例如中国常用的是3°带。 2. 计算投影带内的投影经度λ' = λ ...

    C# -大地测量学-高斯投影正反算公式程序

    本项目是一个用C#编程语言实现的高斯投影正反算公式程序,可以帮助我们理解和应用这个关键的大地测量技术。 首先,我们要理解高斯投影的基本原理。高斯投影将地球表面的经纬度转换为平面坐标,通过一个椭圆柱面与...

    C# 高斯正反算,坐标转换源代码,(WGS84,西安80,北京54)

    4. **高斯反算**:反算则是从投影坐标返回到大地坐标。这个过程通常需要解决非线性方程,因此可能需要用到迭代算法。反算过程中,会用到正算的逆运算,结合已知的投影坐标和投影参数来计算出对应的经纬度。 5. **C#...

    高斯投影坐标正反算及换带计算

    高斯投影坐标正反算及换带计算

    高斯正反算(C#实现)

    本程序“高斯正反算(C#实现)”专注于解决这一问题,它能帮助用户在不同的坐标系统之间进行坐标转换。以下是对这个程序及其相关知识点的详细解释。 1. **高斯投影**: 高斯投影,也称为横轴椭圆柱投影,是由德国...

    高斯投影的正反算C#代码

    高斯投影是一种在地图制作中广泛应用的投影方法,...总的来说,C#中的高斯投影正反算代码是GIS开发中的重要工具,它允许开发人员将地球表面的位置精确地表示在平面上,从而在各种地理应用中保持数据的准确性和一致性。

    C# 高斯函数 程序

    在这个C#程序中,我们将探讨如何在C#环境中实现高斯函数,并理解其背后的数学原理。 高斯函数,通常表示为f(x) = (1 / (σ * √(2π))) * e^(-(x - μ)^2 / (2σ^2)),是一个连续概率分布,其中μ是平均值,σ是...

    高斯正反算程序(窗体程序,附计算实例)

    高斯反算则是相反的过程,从平面坐标推导出大地坐标。 C#作为.NET框架下的编程语言,拥有丰富的类库支持,可以方便地进行数值计算和图形界面开发。本程序很可能使用了System.Drawing和System.Windows.Forms等库来...

    高斯投影坐标转换C#(正算)

    本文将详细介绍如何使用C#语言进行高斯投影的正算,即由大地坐标转换为高斯平面坐标的过程。 高斯投影,也称为克吕格投影,是一种等角横轴椭圆柱投影,它能够保持经线和纬线的局部角度不变,适用于大比例尺的区域...

    高斯投影正反算(c#编写)

    标题"高斯投影正反算(c#编写)"指的是使用C#编程语言实现的高斯投影算法,包括正算和反算两个部分。正算是指将地理坐标(经度和纬度)转换为投影坐标(x和y),反算是将投影坐标转换回地理坐标的过程。这两种计算对于...

    VB和C#的高斯正反算

    高斯正反算通常指的是高斯投影的正算和反算,这是一种将地球表面的经纬度转换为平面坐标的方法,由德国数学家卡尔·弗里德里希·高斯提出。 高斯投影是一种等角投影,它保持了角度的准确性,但无法同时保持面积和...

    高斯正反算的程序实例

    高斯正算指的是从经纬度坐标到投影坐标的过程,而高斯反算则是反过来,从投影坐标回推到经纬度坐标。 在C#编程环境下实现高斯正反算,通常会涉及到以下几个关键知识点: 1. **坐标系统**:理解WGS84、UTM(通用...

    CGCS2000高斯投影正反算

    CGCS2000坐标系高斯投影正反算,基于文件操作,批量处理,精度0.0001。软件基础框架来自氧气女神。

    高斯投影坐标正反算

    在压缩包"高斯投影坐标正反算(C#)"中,可能包含实现了这些算法的C#源代码文件。通过阅读和学习这些代码,你可以直观地了解高斯投影的具体实现细节,并且可以作为自己项目的起点,根据实际需求进行修改和扩展。此外...

    C#坐标转换(大地坐标与空间坐标互换、高斯正反算).zip

    - **高斯反算**:相反的过程,即从直角坐标恢复到大地坐标。这通常涉及到解决复杂的数学问题,因为投影会引入一定的误差。 在C#中,我们可以利用数学库和自定义算法来实现这两种计算。`坐标转换`文件可能包含实现...

    C#高斯滤波均值滤波处理

    本话题主要探讨了如何使用C#编程语言实现高斯滤波和均值滤波这两种常见的滤波方法,以及如何借助MathNet库对数据进行高斯平滑处理。下面将详细介绍这两个滤波方法以及MathNet库的相关应用。 一、均值滤波 均值滤波...

    高斯投影正反算及邻带换算

    话不多说,直接上代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;...using System.Linq;...仅为正算,正反算请联系博主,谢谢。

Global site tag (gtag.js) - Google Analytics