首先,你要确定椭球参数:
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);
}
分享到:
相关推荐
高斯坐标正算涉及到将地理坐标(经度λ、纬度φ)转换为平面坐标(X、Y)。正算公式如下: 1. 首先确定所在的高斯投影带,一般以中央经线λ0作为分界,例如中国常用的是3°带。 2. 计算投影带内的投影经度λ' = λ ...
这个“C#实现高斯正反算”项目显然是一个利用C#编程语言来实现高斯投影的计算过程,包括正算和反算两个部分。下面我们将深入探讨这两个概念以及它们在实际应用中的重要性。 **高斯投影正算**是将地理坐标(经度L和...
"C#高斯正算"是一个程序,它实现了将全球定位系统(GPS)所使用的WGS84坐标系中的坐标,转换为适用于地面测量的高斯平面坐标系。这个程序对于那些需要在地面上精确定位、绘制地图或进行测量工作的专业人员来说,是...
本程序“高斯正反算(C#实现)”专注于解决这一问题,它能帮助用户在不同的坐标系统之间进行坐标转换。以下是对这个程序及其相关知识点的详细解释。 1. **高斯投影**: 高斯投影,也称为横轴椭圆柱投影,是由德国...
展示文章及源码链接:https://blog.csdn.net/Zj1638/article/details/125380593 通过实习指导书的公式,利用c#进行window窗体应用编写,可以实现大地坐标与高斯坐标的相互转换。
本项目是一个用C#编程语言实现的高斯投影正反算公式程序,可以帮助我们理解和应用这个关键的大地测量技术。 首先,我们要理解高斯投影的基本原理。高斯投影将地球表面的经纬度转换为平面坐标,通过一个椭圆柱面与...
高斯投影坐标正反算及换带计算
4. **高斯反算**:反算则是从投影坐标返回到大地坐标。这个过程通常需要解决非线性方程,因此可能需要用到迭代算法。反算过程中,会用到正算的逆运算,结合已知的投影坐标和投影参数来计算出对应的经纬度。 5. **C#...
高斯投影是一种在地图制作中广泛应用的投影方法,...总的来说,C#中的高斯投影正反算代码是GIS开发中的重要工具,它允许开发人员将地球表面的位置精确地表示在平面上,从而在各种地理应用中保持数据的准确性和一致性。
在这个C#程序中,我们将探讨如何在C#环境中实现高斯函数,并理解其背后的数学原理。 高斯函数,通常表示为f(x) = (1 / (σ * √(2π))) * e^(-(x - μ)^2 / (2σ^2)),是一个连续概率分布,其中μ是平均值,σ是...
高斯反算则是相反的过程,从平面坐标推导出大地坐标。 C#作为.NET框架下的编程语言,拥有丰富的类库支持,可以方便地进行数值计算和图形界面开发。本程序很可能使用了System.Drawing和System.Windows.Forms等库来...
本文将详细介绍如何使用C#语言进行高斯投影的正算,即由大地坐标转换为高斯平面坐标的过程。 高斯投影,也称为克吕格投影,是一种等角横轴椭圆柱投影,它能够保持经线和纬线的局部角度不变,适用于大比例尺的区域...
在C#中,可以使用System.Drawing或AForge.NET等库来实现高斯模糊。例如,`GaussianBlur.cs`可能包含一个实现了高斯模糊算法的类,它提供了一个或多个方法来处理图像。这些方法可能会接受图像对象、高斯核大小和标准...
标题"高斯投影正反算(c#编写)"指的是使用C#编程语言实现的高斯投影算法,包括正算和反算两个部分。正算是指将地理坐标(经度和纬度)转换为投影坐标(x和y),反算是将投影坐标转换回地理坐标的过程。这两种计算对于...
CGCS2000坐标系高斯投影正反算,基于文件操作,批量处理,精度0.0001。软件基础框架来自氧气女神。
高斯正反算通常指的是高斯投影的正算和反算,这是一种将地球表面的经纬度转换为平面坐标的方法,由德国数学家卡尔·弗里德里希·高斯提出。 高斯投影是一种等角投影,它保持了角度的准确性,但无法同时保持面积和...
高斯正算指的是从经纬度坐标到投影坐标的过程,而高斯反算则是反过来,从投影坐标回推到经纬度坐标。 在C#编程环境下实现高斯正反算,通常会涉及到以下几个关键知识点: 1. **坐标系统**:理解WGS84、UTM(通用...
在压缩包"高斯投影坐标正反算(C#)"中,可能包含实现了这些算法的C#源代码文件。通过阅读和学习这些代码,你可以直观地了解高斯投影的具体实现细节,并且可以作为自己项目的起点,根据实际需求进行修改和扩展。此外...
- **高斯反算**:相反的过程,即从直角坐标恢复到大地坐标。这通常涉及到解决复杂的数学问题,因为投影会引入一定的误差。 在C#中,我们可以利用数学库和自定义算法来实现这两种计算。`坐标转换`文件可能包含实现...
本话题主要探讨了如何使用C#编程语言实现高斯滤波和均值滤波这两种常见的滤波方法,以及如何借助MathNet库对数据进行高斯平滑处理。下面将详细介绍这两个滤波方法以及MathNet库的相关应用。 一、均值滤波 均值滤波...