利用C#编写一个水准测量近似平差程序

一、代码界面展示

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述整个界面主要就是就整个界面而言,其实主要使用到的控件就是Menu,tabControl,dataGridView,richtextbox。

二、代码运算结果展示

1.导入数据
这里就是把txt的数据导入到程序里,数据的来源是去峨眉山实习,测了几圈峨秀湖获得的(往返3次,一共6圈,人都麻了)。txt文件的里面的数据要和表格里面的位置对应。
手动输入数据那个比较鸡肋,就是输进去了再保存成txt,再导入,图一乐,不如直接在txt中输入。
在这里插入图片描述

在这里插入图片描述
2.参数设置
我这里直接就内置了我们实习测量时候的测站设置。限差这些可以自己修改,没啥难度(就是几个if语句)

在这里插入图片描述3.计算数据
参数设置之后计算数据
数据如果超限,会依次弹窗出来提示,因为实验的数据已经是经过修改的,所以没有弹窗提醒。
源代码中有相关的代码
在这里插入图片描述4.生成外业观测手簿
这里我就没有用表格了,因为我用datagridview也设计不来,能力有限,有兴趣你自己可以试一试。就按照手簿的样子,在richtextbox上面输出出来。大致位置是一样的,格式看着有一点点奇怪,但是绝对够看了。

在这里插入图片描述5.生成高程配赋表
这里也是用的richtextbox,一圈6km,测6次,麻了。

在这里插入图片描述6.重置
这没什么好说的了,就是把数据,界面重置了。
在这里插入图片描述7.保存
把计算出的外业观测手簿和高程配赋表导出成txt。
在这里插入图片描述

三、源代码

变量设置

namespace work
{
    
    class Shuju
    {
        public double sumh = 0, suml = 0;
        public string qhsjc;//前后视距差
        public string sjljc;//视距累积差
        public string hhmdsc;//红黑面读数差
        public string hhmgczc;//红黑面高差之差
        public string [] dh;//点号
        public string [] czs;//测站数
        public string qd;//起始点高程
        public string zd;//重点高程
        public string czbh;//测站编号
        public double hcs;//后视上丝    
        public double qcs;  //前视上丝  
        public double hcx;//后视下丝
        public double qcx;//前视下丝
        public double hchmzs1;//后尺黑面中丝
        public double hchmzs2;//后尺红面中丝  
        public double qchmzs1;//前尺黑面中丝      
        public double qchmzs2;//前尺红面中丝
        public double fh;//闭合差
        public double zjl;//总距离
        public double hj;//后距
        public double qj;//前距
        //public double qjjhjp;
        public double sjc;//视距差
        public double sjch;//视距差和
        public double hjq1;//后尺黑面中丝-前尺黑面中丝
        public double hjq2;//后尺红面中丝-前尺红面中丝
        public double hjq11;//后尺黑面中丝-前尺黑面中丝
        public double hjq12;//后尺红面中丝-前尺红面中丝
        public double kjhjh1;//K+黑减红 后尺
        public double kjhjh2;//K+黑减红 前尺
        public double kjhjh3;//1与2之差
        public double gczs;//高程中数
        public double gc;//高程
        public double dhgc;//点号高程
        public double jl;//距离
        public double pjgc;//平均高程
        public double gzs;//改正数
        public double gzhgc;//改正后高程
        public bool bd=false;//判断
    }
}

Form1

namespace work
{
    public partial class Form1 : Form
    {
 
        List<Shuju> sj = new List<Shuju>();
        Shuju shuju = new Shuju();
        Form2 form2 = new Form2();
        
        public Form1()
        {
            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void 文件ToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }
        private void 导入原始数据ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            string[] temp;

            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";
            ofd.Title = "打开数据文件";
           
            if (ofd.ShowDialog(this) == DialogResult.OK)
            {

                StreamReader sr = new StreamReader(ofd.FileName);
                while (!sr.EndOfStream)
                {
                    
                    temp = sr.ReadLine().Split(new[] { ' ', ',', '.', ':' , '	' },StringSplitOptions.RemoveEmptyEntries);
                    Shuju shuju = new Shuju();
                    shuju.czbh = temp[0];
                    shuju.hcs = Convert.ToDouble(temp[1]);
                    shuju.qcs = Convert.ToDouble(temp[2]);
                    shuju.hcx = Convert.ToDouble(temp[3]);
                    shuju.qcx = Convert.ToDouble(temp[4]);
                    shuju.hchmzs1 = Convert.ToDouble(temp[5]);
                    shuju.hchmzs2 = Convert.ToDouble(temp[6]);
                    shuju.qchmzs1 = Convert.ToDouble(temp[7]);
                    shuju.qchmzs2 = Convert.ToDouble(temp[8]);
                    sj.Add(shuju); 
                }
                sr.Close();
                
                GridBuild1(); 
            }
            else
            {
                MessageBox.Show("输入失败");
            }
            
        }//获取数据
        public void GridBuild1()
        {
          
            for (int i = 0; i < sj.Count; i++)
            {
                dataGridView1.Rows.Add();
                dataGridView1.Rows[i].Cells[0].Value = sj[i].czbh;
                dataGridView1.Rows[i].Cells[1].Value = sj[i].hcs;
                dataGridView1.Rows[i].Cells[2].Value = sj[i].qcs;
                dataGridView1.Rows[i].Cells[3].Value = sj[i].hcx;
                dataGridView1.Rows[i].Cells[4].Value = sj[i].qcx;
                dataGridView1.Rows[i].Cells[5].Value = sj[i].hchmzs1;
                dataGridView1.Rows[i].Cells[6].Value = sj[i].hchmzs2;
                dataGridView1.Rows[i].Cells[7].Value = sj[i].qchmzs1;
                dataGridView1.Rows[i].Cells[8].Value = sj[i].qchmzs2;
            }
            
        }
        private void 参数设置ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            shuju.bd = true;
            CSSZ();
        }
        public void CSSZ()
        {
            
            Form2 form2 = new Form2();
        
            form2.ShowDialog();
           
            shuju.qd = form2.textBox4.Text;
            shuju.zd = form2.textBox5.Text;
            string a = form2.textBox1.Text;
            shuju.dh = a.Split(new Char[] { ' ', ',', '.', ':' });
            string b = form2.textBox3.Text;
            shuju.czs = b.Split(new Char[] { ' ', ',', '.', ':' });
            shuju.qhsjc = form2.textBox6.Text;
            shuju.sjljc = form2.textBox7.Text;
            shuju.hhmdsc = form2.textBox8.Text;
            shuju.hhmgczc = form2.textBox9.Text;
        }//参数设置
        private void 计算ToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            if (shuju.bd==false)
            {
                MessageBox.Show("请输入参数");
            }
            else
            {
                Gcsb();
                Gcpfb();

            }
               
        }
        public void Gcsb()
        {

            
            //计算前后距
            for (int j = 0; j < sj.Count; j++)
            {

                sj[j].hj = (sj[j].hcs - sj[j].hcx) / 10;//计算后距
                sj[j].qj = (sj[j].qcs - sj[j].qcx) / 10;//计算前距
                //sj[j].qjjhjp = sj[j].hj + sj[j].hj;
                sj[j].sjc = sj[j].hj - sj[j].qj;//计算视距差


                if (sj[j].sjc >Convert.ToInt32(shuju.qhsjc))
                {
                    MessageBox.Show("前后视距差超限");
                    break;
                }
                //计算视距差和
                if (j == 0)
                {
                    sj[j].sjch = sj[j].sjc;
                }
                else
                {
                    sj[j].sjch = sj[j - 1].sjch + sj[j].sjc;
                    if (sj[j].sjch > Convert.ToInt32(shuju.sjljc))
                    {
                        MessageBox.Show("前后视距差累积和超限");
                        break;
                    }
                }
            }
            //计算高差
            //计算K+黑减红
            for (int i = 0; i < sj.Count; i++)
            {
                double k1 = 4687;
                double k2 = 4787;
                if (Math.Abs(sj[0].hchmzs1 + k1 - sj[0].hchmzs2) < Math.Abs(sj[0].hchmzs1 + k2 - sj[0].hchmzs2))
                {
                    if (i % 2 == 0)
                    {
                        sj[i].kjhjh1 = sj[i].hchmzs1 + k1 - sj[i].hchmzs2;
                        sj[i].kjhjh2 = sj[i].qchmzs1 + k2 - sj[i].qchmzs2;

                    }
                    else if (i % 2 == 1)
                    {
                        sj[i].kjhjh1 = sj[i].hchmzs1 + k2 - sj[i].hchmzs2;
                        sj[i].kjhjh2 = sj[i].qchmzs1 + k1 - sj[i].qchmzs2;
                    }
                }
                else
                {
                    if (i % 2 == 0)
                    {
                        sj[i].kjhjh1 = sj[i].hchmzs1 + k2 - sj[i].hchmzs2;
                        sj[i].kjhjh2 = sj[i].qchmzs1 + k1 - sj[i].qchmzs2;

                    }
                    else if (i % 2 == 1)
                    {
                        sj[i].kjhjh1 = sj[i].hchmzs1 + k1 - sj[i].hchmzs2;
                        sj[i].kjhjh2 = sj[i].qchmzs1 + k2 - sj[i].qchmzs2;
                    }

                }
                if (Math.Abs( sj[i].kjhjh1)>3|| Math.Abs(sj[i].kjhjh2) >3)
                {
                    MessageBox.Show("第" + sj[i].czbh + "号测站红黑面读数差超限");

                }

                sj[i].hjq11 = (sj[i].hchmzs1 - sj[i].qchmzs1);
                sj[i].hjq12 = (sj[i].hchmzs2 - sj[i].qchmzs2);
                sj[i].hjq1 = (sj[i].hchmzs1 - sj[i].qchmzs1) / 1000;
                sj[i].hjq2 = (sj[i].hchmzs2 - sj[i].qchmzs2) / 1000;

                //计算高差中数
                sj[i].kjhjh3 = sj[i].kjhjh1 - sj[i].kjhjh2;
                if (sj[i].kjhjh3 > Convert .ToInt32(shuju.hhmgczc) || sj[i].kjhjh3 < -(Convert.ToInt32(shuju.hhmgczc)))
                {
                    MessageBox.Show("第" + sj[i].czbh + "号测站红黑面读数差之差超限");
                }
                if (sj[i].hjq1 > sj[i].hjq2)
                {
                    sj[i].gczs = (sj[i].hjq1 + sj[i].hjq2 + 0.1) / 2;
                }
                else if (sj[i].hjq1 < sj[i].hjq2)
                {
                    sj[i].gczs = (sj[i].hjq1 + sj[i].hjq2 - 0.1) / 2;
                }
                else
                {
                    sj[i].gczs = (sj[i].hjq1 + sj[i].hjq2) / 2;
                }
                shuju.sumh += sj[i].gczs;
            }
         

            //计算高
            for (int i = 0; i < sj.Count; i++)
            {

                if (i == 0)
                {
                    sj[i].gc = Convert.ToDouble(shuju.qd) + sj[i].gczs;
                }
                else
                {
                    sj[i].gc = sj[i - 1].gc + sj[i].gczs;
                }
            }
            
           GridBuild2();
           


        }//外业观测手簿
        public void Gcpfb()//高程误差配赋表
        {

            //计算两点距离
            //计算平均高差   
            if (sj.Count == 0)
            {
                MessageBox.Show("请输入数据");
            }
            else
            {
                int b = 0;
                int c = 0;
                for (int a = 0; a < shuju.czs.Length; a++)
                {

                    if (a == 0)
                    {
                        b = Convert.ToInt32(shuju.czs[a]);
                        for (int i = c; i < b; i++)
                        {
                            sj[a].jl += sj[i].hj + sj[i].qj;
                            sj[a].pjgc += sj[i].gczs;
                            sj[a].gzs = -(sj[i].jl / shuju.zjl) * shuju.fh;
                            sj[a].gzhgc = sj[i].pjgc + sj[i].gzs;
                        }

                    }
                    else
                    {
                        b += Convert.ToInt32(shuju.czs[a]);
                        c += Convert.ToInt32(shuju.czs[a - 1]);
                        for (int i = c; i < b; i++)
                        {
                            sj[a].jl += sj[i].hj + sj[i].qj;
                            sj[a].pjgc += sj[i].gczs;
                            sj[a].gzs = -(sj[i].jl / shuju.zjl) * shuju.fh;
                            sj[a].gzhgc = sj[i].pjgc + sj[i].gzs;
                        }

                    }
                    shuju.zjl += sj[a].jl;//计算总距离

                }
                //计算高差闭合差
                shuju.fh = shuju.sumh + Convert.ToDouble(shuju.qd) - Convert.ToDouble(shuju.zd);
                if (Math.Abs(shuju.fh) > 20 * Math.Pow(shuju.zjl / 1000, 0.5))
                {
                    MessageBox.Show("高差闭合差超限");
                }
                //计算高差改正数
                //计算改正后高差
                for (int i = 0; i < shuju.czs.Length; i++)
                {
                    sj[i].gzs = -(sj[i].jl / shuju.zjl) * shuju.fh;
                    sj[i].gzhgc = sj[i].pjgc + sj[i].gzs;
                }
                //高程
                for (int i = 0; i < sj.Count; i++)
                {

                    if (i == 0)
                    {
                        sj[i].dhgc = Convert.ToDouble(shuju.qd) + sj[i].gzhgc;
                    }
                    else
                    {
                        sj[i].dhgc = sj[i - 1].dhgc + sj[i].gzhgc;
                    }
                }

            }
            
        }

        public void GridBuild2()
        {

            for (int i = 0; i < sj.Count; i++)
            {
                dataGridView2.Rows.Add();
                dataGridView2.Rows[i].Cells[0].Value = sj[i].czbh;
                dataGridView2.Rows[i].Cells[1].Value = Math.Round(sj[i].hj, 4);
                dataGridView2.Rows[i].Cells[2].Value = Math.Round(sj[i].qj, 4);
                dataGridView2.Rows[i].Cells[3].Value = Math.Round(sj[i].sjc, 4);
                dataGridView2.Rows[i].Cells[4].Value = Math.Round(sj[i].sjch, 4);
                dataGridView2.Rows[i].Cells[5].Value = Math.Round(sj[i].gczs, 4);
                dataGridView2.Rows[i].Cells[6].Value = Math.Round(sj[i].gc, 4);
            }
            
        }
     
        private void chart1_Click(object sender, EventArgs e)
        {
          
        }
     
        private void 生成外业观测手簿ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
           
            

        }
        private void 生成平差高程误差配赋表ToolStripMenuItem_Click(object sender, EventArgs e) 
        {
            
          
        }
        private void 导出外业观测手簿ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int i ;
            SaveFileDialog dlg = new SaveFileDialog();
            dlg.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                string path = dlg.FileName;
                StreamWriter sw = new StreamWriter(path);
                sw.WriteLine("                             四等水准测量观测手簿");
                sw.WriteLine("测站       后下丝       前下丝       方 向        标 尺 读 数     K + 黑");
                sw.WriteLine("编号       尺上丝       尺上丝        及                                     减            高差");
                sw.WriteLine("                后距           前距        尺 号        黑        红          红            中数");
                sw.WriteLine("             视距差d         Σd                          面        面");
                sw.WriteLine("");
                for (i = 0; i < sj.Count; i++)
                {
               
                        sw.WriteLine( sj[i].czbh + "           " + sj[i].hcs + "         " + sj[i].qcs + "         后           " + sj[i].hchmzs1 + "     " + sj[i].hchmzs2 + "          " + sj[i].kjhjh1);
                        sw.WriteLine("             " + sj[i].hcx + "         " + sj[i].qcx + "          前             " + sj[i].qchmzs1 + "      " + sj[i].qchmzs2 + "       " + sj[i].kjhjh2 + "              " + sj[i].gczs);
                        sw.WriteLine("             " + sj[i].qj + "             " + sj[i].hj + "      后-前         " + sj[i].hjq11 + "        " + sj[i].hjq12 + "        " + sj[i].kjhjh3);
                        sw.WriteLine("             " + Math.Round(sj[i].sjc, 4) + "           " + Math.Round(sj[i].sjch, 4));
                }
                MessageBox.Show("保存路径:" + dlg.FileName);
                sw.Close();
            }
            else
            {
                MessageBox.Show("保存失败!");
            }
        } 
        private void 导出ToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            int i ;
            SaveFileDialog dlg = new SaveFileDialog();
            dlg.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                string path = dlg.FileName;
                StreamWriter sw = new StreamWriter(path);
                sw.WriteLine( "                                      高程误差配赋表\r\n");               
                sw.WriteLine( "点号   距离(m)  平均高差(m)     改正数(m)   改正后高差(m)   点之高程(m)       备注" + "\r\n");
                for (i = 0; i < shuju.dh.Length; i++)
                {
                    if (i == 0)
                    {
                        sw.WriteLine(shuju.dh[i] + "                                                                                            " + shuju.qd + "\r\n");
                        sw.WriteLine("            " + Math.Round(sj[i].jl, 1) + "          " + Math.Round(sj[i].pjgc,3) + "              " +
                           Math.Round(sj[i].gzs, 4) + "         " + Math.Round(sj[i].gzhgc, 3) + "        " + "\r\n");
                    }
                    else if (i == shuju.dh.Length-1)
                    {
                        sw.WriteLine(shuju.dh[i] + "                                                                                            " + Math.Round(sj[i - 1].dhgc, 3) + "\r\n");
                    }
                    else
                    {
                        sw.WriteLine(shuju.dh[i] + "                                                                                            " + Math.Round(sj[i - 1].dhgc, 3) + "\r\n");
                        sw.WriteLine("            " + Math.Round(sj[i].jl, 1) + "          " + Math.Round(sj[i].pjgc, 3) + "              " +
                           Math.Round(sj[i].gzs, 4) + "         " + Math.Round(sj[i].gzhgc, 3) + "        " + "\r\n");

                    }
                   
                }
                sw.WriteLine("总距离(m):   " + shuju.zjl + "\r\n");
                sw.WriteLine("闭合差(mm):   " + Math.Round(shuju.fh, 3) * 1000 + "\r\n");
                sw.WriteLine("每公里改正数(mm):   " + Math.Round(Math.Round(shuju.fh, 3) * 1000 / shuju.zjl * 1000, 0) + "\r\n");
                sw.WriteLine("路线闭合差(mm):   " + Math.Round(20 * Math.Pow(shuju.zjl / 1000, 0.5), 0));
                MessageBox.Show("保存路径:" + dlg.FileName);
                sw.Close();
            }
            else
            {
                MessageBox.Show("保存失败!");
            }
        }
        

        private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }
        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void richTextBox2_TextChanged(object sender, EventArgs e)
        {

        }
        private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void 重置ToolStripMenuItem_Click(object sender, EventArgs e)
        {
           
            dataGridView1.Rows.Clear();
            dataGridView2.Rows.Clear();
            richTextBox2.Text = "";
            richTextBox1.Text = "";
            shuju.fh = 0;
            shuju.sumh = 0;
            shuju.zjl = 0;
            sj.Clear();
        }

        private void 保存数据ToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void 外业观测手簿ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int i;
            richTextBox1.AppendText(Environment.NewLine);
            richTextBox1.Text = "                             四等水准测量观测手簿\n";
            richTextBox1.Text += "测站       后上丝       前上丝       方 向        标 尺 读 数     K + 黑\n";
            richTextBox1.Text += "编号       尺下丝       尺下丝        及                           减            高差\n";
            richTextBox1.Text += "            后距         前距        尺 号        黑      红       红            中数\n";
            richTextBox1.Text += "           视距差d        Σd                      面      面\n";
            richTextBox1.Text += "";
            for (i = 0; i < sj.Count; i++)
            {
                richTextBox1.Text += "  " + sj[i].czbh + "         " + sj[i].hcs + "         " + sj[i].qcs + "         后         " + sj[i].hchmzs1 + "     " + sj[i].hchmzs2 + "     " + sj[i].kjhjh1 + "\r\n";
                richTextBox1.Text += "            " + sj[i].hcx + "         " + sj[i].qcx + "          前         " + sj[i].qchmzs1 + "      " + sj[i].qchmzs2 + "    " + sj[i].kjhjh2 + "            " + sj[i].gczs + "\r\n";
                richTextBox1.Text += "             " + sj[i].hj + "        " + sj[i].qj + "          后-前      " + sj[i].hjq11 + "      " + sj[i].hjq12 + "      " + sj[i].kjhjh3 + "\r\n";
                richTextBox1.Text += "             " + Math.Round(sj[i].sjc, 4) + "         " + Math.Round(sj[i].sjch, 4) + "                      " + "\r\n";
            }
        }

        private void 高程误差配赋表ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox2.AppendText(Environment.NewLine);
            richTextBox2.Text += "                                      高程误差配赋表\r\n";
            richTextBox2.Text += "点号   距离(m)  平均高差(m)     改正数(m)   改正后高差(m)   点之高程(m)       备注" + "\r\n";
            for (int i = 0; i < shuju.dh.Length; i++)
            {
                if (i == 0)
                {
                    richTextBox2.Text += shuju.dh[i] + "                                                              " + shuju.qd + "\r\n";
                    richTextBox2.Text += "       " + Math.Round(sj[i].jl, 1) + "          " + Math.Round(sj[i].pjgc, 3) + "         " +
                       Math.Round(sj[i].gzs, 4) + "         " + Math.Round(sj[i].gzhgc, 3) + "        " + "\r\n";
                }
                else if (i == shuju.dh.Length - 1)
                {
                    richTextBox2.Text += shuju.dh[i] + "                                                              " + Math.Round(sj[i - 1].dhgc, 3) + "\r\n";
                }
                else
                {
                    richTextBox2.Text += shuju.dh[i] + "                                                              " + Math.Round(sj[i - 1].dhgc, 3) + "\r\n";
                    richTextBox2.Text += "       " + Math.Round(sj[i].jl, 1) + "          " + Math.Round(sj[i].pjgc, 3) + "         " +
                       Math.Round(sj[i].gzs, 4) + "         " + Math.Round(sj[i].gzhgc, 3) + "        " + "\r\n";
                }
            }
            richTextBox2.Text += "总距离(m):   " + shuju.zjl + "\r\n";
            richTextBox2.Text += "闭合差(mm):   " + Math.Round(shuju.fh, 3) * 1000 + "\r\n";
            richTextBox2.Text += "每公里改正数(mm):   " + Math.Round(Math.Round(shuju.fh, 3) * 1000 / shuju.zjl * 1000, 0) + "\r\n";
            richTextBox2.Text += "路线闭合差(mm):   " + Math.Round(20 * Math.Pow(shuju.zjl / 1000, 0.5), 0);

        }

        private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
        {
            
        }
       
    }
}

Form2就是参数设置的窗体,其实没什么东西,就是预置我实习时候的设置,方便计算的。

namespace work
{
    public partial class Form2 : Form
    {
        List<Shuju> sj = new List<Shuju>();
        Shuju shuju = new Shuju();
        public Form2()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void label2_Click(object sender, EventArgs e)
        {

        }


        public void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text ==""||textBox2.Text == ""||
                textBox3.Text == "" || textBox4.Text == ""||
                textBox6.Text == ""||textBox7.Text == "" ||
                textBox8.Text == "" || textBox9.Text == "")
            {
                MessageBox.Show("未完整输入数据");
            }
            else
            {
                Close();
            }
            
        }
   
        private void label5_Click(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged_1(object sender, EventArgs e)
        {

        }

        private void label6_Click(object sender, EventArgs e)
        {

        }

      

        private void label8_Click(object sender, EventArgs e)
        {

        }

        private void TextBox8_TextChanged(object sender, EventArgs e)
        {

        }

        private void label11_Click(object sender, EventArgs e)
        {

        }

     

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.Text == "四等")
            { 
                textBox6.Text = "3";
               textBox7.Text = "10";
               textBox8.Text = "3";
               textBox9.Text = "5";
                
               
            }
            else
            {
                textBox6.Text = "";
                textBox7.Text = "";
                textBox8.Text = "";
                textBox9.Text = "";
                MessageBox.Show("请手动输入");
            }
        }

        private void textBox7_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {

        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

      

        private void label12_Click(object sender, EventArgs e)
        {

        }

        private void textBox5_TextChanged(object sender, EventArgs e)
        {

        }

        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox2.Text == "第一圈")
            {
                textBox1.Text = "a,b,c,d,e,f,g,a";
                textBox2.Text = "81";
                textBox3.Text = "10,8,13,13,13,10,14";
                textBox4.Text = "0";
                textBox5.Text = "0";
                comboBox1.Text = "四等";
            }
            else if (comboBox2.Text == "第二圈")
            {
                textBox1.Text = "a,g,f,e,d,c,b,a";
                textBox2.Text = "84";
                textBox3.Text = "12,10,14,12,14,10,12";
                textBox4.Text = "0";
                textBox5.Text = "0";
                comboBox1.Text = "四等";
            }
            else if (comboBox2.Text == "第三圈")
            {
                textBox1.Text = "a,b,c,d,e,f,g,a";
                textBox2.Text = "84";
                textBox3.Text = "12,10,14,12,14,10,12";
                textBox4.Text = "0";
                textBox5.Text = "0";
                comboBox1.Text = "四等";
            }
        }
    }
}

四、结语

这个程序是我第一次实习的时候编写的,有助于你用C#写测绘工程实习程序,特别的需要批量处理的。谢谢您的阅读。
如果你有基础,看源码就可以了。如果你才学C#窗体,我觉得你下载这一个程序或者闭合导线那个基本上可以满足测绘程序编写的要求了,不用每个问题都去搜索,这两个程序基本都包括了。
我的其他文章:

  1. 利用Python编写一个高斯正反算程序:https://blog.csdn.net/Zj1638/article/details/125740379
  2. 利用C#编写一个高斯正反算程序:https://blog.csdn.net/Zj1638/article/details/125380593
  3. 利用C#编写一个附和闭合导线简易平差程序:https://blog.csdn.net/Zj1638/article/details/125639541
  4. 利用C#编写一个GPS高程拟合(二次曲面拟合模型)程序:https://blog.csdn.net/Zj1638/article/details/125752243

相关下载链接:

  1. 利用C#编写一个水准测量近似平差程序下载链接:https://download.csdn.net/download/Zj1638/16732130
  2. 利用C#编写一个附和闭合导线简易平差程序下载链接:https://download.csdn.net/download/Zj1638/85928040
  3. 利用C#编写一个高斯正反算程序下载链接:https://download.csdn.net/download/Zj1638/85711234
  4. 利用Python编写一个高斯正反算程序下载链接:https://download.csdn.net/download/Zj1638/86059069
  5. 利用C#编写一个GPS高程拟合(二次曲面拟合模型)程序下载链接:https://download.csdn.net/download/Zj1638/85916113

需要的可以支持一下。如果有什么不懂的,可以私信,我看到了会回答的。

  • 17
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
好的,这是一个比较复杂的问题,需要分步骤来回答。首先,我们需要了解什么是水准路线近似平差。水准路线近似平差是指通过对水准路线上的高程数据进行加权平均,来得到更为准确的高程信息的一种方法。 接下来,我们需要了解如何使用C#编写附合水准路线近似平差程序。这个程序需要实现以下几个步骤: 1. 读取水准路线上的高程数据,可以将数据保存在一个文本文件中,每行一个数据。 2. 对高程数据进行加权平均,这里需要使用到加权平均公式: 平均高程 = (Σ(高程 * 权重)) / Σ权重 其中,高程是每个数据点的高程值,权重是每个数据点的权重值, Σ表示求和。 3. 计算每个数据点的残差,即实际高程值与平均高程值的差值。 4. 计算每个数据点的方差,即残差的平方和除以数据点个数。 5. 输出计算结果,包括平均高程、残差和方差等信息。 以下是一个简单的C#代码示例,实现了上述步骤: ```csharp using System; using System.IO; using System.Linq; namespace WaterLevelAdjustment { class Program { static void Main(string[] args) { // 读取高程数据 var data = File.ReadAllLines("elevation.txt") .Select(x => x.Split().Select(double.Parse).ToArray()) .ToArray(); // 计算权重 var totalDistance = 0.0; var distances = new double[data.Length - 1]; for (int i = 0; i < distances.Length; i++) { var dx = data[i + 1][0] - data[i][0]; var dy = data[i + 1][1] - data[i][1]; var distance = Math.Sqrt(dx * dx + dy * dy); distances[i] = distance; totalDistance += distance; } var weights = distances.Select(x => x / totalDistance).ToArray(); // 计算平均高程 var averageElevation = data.Select((x, i) => x[2] * weights[i]).Sum() / weights.Sum(); // 计算残差和方差 var residuals = data.Select(x => x[2] - averageElevation).ToArray(); var variance = residuals.Select(x => x * x).Sum() / residuals.Length; // 输出计算结果 Console.WriteLine($"平均高程: {averageElevation}"); Console.WriteLine($"方差: {variance}"); Console.ReadLine(); } } } ``` 这个示例程序假设高程数据保存在一个名为“elevation.txt”的文本文件中,每行包括三个数据,分别是点的x坐标、y坐标和高程值。程序首先读取了高程数据,然后计算了每个数据点的权重,接着使用加权平均公式计算了平均高程。最后,程序计算了每个数据点的残差和方差,并输出了计算结果。 当然,这只是一个简单的示例程序,实际的程序可能需要更加复杂的代码来实现更复杂的功能。但是,这个示例程序可以作为一个起点,帮助你开始编写你自己的附合水准路线近似平差程序

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卤雅少年

有问题可以私信

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值