测绘程序设计实验八水准网平差程序设计报告完整版.docx
《测绘程序设计实验八水准网平差程序设计报告完整版.docx》由会员分享,可在线阅读,更多相关《测绘程序设计实验八水准网平差程序设计报告完整版.docx(11页珍藏版)》请在冰点文库上搜索。
![测绘程序设计实验八水准网平差程序设计报告完整版.docx](https://file1.bingdoc.com/fileroot1/2023-7/6/8ecaa4e8-4c4b-49ca-beed-6c452afed7cd/8ecaa4e8-4c4b-49ca-beed-6c452afed7cd1.gif)
测绘程序设计实验八水准网平差程序设计报告完整版
Documentserialnumber【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】
测绘程序设计实验八水准网平差程序设计报告
《测绘程序设计》
上机实验报告
(VisualC++.Net)
班级:
测绘0901班
学号:
04
姓名:
代娅琴
2012年4月29日
实验八平差程序设计基础
一、实验目的
巩固过程的定义与调用
巩固类的创建与使用
巩固间接平差模型及平差计算
掌握平差程序设计的基本技巧与步骤
二、实验内容
水准网平差程序设计。
设计一个水准网平差的程序,要求数据从文件中读取,
计算部分与界面无关。
1.水准网间接平差模型:
2.计算示例:
近似高程计算:
3.水准网平差计算一般步骤
(1)读取观测数据和已知数据;
(2)计算未知点高程近似值;
(3)列高差观测值误差方程;
(4)根据水准路线长度计算高差观测值的权;
(5)组成法方程;
(6)解法方程,求得未知点高程改正数及平差后高程值;
(7)求高差观测值残差及平差后高差观测值;
(8)精度评定;
(9)输出平差结果。
4.水准网高程近似值计算算法
5.输入数据格式示例
实验代码:
#pragmaonce
classLevelControlPoint
{
public:
LevelControlPoint(void);
~LevelControlPoint(void);
public:
CStringstrName;trName=pstrData[0];
m_pKnownPoint[i].strID=pstrData[0];
m_pKnownPoint[i].H=_tstof(pstrData[1]);
m_pKnownPoint[i].flag=1;trName=pstrData[i];
m_pUnknownPoint[i].strID=pstrData[i];
m_pUnknownPoint[i].H=0;lag=0;pBackObj=SearchPointUsingID(pstrData[0]);pFrontObj=SearchPointUsingID(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_tstof(pstrData[3]);trID==ID)
{return&m_pKnownPoint[i];}
}
returnNULL;
}
trID==ID)
{return&m_pUnknownPoint[i];}
}
returnNULL;
}
LevelControlPoint*AdjustLevel:
:
SearchPointUsingID(CStringID)
{
LevelControlPoint*cp;
cp=SearchKnownPointUsingID(ID);
if(cp==NULL)
cp=SearchUnknownPointUsingID(ID);
returncp;
}
voidAdjustLevel:
:
ApproHeignt(void)lag!
=1)
{
pFrontObj->strID==m_pUnknownPoint[i].strID)
&&m_pDhObs[j].cpBackObj->flag==1)
{=m_pDhObs[i].cpBackObj->H-m_pDhObs[i].ObsValue;*/
m_pUnknownPoint[i].H=m_pDhObs[j].cpBackObj->H+m_pDhObs[j].HObsValue;
m_pUnknownPoint[i].flag=1;
break;
}
}
if(m_pUnknownPoint[i].flag!
=1)pBackObj->strID==m_pUnknownPoint[i].strID)
&&m_pDhObs[j].cpFrontObj->flag==1)
{=m_pDhObs[j].cpFrontObj->H-m_pDhObs[j].HObsValue;
/*m_pUnknownPoint[i].H=m_pDhObs[i].cpFrontObj->H+m_pDhObs[i].ObsValue;*/
m_pUnknownPoint[i].flag=1;
break;
}
}
}
}
if(i==m_iUnknownPointCount-1)lag!
=1)ist);
p(i,i)=value;
}
returnp;
}
voidAdjustLevel:
:
FormErrorEquation(CMatrix&B,CMatrix&L)
{
(m_iDhObsCount,m_iUnknownPointCount);
(m_iDhObsCount,1);
for(inti=0;istrID);
tmpFront=SearchPointUsingID(m_pDhObs[i].cpFrontObj->strID);
trID==tmpBack->strID)trID==tmpFront->strID)bsValue-(m_pDhObs[i].cpBackObj->H-m_pDhObs[i].cpFrontObj->H);*/
L(i,0)=m_pDhObs[i].HObsValue-(m_pDhObs[i].cpFrontObj->H-m_pDhObs[i].cpBackObj->H);
(_T("%.3f"),L(i,0));
L(i,0)=_tstof(tmp);
L(i,0)=L(i,0)*1000;+=x(i,0);xt"));xt"));
if()==IDCANCEL)return;
CStringstrFileName=();
setlocale(LC_ALL,"");
CStdioFilesf;
if(!
(strFileName,CFile:
:
modeCreate|CFile:
:
modeWrite))return;
(LevleContent);
();
UpdateData(FALSE);
}
voidCIndircLelveDlg:
:
OnBnClickedComputelevel()
{
f\r\n"),[i].strID,[i].H);
LevleContent+=Temp;
}
(_T("单位权中误差:
%.1fmm\r\n"),r0*1000);
LevleContent+=Temp;
LevleContent+=_T("未知点高程中误差(mm):
\r\n");
for(inti=0;i<;i++)
{
();
(_T("%s,%.1f\r\n"),[i].strName,Qx[i]*1000);
LevleContent+=Temp;
}
UpdateData(false);
}
voidCIndircLelveDlg:
:
OnBnClickedSavelevleresult()
{
xt"));
if()==IDCANCEL)return;
CStringstrFileName=();
setlocale(LC_ALL,"");
CStdioFilesf;
if(!
(strFileName,CFile:
:
modeCreate|CFile:
:
modeWrite))return;
(LevleContent);
();
UpdateData(FALSE);
}
三、实验结果
打开文件数据:
平差结果:
四、实验心得
这从实验是我们测绘程序设计的最后一次实验,虽然这个学期我们做了好几次相关的实验,但是我却发现自己学的东西也越来越模糊,感觉很多内容都不理解。
这次的实验很大程度上我都是按照《测绘程序设计》上面单导线简易计算来编的,在加上后面的关于水准网间接平差的误差方程和法方程,以及精度评定的相关函数,来完成的。
而自己主要完成的就是水准网的数据读取,保存的操作,由于这部分主要用的知识是文件的读取的,因为前面做过,所以不是太难。
但是这并不意味着这次实验很简单,至少在我心中这的确比较难,因为里面很多东西不是纯粹的把代码写上去就可以完成,还要靠自己做相应的代码对应,才能够真正的得到想要的结果。
但学好编程并扎实的为自己所用是需要更多的学习和练习的,我知道在掌握课堂知识的同时,主动的去寻找吸收相关的知识,希望通过本门课程的学习,掌握学习编程的方法,使自己的水平能够更进一步,循序渐进的掌握更多。
虽然这门课的实验已经结束,但是我却深深地知道,我们专业对编程的要求很高,而且必须具备较好的编程能力,或许这些日子下来,我学到的不是很多,但是我或多或少明白,编程是一个循序渐进的过程,我想真的能够在这方面有所突破,就更要花时间多花工夫。