基础测绘计算函数设计(坐标正反算、交会计算)

基础测绘计算函数设计

1.实验内容

1.1 坐标正反算

在这里插入图片描述

1.2 交会计算

1.2.1 角度前方交会

在这里插入图片描述

1.2.2 角度后方交会

在这里插入图片描述

1.2.3 距离交会

在这里插入图片描述

2.界面展示

2.1主界面

图飞机发觉图2

2.2 坐标正反算

在这里插入图片描述

2.3 角度前方交会

在这里插入图片描述

2.4 角度后方交会

在这里插入图片描述

2.5 距离交会

在这里插入图片描述

3.附源代码

3.1 定义表示平面坐标的类Point

 class Point
    {
            public double x, y;
            //构造函数
            public Point(double x, double y)
            {
                this.x = x; this.y = y;
            }
            public double Distance(Point p)
            {
                return Math.Sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
            }
    }

3.2 主界面

private void button1_Click(object sender, EventArgs e)
        {
            int iPos1 = comboBox1.SelectedIndex;//获得当前选中行的索引
            switch(iPos1)
            {
                case 0:
                    {
                        坐标正算 calculation1 = new 坐标正算();
                        calculation1.ShowDialog();
                        break;
                    }
                case 1:
                    {
                        坐标反算 calculation2 = new 坐标反算();
                        calculation2.ShowDialog();
                        break;
                    }
            }
            int iPos2 = comboBox2.SelectedIndex;
            switch(iPos2)
            {
                case 0:
                    {
                        角度前方交会 calulation3 = new 角度前方交会();
                        calulation3.ShowDialog();
                        break;
                    }
                case 1:
                    {
                        角度后方交会 calulation4 = new 角度后方交会();
                        calulation4.ShowDialog();
                        break;
                    }
                case 2:
                    {
                        距离交会 calulation5 = new 距离交会();
                        calulation5.ShowDialog();
                        break;
                    }
            }
        }

3.3 坐标正算

 private void button1_Click(object sender, EventArgs e)
        {
            double x1 = double.Parse(textBox1.Text);
            double y1 = double.Parse(textBox2.Text);
            double rad = double.Parse(textBox5.Text);
            double distance = double.Parse(textBox6.Text);
            textBox3.Text = Convert.ToString(x1 + Math.Cos(rad)*distance);
            textBox4.Text = Convert.ToString(y1+Math.Sin(rad)*distance);
        }

3.4 坐标反算

```csharp
private void button1_Click(object sender, EventArgs e)
        {
            double x1 = double.Parse(textBox3.Text);
            double y1 = double.Parse(textBox4.Text);
            double x2 = double.Parse(textBox5.Text);
            double y2 = double.Parse(textBox6.Text);
            Point p1 = new Point(x1, y1);
            Point p2 = new Point(x2, y2);
            textBox2.Text = Convert.ToString(p1.Distance(p2));//调用Point类中的Distance方法
            double x = x2 - x1;
            double y = y2 - y1;
            double Z =x/ y;
            double D;
            if(x>0)
            {
                if(y>0)
                {
                    D = Math.Atan(Z);
                    textBox1.Text = Convert.ToString(radtodms(D));
                }
                else
                {
                    D = Math.Atan(Z) + 2 * Math.PI;
                    textBox1.Text = Convert.ToString(radtodms(D));
                }
            }
            if(x==0)
            {
                if(y>0)
                {
                    textBox1.Text = Convert.ToString(0);
                }
                else
                {
                    D = Math.PI;
                    textBox1.Text = Convert.ToString(radtodms(D));
                }
            }
            if(x<0)
            {
                 D = Math.Atan(Z) + Math.PI;
                 textBox1.Text = Convert.ToString(D);
            }
        }

3.5 角度前方交会

private void label8_Click(object sender, EventArgs e)
        {
            double x1 = double.Parse(textBox1.Text);
            double y1 = double.Parse(textBox2.Text);
            double x2 = double.Parse(textBox4.Text);
            double y2 = double.Parse(textBox5.Text);
            double α1 = double.Parse(textBox3.Text);
            double α = radtodms(α1);
            double β1 = double.Parse(textBox6.Text);
            double β = radtodms(β1);
            double Z1 = x1 / Math.Tan(β) + x2 / Math.Tan(α) - y1 + y2;
            double D = 1 / Math.Tan(α) + 1 / Math.Tan(β);
            double Z2 = y1 / Math.Tan(β) + y2 / Math.Tan(α) + x1 - x2;
            double x3 = Z1 / D;
            double y3 = Z2 / D;
            textBox7.Text = Convert.ToString(x3);
            textBox8.Text = Convert.ToString(y3);
        }

3.6 角度后方交会

private void button1_Click(object sender, EventArgs e)
        {
            double x1 = double.Parse(x1_textBox1.Text);
            double y1 = double.Parse(y1_textBox2.Text);
            double x2 = double.Parse(x2_textBox3.Text);
            double y2 = double.Parse(y2_textBox4.Text);
            double x3 = double.Parse(x3_textBox5.Text);
            double y3 = double.Parse(y3_textBox6.Text);
            double α = double.Parse(textBox7.Text);
            double β = double.Parse(textBox8.Text);
            double γ = double.Parse(textBox9.Text);
            double A = Math.Atan((y3 - y1) / (x3 - x1)) - Math.Atan((y2 - y1) / (x2 - x1));
            double B = Math.Atan((y1 - y2) / (x1 - x2)) - Math.Atan((y3 - y2)/(x3-x2));
            double C = Math.Atan((y2 - y3) / (x2 - x3)) - Math.Atan((y1 - y3) / (x1 - x3));
            double P1 = 1 / ((1 / (Math.Tan(A))) - (1 / Math.Tan(α)));
            double P2 = 1 / ((1 / (Math.Tan(B))) - (1 / Math.Tan(β)));
            double P3 = 1 / ((1 / (Math.Tan(C))) - (1 / Math.Tan(γ)));
            double x4 = (P1 * x1 + P2 * x2 + P3 * x3) / (P1 + P2 + P3);
            double y4 = (P1 * y1 + P2 * x2 + P3 * y3) / (P1 + P2 + P3);
            x4_textBox10.Text = Convert.ToString(x4);
            y4_textBox11.Text = Convert.ToString(y4);
        }

3.7 距离交会

private void button1_Click(object sender, EventArgs e)
        {
            double x1 = double.Parse(textBox1.Text);
            double y1 = double.Parse(textBox2.Text);
            double x2 = double.Parse(textBox3.Text);
            double y2 = double.Parse(textBox4.Text);
            double Dap = double.Parse(Dap_textBox5.Text);
            double Dbp = double.Parse(Dbp_textBox6.Text);
            Point A = new Point(x1, y1);
            Point B = new Point(x2, y2);
            double Dab = A.Distance(B);
            double Za = Math.Acos((Dab * Dab + Dap * Dap - Dbp) / (2 * Dab * Dap));
            double Zb = Math.Acos((Dab * Dab + Dbp * Dbp - Dap) / (2 * Dab * Dbp));
            double Zab = Math.Atan((y2 - y1) / (x2 - x1));
            double Zap = Zab - Za;
            double Zbp = Zap + Zb;
            double xp1 = x1 + Dap * Math.Cos(Zap);
            double yp1 = y1 + Dap * Math.Sin(Zap);
            double xp2 = x2 + Dbp * Math.Cos(Zbp);
            double yp2 = y2 + Dbp * Math.Sin(Zbp);
            double xp = (xp1 + xp2) / 2;
            double yp = (yp1 + yp2) / 2;
            textBox7.Text = Convert.ToString(xp);
            textBox8.Text = Convert.ToString(yp);
        }

如有不正确之处希望各位指出,非常感谢!!!
禁止抄袭!!!

  • 23
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
高斯坐标是一种常用的地理坐标系统,用来描述地球上的点位置。高斯坐标正反是指根据已知的经纬度或者高斯投影坐标计算出相应的高斯投影坐标或者经纬度的过程。 高斯坐标是从已知的经纬度计算对应的高斯投影坐标。具体步骤如下: 1. 确定所采用的高斯投影带及其中央经线。 2. 将已知的经度转换为弧度制。 3. 根据所在的高斯投影带的参数,计算出该带的基本长度单位。通常为1米或者0.01米。 4. 计算出该点所在带的椭球体参数,并求出该带的扁率f。 5. 根据经度计算出弧度差ΔL。 6. 利用正公式,根据已知经度、纬度、中央经线和扁率f,计算出高斯投影坐标X、Y的值。 高斯坐标是从已知的高斯投影坐标计算对应的经纬度。具体步骤如下: 1. 确定所采用的高斯投影带及其中央经线。 2. 根据所在的高斯投影带的参数,计算出该带的基本长度单位。 3. 计算出该点所在带的椭球体参数,并求出该带的扁率f。 4. 根据高斯投影坐标X、Y,求出高斯投影与中央经线的距离s。 5. 根据s,用反公式计算出纬度差ΔB。 6. 根据X、Y的值和椭球体参数,利用反公式计算出经度、纬度的值。 高斯坐标正反在地理信息系统、测绘工程、导航定位等领域中广泛应用,可以实现地理数据的转换和处理。高斯坐标正反的实现可以借助编程语言,如VB、C#等,在开发过程中可以参考CSDN等源码库提供的相关资料和教程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值