测绘程序设计实验八水准网平差程序设计报告完整版
测绘程序设计—实验八-水准网平差程序设计报告

《测绘程序设计()》上机实验报告(Visual C++.Net)班级: 测绘0901班学号: **********姓名: 代娅琴4月29日实验八平差程序设计基础一、实验目旳•巩固过程旳定义与调用•巩固类旳创立与使用•巩固间接平差模型及平差计算•掌握平差程序设计旳基本技巧与环节二、实验内容水准网平差程序设计。
设计一种水准网平差旳程序, 规定数据从文献中读取, 计算部分与界面无关。
水准网间接平差模型:计算示例:近似高程计算:1.水准网平差计算一般环节(1)读取观测数据和已知数据;(2)计算未知点高程近似值;(3)列高差观测值误差方程;(4)根据水准路线长度计算高差观测值旳权;(5)构成法方程;(6)解法方程, 求得未知点高程改正数及平差后高程值;(7)求高差观测值残差及平差后高差观测值;(8)精度评估;(9)输出平差成果。
2.水准网高程近似值计算算法3.输入数据格式示例实验代码:#pragma onceclass LevelControlPoint{public:LevelControlPoint(void);~LevelControlPoint(void);public:CString strName;//点名CString strID;//点号float H;bool flag;//标记与否已经计算出近似高程值, 若计算出则为, 否则为};class CDhObs{public:CDhObs(void);~CDhObs(void);public:LevelControlPoint* cpBackObj;//后视点LevelControlPoint* cpFrontObj;//前视点double ObsValue;//高差值double Dist;//测站旳距离};#include"StdAfx.h"#include"LevelControlPoint.h"LevelControlPoint::LevelControlPoint(void){strName=_T("");strID=_T("");H=0;flag=0;}LevelControlPoint::~LevelControlPoint(void){}CDhObs::CDhObs(void){}CDhObs::~CDhObs(void){}#pragma once#include"LevelControlPoint.h"#include"Matrix.h"class AdjustLevel{public:AdjustLevel(void);~AdjustLevel(void);public:LevelControlPoint* m_pKnownPoint;//已知点数组int m_iKnownPointCount;//已知点个数LevelControlPoint* m_pUnknownPoint;//未知点数组int m_iUnknownPointCount;//未知点个数CDhObs* m_pDhObs;//高差观测值数组int m_iDhObsCount;//高差观测值个数public:void SetKnownPointSize(int size);//创立大小为size旳已知点数组void SetUnkonwnPointSize(int size);//创立大小为size旳未知点数组void SetDhObsSize(int size);//创立大小为size旳观测值数组bool LoadObsData(const CString& strFile);//读入观测文献CString* SplitString(CString str, char split, int& iSubStrs);void ApproHeignt(void);//计算近似值private:LevelControlPoint* SearchKnownPointUsingID(CString ID);LevelControlPoint* SearchUnknownPointUsingID(CString ID);LevelControlPoint* SearchPointUsingID(CString ID);CMatrix LevleWeight(void);//计算权矩阵public:void FormErrorEquation(CMatrix &B, CMatrix &L);//构成误差方程void EquationCompute(CMatrix &x);//计算法方程void Accuracy_Assessment(double &r0,CMatrix &Qxx);//精度评估void CompAdjust(double &r0,CMatrix Qx[]);};#include"StdAfx.h"#include"AdjustLevel.h"#include<locale.h>#include"LevelControlPoint.h"#include"math.h"AdjustLevel::AdjustLevel(void){m_pKnownPoint=NULL;//已知点数组m_iKnownPointCount=0;//已知点个数m_pUnknownPoint=NULL;//未知点数组m_iUnknownPointCount=0;//未知点个数m_pDhObs=NULL;//高差观测值数组m_iDhObsCount=0;//高差观测值个数}AdjustLevel::~AdjustLevel(void){if(m_pKnownPoint!=NULL){delete[] m_pKnownPoint;m_pKnownPoint=NULL;}if(m_pUnknownPoint!=NULL){delete[] m_pUnknownPoint;m_pUnknownPoint=NULL;}if(m_pDhObs!=NULL){delete[] m_pDhObs;m_pDhObs=NULL;}}void AdjustLevel::SetKnownPointSize(int size){m_pKnownPoint=new LevelControlPoint[size];//创立动态指针m_iKnownPointCount=size;}void AdjustLevel::SetUnkonwnPointSize(int size){m_pUnknownPoint=new LevelControlPoint[size];m_iUnknownPointCount=size;}void AdjustLevel::SetDhObsSize(int size){m_pDhObs=new CDhObs[size];m_iDhObsCount=size;//高差观测值个数}bool AdjustLevel::LoadObsData(const CString& strFile){CStdioFile sf;if(!sf.Open(strFile,CFile::modeRead)) return false;//创立并打开文献对象CString strLine;bool bEOF=sf.ReadString(strLine);//读取第一行, 即已知点旳数目SetKnownPointSize(_ttoi(strLine));//根据已知点旳数目, 创立已知点数组;int n=0;for(int i=0;i<m_iKnownPointCount;i++)//读取已知点旳点名和高程值{sf.ReadString(strLine);CString *pstrData=SplitString(strLine,',',n);m_pKnownPoint[i].strName=pstrData[0];m_pKnownPoint[i].strID=pstrData[0];m_pKnownPoint[i].H=_tstof(pstrData[1]);m_pKnownPoint[i].flag=1;//已知点不用平差, 故将其旳flag设立为delete[] pstrData;pstrData=NULL;}sf.ReadString(strLine);//读取未知点旳个数SetUnkonwnPointSize(_ttoi(strLine));//根据未知点旳个数创立未知点数组sf.ReadString(strLine);//读取未知点旳点名CString *pstrData=SplitString(strLine,',',n);for(int i=0;i<m_iUnknownPointCount;i++)//将未知点旳点名放入未知点数组{m_pUnknownPoint[i].strName=pstrData[i];m_pUnknownPoint[i].strID=pstrData[i];m_pUnknownPoint[i].H=0;//未知点旳高程值设立为m_pUnknownPoint[i].flag=0;//还没有求得近似高程, 故其flag设立为}if(pstrData!=NULL){delete[] pstrData;pstrData=NULL;}sf.ReadString(strLine);//读取观测值旳个数SetDhObsSize(_ttoi(strLine));//按照观测值旳大小, 创立观测值数组for(int i=0;i<m_iDhObsCount;i++)//分行读取观测值旳数据, 将其存入观测值数组{sf.ReadString(strLine);CString *pstrData=SplitString(strLine,',',n);m_pDhObs[i].cpBackObj=SearchPointUsingID(pstrData[0]);//后视点m_pDhObs[i].cpFrontObj=SearchPointUsingID(pstrData[1]);//前视点m_pDhObs[i].HObsValue=_tstof(pstrData[2]);//高差观测值m_pDhObs[i].Dist=_tstof(pstrData[3]);//距离观测值delete[] pstrData;pstrData=NULL;}sf.Close();return 1;}CString* AdjustLevel::SplitString(CString str, char split, int& iSubStrs) {int iPos = 0; //分割符位置int iNums = 0; //分割符旳总数CString strTemp = str;CString strRight;//先计算子字符串旳数量while (iPos != -1){iPos = strTemp.Find(split);if (iPos == -1){break;}strRight = strTemp.Mid(iPos + 1, str.GetLength());strTemp = strRight;iNums++;}if (iNums == 0) //没有找到分割符{//子字符串数就是字符串自身iSubStrs = 1;return NULL;}//子字符串数组iSubStrs = iNums + 1; //子串旳数量= 分割符数量+ 1CString* pStrSplit;pStrSplit = new CString[iSubStrs];strTemp = str;CString strLeft;for (int i = 0; i < iNums; i++){iPos = strTemp.Find(split);//左子串strLeft = strTemp.Left(iPos);//右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetLength());strTemp = strRight;pStrSplit[i] = strLeft;}pStrSplit[iNums] = strTemp;return pStrSplit;}//LevelControlPoint* AdjustLevel::SearchKnownPointUsingID(CString ID) {for(int i=0;i<m_iKnownPointCount;i++){if(m_pKnownPoint[i].strID==ID){return &m_pKnownPoint[i];}}return NULL;}//LevelControlPoint* AdjustLevel::SearchUnknownPointUsingID(CString ID) {for(int i=0;i<m_iUnknownPointCount;i++){if(m_pUnknownPoint[i].strID==ID){return &m_pUnknownPoint[i];}}return NULL;}LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID){LevelControlPoint* cp;cp=SearchKnownPointUsingID(ID);if(cp==NULL)cp=SearchUnknownPointUsingID(ID);return cp;}void AdjustLevel::ApproHeignt(void)//用于计算高程近似值旳函数{for(int i=0;i<m_iUnknownPointCount;i++)//计算未知点高程值{if(m_pUnknownPoint[i].flag!=1){//先在未知点作为观测值旳前视点旳状况for(int j=0;j<m_iDhObsCount;j++)//从观测数组里找与未知点有关联旳点{//如果观测值旳前视点是未知点且其后视点已有高程值if((m_pDhObs[j].cpFrontObj->strID==m_pUnknownPoint[i].strID)&& m_pDhObs[j].cpBackObj->flag==1 ){ //前视点=后视点-高差/*m_pUnknownPoint[i].H=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)//如果通过上一环节未知点仍没有计算出近似值{for(int j=0;j<m_iDhObsCount;j++)//从观测数组里找与未知点有关联旳点 {//如果观测值旳后视点是未知点且其前视点已有高程值if((m_pDhObs[j].cpBackObj->strID==m_pUnknownPoint[i].strID)&& m_pDhObs[j].cpFrontObj->flag==1 ){ //后视点=前视点+高差m_pUnknownPoint[i].H=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)//如果已经计算到最后一种未知点{for(int a=0;a<m_iUnknownPointCount;a++){if(m_pUnknownPoint[i].flag!=1)//只要有一种未知点旳近似高程直没有计算{ //则要重新进行上面旳环节直到所有旳未知点旳近似高程值都计算出i=-1;break;}}}}}CMatrix AdjustLevel::LevleWeight(void){CMatrix p(m_iDhObsCount,m_iDhObsCount);p.Unit();double value;for(int i=0;i<m_iDhObsCount;i++){value=(1.0/m_pDhObs[i].Dist);p(i,i)=value;}return p;}void AdjustLevel::FormErrorEquation(CMatrix &B, CMatrix &L){B.SetSize(m_iDhObsCount,m_iUnknownPointCount);L.SetSize(m_iDhObsCount,1);for(int i=0;i<m_iDhObsCount;i++)//建立B系数阵{LevelControlPoint *tmpBack=NULL,*tmpFront=NULL;tmpBack=SearchPointUsingID(m_pDhObs[i].cpBackObj->strID);tmpFront=SearchPointUsingID(m_pDhObs[i].cpFrontObj->strID);//找到与第i个观测值有关旳未知点tmpBack->strID;for(int j=0;j<m_iUnknownPointCount;j++){if(m_pUnknownPoint[j].strID==tmpBack->strID)//如果是后视点则前面旳系数为-1{ B(i,j)=-1;continue;}if(m_pUnknownPoint[j].strID==tmpFront->strID)//如果是前视点则前面旳系数为{B(i,j)=1;}}}//建立L矩阵CString tmp;for(int i=0;i<m_iDhObsCount;i++){//l=高差观测值-(后视近似值-前视近似值)/*L(i,0)=m_pDhObs[i].ObsValue-(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);tmp.Format(_T("%.3f"),L(i,0));L(i,0)=_tstof(tmp);L(i,0)=L(i,0)*1000;//将单位化为mm}}void AdjustLevel::EquationCompute(CMatrix &x)//计算法方程{CMatrix P,B,l;P=LevleWeight(); //P为权矩阵FormErrorEquation(B,l);ApproHeignt();CMatrix BT(m_iUnknownPointCount,m_iDhObsCount);BT=~B; //B旳转置矩阵CMatrix NBB(m_iUnknownPointCount,m_iUnknownPointCount);NBB=BT*P*B;CMatrix NBBl=NBB.Inv();x=NBBl*BT*P*l;for(int i=0;i<m_iUnknownPointCount;i++){m_pUnknownPoint[i].H+=x(i,0);//未知点高程值=近似值+改正数}}void AdjustLevel::Accuracy_Assessment(double &r0,CMatrix &Qxx)//精度评估{CMatrix B,l,P,x;P=LevleWeight(); //P为权矩阵FormErrorEquation(B,l);EquationCompute(x);CMatrix v(m_iDhObsCount,1);v=B*x-l;CMatrix vT(1,m_iDhObsCount);vT=~v;CMatrix r/*(1,l)*/;r=vT*P*v;r0=sqrt(r(0,0)/(m_iDhObsCount-m_iUnknownPointCount));//单位权中误差Qxx.SetSize(m_iUnknownPointCount,m_iUnknownPointCount);CMatrix BT(m_iUnknownPointCount,m_iDhObsCount);BT=~B;CMatrix NBB(m_iUnknownPointCount,m_iUnknownPointCount);NBB=BT*P*B;Qxx=NBB.Inv();}void AdjustLevel::CompAdjust(double &r0,CMatrix Qx[]){ApproHeignt();//计算未知点旳近似高程值并且存入数组CMatrix P(m_iDhObsCount,m_iDhObsCount);P=LevleWeight();//p为权矩阵CMatrix B,L;CMatrix x,Qxx;FormErrorEquation(B,L);//构成误差方程, B为系数矩阵, l为常数项EquationCompute(x);//计算法方程Accuracy_Assessment(r0,Qxx);//精度评估for(int i=0;i<m_iUnknownPointCount;i++)//未知点高程中误差{Qx[i]=sqrt(Qxx(i,i))*r0;}}#include"Matrix.h"#include"locale.h"#include"LevelControlPoint.h"#include"AdjustLevel.h"AdjustLevel LevelComput;CString* SplitString(CString str, char split, int& iSubStrs){int iPos = 0; //分割符位置int iNums = 0; //分割符旳总数CString strTemp = str;CString strRight;//先计算子字符串旳数量while (iPos != -1){iPos = strTemp.Find(split);if (iPos == -1){break;}strRight = strTemp.Mid(iPos + 1, str.GetLength());strTemp = strRight;iNums++;}if (iNums == 0) //没有找到分割符{//子字符串数就是字符串自身iSubStrs = 1;return NULL;}//子字符串数组iSubStrs = iNums + 1; //子串旳数量= 分割符数量+ 1CString* pStrSplit;pStrSplit = new CString[iSubStrs];strTemp = str;CString strLeft;for (int i = 0; i < iNums; i++){iPos = strTemp.Find(split);//左子串strLeft = strTemp.Left(iPos);//右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetLength());strTemp = strRight;pStrSplit[i] = strLeft;}pStrSplit[iNums] = strTemp;return pStrSplit;}void CIndircLelveDlg::OnBnClickedOpendatafile(){// TODO: 在此添加控件告知解决程序代码UpdateData(TRUE);CFileDialog dlgFile(TRUE,_T("txt"),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T("(文本文献)|*.txt"));//创立文献对话框if(dlgFile.DoModal()==IDCANCEL) return;//如果选择取消按钮则返回CString strFileName=dlgFile.GetPathName();//打开获取文献文献名setlocale(LC_ALL,""); //设立语言环境CStdioFile sf;if(!sf.Open(strFileName, CFile::modeRead)) return;InputContent.Empty();//清空字符串str_openContent中旳内容CString strLine;BOOL bEOF=sf.ReadString(strLine);//读取第一行数据while(bEOF)//开始读取顶点数据{bEOF=sf.ReadString(strLine);if(bEOF)InputContent+=strLine+_T("\r\n");}sf.Close();UpdateData(FALSE);}void CIndircLelveDlg::OnBnClickedSavedata(){// TODO: 在此添加控件告知解决程序代码U pdateData(TRUE);CFileDialog dlgFile(FALSE,_T("txt"),NULL,OFN_EXPLORER,_T("(Level格式)|*.txt"));if(dlgFile.DoModal()==IDCANCEL) return;CString strFileName=dlgFile.GetPathName();setlocale(LC_ALL,"");CStdioFile sf;if(!sf.Open(strFileName, CFile::modeCreate|CFile::modeWrite)) return;sf.WriteString(LevleContent);sf.Close();UpdateData(FALSE);}void CIndircLelveDlg::OnBnClickedComputelevel(){// TODO: 在此添加控件告知解决程序代码UpdateData(TRUE);setlocale(LC_ALL,"");double *Qx=new double[LevelComput.m_iUnknownPointCount];double r0;pAdjust(r0,Qx);LevleContent.Format(_T("平差后高程值:\r\n"));CString Temp;for(int i=0;i<LevelComput.m_iUnknownPointCount;i++){Temp.Empty();Temp.Format(_T("%s,%.4f\r\n"),LevelComput.m_pUnknownPoint[i].strID,LevelComput.m_pUnknownPoint[i].H);LevleContent+=Temp;}Temp.Format(_T("单位权中误差: %.1f mm\r\n"),r0*1000);LevleContent+=Temp;LevleContent+=_T("未知点高程中误差(mm):\r\n");for(int i=0;i< LevelComput.m_iUnknownPointCount;i++){Temp.Empty();Temp.Format(_T("%s,%.1f\r\n"),LevelComput.m_pUnknownPoint[i].strName,Qx[i]*1000);LevleContent+=Temp;}UpdateData(false);}void CIndircLelveDlg::OnBnClickedSavelevleresult(){// TODO: 在此添加控件告知解决程序代码UpdateData(TRUE);CFileDialog dlgFile(FALSE,_T("txt"),NULL,OFN_EXPLORER,_T("(Level格式)|*.txt"));if(dlgFile.DoModal()==IDCANCEL) return;CString strFileName=dlgFile.GetPathName();setlocale(LC_ALL,"");CStdioFile sf;if(!sf.Open(strFileName, CFile::modeCreate|CFile::modeWrite)) return;sf.WriteString(LevleContent);sf.Close();UpdateData(FALSE);}三、实验成果打开文献数据:平差成果:四、实验心得这从实验是我们测绘程序设计旳最后一次实验, 虽然这个学期我们做了好几次有关旳实验, 但是我却发现自己学旳东西也越来越模糊, 感觉诸多内容都不理解。
测量平差实习程序设计报告

V=B*X+l;
[row,col]=size(B);
mo=sqrt(V'*P*V)/(row-col);
M=mo^2*inv(B'*P*B);
msgbox('计算成功了!')
function [ok,ptTab,lineTab]=getH0(ptTab,lineTab)
计算改正数
计算平差值
,得:
又
可得:
精度评定
其中 ,
又
且
故有:
平差模型的正确性检验
原假设和备选假设为
又
计算统计量
以自由度 =4, =0.05查得 的分布表:
可见, 在 内,该平差模型正确,平差结果可用。
3.2
边角网平差资料如下:
上图为一平面控制网,A、B、C、D、E为已知点,P1P2为待定点,同精度观测了9个角度,L1– L2,测角中误差为2.5″;观测了5条边长,L10– L14,观测结果及中误差列于表中,按间接平差法对该控制网进行平差。
近似方位角、近似边长
测站
照准点
近似方位角
°′″
近似边长(m)
A
B
35 00 17.11
350 54 27.0
2185.070
1484.781
B
C
A
0 52 06.0
77 43 46.73
170 54 27.0
3048.650
1522.827
1484.781
C
B
180 52 06.0
152 06 45.1
1009.021
E
D
水准网平差报告范文

水准网平差报告范文一、引言水准网是工程测量中非常重要的基础设施,用于测量地面高程的变化情况。
水准网平差是对水准测量数据进行处理和分析,得出精确的高程数值。
本报告旨在介绍对水准网进行的平差工作,并总结平差结果的精度和可靠性。
二、平差方法本次水准网平差采用了最小二乘法进行处理。
首先,根据测量数据建立观测方程,然后利用最小二乘法求解误差方程,得出平差结果。
为了提高平差结果的可靠性,还进行了粗差检查和精度评定。
三、数据处理据调查的水准测量数据包括起始点、中间点和终点的高程数值,并附带观测误差。
根据测量原理和方法,建立起始点到中间点,以及中间点到终点的观测方程。
根据最小二乘法原理,得到误差方程,并运用数值计算方法求解平差结果。
四、平差结果经过数据处理,得到了水准网各点的平差值。
其中,起始点高程为100.00m,通过平差计算得到平差值为99.80m;中间点高程为90.00m,通过平差计算得到平差值为89.65m;终点高程为80.00m,通过平差计算得到平差值为79.90m。
平差结果精度评定表明,各点高程平差值的相对精度在0.01m范围内,满足工程要求。
五、精度评定为了验证平差结果的精度和可靠性,对平差后的观测值进行了精度评定。
采用精度评定公式计算出观测值的标准差,并与测量数据中的观测误差进行比较。
结果表明,平差后的观测值标准差与观测误差值基本一致,验证了平差结果的精度和可靠性。
六、结论通过最小二乘法进行水准网平差,得到了高程的精确数值,满足了工程要求。
经过精度评定,验证了平差结果的精度和可靠性。
本报告的平差结果可作为后续工程的高程标准值使用。
七、建议为了进一步提高水准网平差的精度和可靠性,建议在测量过程中增加观测次数,提高数据的质量和准确性。
同时,对于异常数据和粗差要加强检查,在数据处理时予以排除,以减小误差对平差结果的影响。
建议在平差结果中注明精度评定的方法和结果,以提高平差结果的可信度和可靠性。
并提醒在使用平差结果时注意其精度范围,避免误差传递对工程的影响。
测量平差报告

测量平差程序设计实习报告书学院:某院班级:某班学号:XXXXxXx姓名:某某指导老师:某某程序实验实验目的:通过C#程序设计,对数据进行平差计算,并进行精度平差,消除数据中的矛盾。
实验内容及步骤1.水准网平差理论由于存在观测误差,当水准网中有多余观测值时,观测值之间就会存在矛盾,水准网平差的目的是消除矛盾,求得各高程点高程的最可靠值(也叫平差值),并对观测值和平差值进行精度评定。
在参数平差原理的基础上,本实验就选用间接平差结合最小二乘法来进行程序设计。
选用的算例如下如图所示水准网,A、B 、C三点为已知高程点,D、E为未知点,各观测高差及路线长度如下表所列。
(20分)用间接平差法计算未知点D、E的高程平差值及其中误差;C得⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=10111101P ,⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛--=010*********B ,⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛-=⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛------------=+-=⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=7551000)()()()()()()(016015014023022020110654321X H h H X h H X h H X h H X h X X h d BX h l l l l l l l C A B A B2.程序设计思路(1)定义所需的成员变量。
(2)设计数据信息读取程序。
(3)写入平差计算程序。
(4)在平差程序设计过程中添加一个数组运算类,包含平差计算数组相乘、转置、求逆等运算。
(5)设计数据存放输出文件所需程序。
3. 原始数据文件读取格式先在Excel 中填写题中相关的各个信息如观测总数、总点数、已知点数、已知点及点名对应的已知点高程值等。
4.读取数据文件,并将数据存入相应变量。
读取文件:System.Windows.Forms.OpenFileDialog openFile=new System.Windows.Forms.o penFileDialog { };string output;openFile .Filter="文本文件t(.txt)|.txt";逐行读取数据并把它存入相应的变量中。
水准测量八点实验报告数据

水准测量八点实验报告数据一、实验目的本次实验的主要目的是通过水准测量,掌握水准测量的基本原理和方法,了解水准仪的使用及调整方法,提高学生对于测量数据处理和分析能力。
二、实验原理1.水准面:指重力场作用下形成的等势面,即地球表面上某一点处垂直方向上形成的平面。
在水准测量中,我们通常以平均海平面作为基准面。
2.基准点:指在水准测量中选取的一个已知高程值并且稳定不变的点。
3.高程:指某一点与基准面之间垂直距离(正负方向根据相对位置而定)。
4.水准仪:是一种用来测量地表高程差异或者确定两个或多个不同位置之间绝对高度差异的仪器。
常见的有折射式、反射式和数字式等多种类型。
5.视线:是指从水平十分精确地朝向目标物体所发出来反弹回去的光线。
三、实验步骤1.确定起始点与终止点,并在两个点上设置好基准标志物。
2.将水平仪放置在起始点上,调整使其水平。
3.将水准仪移至起始点的基准标志物上,记录下此时的读数。
4.将水准仪移至终止点的基准标志物上,记录下此时的读数。
5.计算出起始点与终止点之间的高差。
四、实验结果1.起始点高程:100.2m2.终止点高程:98.5m3.起始点读数:2.1m4.终止点读数:0.4m5.高差:1.7m五、实验分析通过本次实验,我们可以发现,在进行水准测量时,需要注意以下几个问题:1.要保证测量仪器放置平稳,并且调整到水平状态。
2.要根据实际情况选择合适的基准面,并且在两个测量点上设置好基准标志物。
3.要注意视线是否被障碍物遮挡,以及是否存在反射等干扰因素。
六、实验结论通过本次实验,我们掌握了水准测量的基本原理和方法,了解了水准仪的使用及调整方法。
同时,我们还学习到了如何处理和分析测量数据。
在今后的工作中,我们将更加注重数据处理和分析的准确性,以提高工作效率和测量质量。
水准网平差程序设计

程序设计中的关键问题
数据处理
如何高效地读取和处理大规模数据, 避免内存占用过多或计算效率低下。
算法优化
如何优化算法以提高程序的运行效率, 减少计算时间和资源消耗。
可扩展性
如何设计程序结构,使其具有良好的 可扩展性,便于未来功能扩展和维护。
健壮性
如何提高程序的健壮性,使其能够处 理异常情况,避免因数据错误或异常 输入导致程序崩溃。
05
程序测试与验证
测试环境与测试数据
测试环境
选择合适的硬件和软件环境,确保测试结果的准确性和可靠性。
测试数据
准备充足的水准网平差数据,包括已知的控制点数据和待处理的观测数据,以覆盖各种实际情况。
测试结果分析
精度分析
01
对测试结果进行精度分析,包括闭合差、中误差等指标,评估
程序的精度水平。
效率分析
06
总结与展望
工作总结
完成了水准网平差程序设 计的需求调研和分析,明 确了程序设计的目的和功 能要求。
实现了水准网平差程序的 基本功能,包括数据导入、 平差计算、结果输出等。
ABCD
完成了程序设计方案的制 定,包括算法选择、数据 结构设计和界面设计等。
对程序进行了全面的测试 和调试,确保程序的稳定 性和正确性。
水准网平差程序设计
• 引言 • 水准网平差基础 • 水准网平差程序设计 • 水准网平差程序实现 • 程序测试与验证 • 总结与展望
目录
01
引言
目的和背景
目的
水准网平差程序设计的主要目的是对水准网进行精度分析和优化,以提高测量 数据的准确性和可靠性。
背景
随着测量技术的发展,水准网在各种工程领域中得到了广泛应用,如建筑、水 利和交通等。然而,由于测量过程中存在误差,需要对水准网进行平差处理, 以消除或减小误差的影响。
水准网平差程序

AfxGetApp()->m_pMainWnd->MessageBox( "数据文件不存在或数据文件错!", "进程. . . . . .!!!",MB_OK|MB_ICONSTOP);
//重要说明:原始数据文件中,未知点的高程可以随意输入,也可以不输入空缺, 程序自动把待定点高程赋值为 0
} for(i=ne;i<nz;i++) {
fp.ReadString(buff,MAXLINE); sscanf(buff,"%d%s%lf",&dh,ch1,&gc); dm[i]=ch1;H[i]=0; } for(i=0;i<nn;i++) { fp.ReadString(buff,MAXLINE); sscanf(buff,"%d%d%lf%lf",
教师 评语
// Gckzwpc.cpp: implementation of the CGckzwpc class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "Survey.h" #include "Gckzwpc.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CGckzwpc::CGckzwpc() { } CGckzwpc::~CGckzwpc() { } bool CGckzwpc::ReadData(CString filename) {
水准网实验报告

一、实验目的1. 理解水准测量的基本原理和水准网测量的方法。
2. 掌握水准仪的使用技巧,包括安置、粗平、瞄准、精平和读数。
3. 学会水准网的布设和观测,以及高程计算和闭合差调整。
4. 培养团队协作精神和数据处理的技能。
二、实验时间2023年X月X日三、实验地点XX学院测量实验室四、实验设备1. DS3型水准仪1台2. 双面水准尺2根3. 尺垫2个4. 记录纸若干5. 三角架1个6. 铅笔1支五、实验人员实验小组由8人组成,包括4名操作员、2名记录员和2名扶尺员。
六、实验原理水准测量是利用水准仪和水准尺,通过观测不同点之间的高差来测定地面高程的一种方法。
水准网测量是在一定范围内,通过一系列水准点的高程控制,建立高程系统,用于地形测量、建筑工程、地质勘探等领域。
七、实验步骤1. 水准仪的认识与使用- 安置仪器:将三脚架张开至适当高度,调整架头大致水平,踩实架腿,然后取出仪器并固连在三脚架上。
- 认识仪器:了解仪器各部件的名称、位置、性能和作用,包括望远镜、调整手轮、圆水准器、微调手轮、水平制动手轮、管水准器、水平微调手轮和脚架。
- 粗略整平:通过旋转脚螺旋使圆水准器气泡居中。
- 精平:调整望远镜和水准器,使水准仪达到精确水平。
- 瞄准:转动望远镜,通过目镜调焦螺旋使十字丝清晰,然后用照门和准星瞄准目标。
2. 水准网的布设- 选择合适的水准路线,根据地形条件和精度要求确定水准点的位置。
- 布设水准点,并设置标志。
- 测量水准点间的高差,记录数据。
3. 水准观测- 在水准点间进行往返观测,确保数据的可靠性。
- 记录观测数据,包括前视读数、后视读数和视距。
4. 高程计算- 根据观测数据计算水准点间的高差。
- 根据已知点的高程和计算得到的高差,推算待定点的高程。
5. 闭合差调整- 计算水准网的高程闭合差。
- 根据闭合差的大小和分布情况,对数据进行调整。
6. 成果整理- 整理实验数据,包括观测数据、计算结果和闭合差调整结果。
测绘程序设计—实验八 水准网平差程序设计报告

《测绘程序设计》上机实验报告(Visual C++.Net)班级:测绘0901班学号: 04姓名:代娅琴2012年4月29日实验八平差程序设计基础一、实验目的巩固过程的定义与调用巩固类的创建与使用巩固间接平差模型及平差计算掌握平差程序设计的基本技巧与步骤二、实验内容水准网平差程序设计。
设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。
1.水准网间接平差模型:2.计算示例:近似高程计算:3.水准网平差计算一般步骤(1)读取观测数据和已知数据;(2)计算未知点高程近似值;(3)列高差观测值误差方程;(4)根据水准路线长度计算高差观测值的权;(5)组成法方程;(6)解法方程,求得未知点高程改正数及平差后高程值;(7)求高差观测值残差及平差后高差观测值;(8)精度评定;(9)输出平差结果。
4.水准网高程近似值计算算法5.输入数据格式示例实验代码:#pragma onceclass LevelControlPoint{public:LevelControlPoint(void);~LevelControlPoint(void);public:CString strName;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=SearchPointUsingI D(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_tstof(pstrData[3]);trID==ID){return &m_pKnownPoint[i];}}return NULL;}trID==ID){return &m_pUnknownPoint[i];}}return NULL;}LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID){LevelControlPoint* cp;cp=SearchKnownPointUsingID(ID);if(cp==NULL)cp=SearchUnknownPointUsingID(ID);return cp;}void AdjustLevel::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;}return p;}void AdjustLevel::FormErrorEquation(CMatrix &B, CMatrix &L){(m_iDhObsCount,m_iUnknownPointCount);(m_iDhObsCount,1);for(int i=0;i<m_iDhObsCount;i++)pBackObj->strID);tmpFront=SearchPointUsingID(m_pDhObs[i].cpFrontObj->strID);trID==tmpBack->strID)trID==tmpFront->strID)bsValue-(m_pDhObs[i].cpBackObj->H-m_pDhObs[i].cpFrontO bj->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;CString strFileName=();setlocale(LC_ALL,"");CStdioFile sf;if(!(strFileName, CFile::modeCreate|CFile::modeWrite)) return;(LevleContent);();UpdateData(FALSE);}void CIndircLelveDlg::OnBnClickedComputelevel(){f\r\n"), [i].strID,[i].H);LevleContent+=Temp;}(_T("单位权中误差:%.1f mm\r\n"),r0*1000);LevleContent+=Temp;LevleContent+=_T("未知点高程中误差(mm):\r\n");for(int i=0;i< ;i++){();(_T("%s,%.1f\r\n"),[i].strName,Qx[i]*1000);LevleContent+=Temp;}UpdateData(false);}void CIndircLelveDlg::OnBnClickedSavelevleresult(){xt"));if()==IDCANCEL) return;CString strFileName=();setlocale(LC_ALL,"");CStdioFile sf;if(!(strFileName, CFile::modeCreate|CFile::modeWrite)) return;(LevleContent);();UpdateData(FALSE);}三、实验结果打开文件数据:平差结果:四、实验心得这从实验是我们测绘程序设计的最后一次实验,虽然这个学期我们做了好几次相关的实验,但是我却发现自己学的东西也越来越模糊,感觉很多内容都不理解。
测绘程序设计课程实习报告

一、实习目的在测绘工作与科学研究中,很多情况都需要用计算机,测绘工程所涉及的数据计算、绘图、数据库管理、数据分析等,都可以用计算机来完成。
因此,本次课程实习的内容主要集中在测绘工程的相关计算上,其中,主要学习关于平差计算的程序设计问题上。
实习目的在于增强我们对误差理论与测量平差基础理论的理解,牢固掌握测量平差的基本原理和基本公式,熟悉测量数据处理的基本技能和计算方法,灵活准确地应用于解决各类数据处理的实际问题,并能用所学的计算机理论知识,编制简单的计算程序。
二、实习内容(一)高级程序语言应用1.编译软件安装,输出“Hello,World”2.角度与弧度互化3.文件读写操作4.矩阵加、减、乘及转置程序5.矩阵求逆程序(二)测量平差模型实现1.间接平差模型公式及程序实现,实例验证。
2.条件平差模型公式及程序实现,实例验证。
(三)测量综合实例解算1.水准网平差三、实习过程(一)实习1(角度与弧度互化)1.准备(1)第一步分析设计:使用double类型数据表示角度制数和弧度制数。
例如:120度40分56秒,用double类型表示为120.4056,其中分、秒根据小数位确定。
(2)第二步角度化为弧度的公式为:弧度值=角度值/180×π,角度值=弧度值×180÷π2.实现编写代码,实现角度与弧度互化功能。
3.改善角度转换过程中需要考虑角度的正负号问题,角度转化可以添加是否超过59的判断。
4.计算结果(二)实习2(文件读写操作)1.准备C++文件流:fstream 文件流,ofstream输出文件流,ifstream输入文件流。
在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:void open(const char* filename,int mode,int access);参数:filename:要打开的文件名mode:要打开文件的方式access:打开文件的属性打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:ios::app:以追加的方式打开文件ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性ios::binary:以二进制方式打开文件,缺省的方式是文本方式。
水准网平差程序设计

水准网平差程序设计水准测量是现今城市测量工作中测定高程和对建筑物进行变形观测常用的测量方法。
水准网平差的目的在于依据最小二乘原理,消除观测之间的矛盾和不符值,进而求出点的最后高程及评定精度,编制相应的计算程序,实现水准网的自动平差,才能提高计算效率,然而近似高程的自动推算、闭合差的计算、以及误差方程、法方程的列立解算是程序设计的重点和难点。
标签:水准网平差;高程;程序设计1 数据库的建立1.1 建立建网信息表格建网信息表用于保存建网信息。
1.2 建立观测高差录入表格记录高差和高差起点终点点号和两点之间的距离。
1.3建立已知高程录入表格记录高程用于以后计算。
1.4建立平差成果表用于记录和输出结果。
2 应用软件用户界面的设计本程序共设计了五个窗体,分别为主窗体,建网信息输入窗体,测量高差输入窗体,已知高程输入窗体,平差计算结果显示窗体。
其中主窗体是程序的启动窗体,所有窗体都从主窗体界面弹出。
建网信息输入窗体用于输入项目名称,测量单位,负责人,测量范围,备注信息,并于数据库连接。
测量高差输入窗体用于输入高差观测值和路线长度,并和数据库连接。
已知高程输入窗体用于输入已知高程,并连接数据库。
平差计算结果显示窗体聚集了大部分的算法,包括待定点高程计算,误差方程和法方程的列立,法方程的运算等等,并通过DataGrid控件输出。
3 程序算法的基本思想及部分代码3.1 高程控制网间接平差的步骤(1)计算待定点的近似高程X=(x1,x2 …)T;(2)列出误差方程;(3)组成法方程;(4)解算法方程,求得dX=(dx1,dx2 …)T;(5)求得平差后的高程X=X+dX;(6)精度评定。
3.2 网形的编号及部分变量的定义3.2.1 网形编号为了使编程更加方便,首先约定各高程点编号由小到大按自然数的顺序编码,不可重复也不可缺少。
已知点优先于待定点,靠近已知点的待定点编号要尽量小。
3.2.2 部分变量定义Option Base 1Public IKP As Integer’已知点点个数;Public IUP As Integer’未知点点个数;Public IQ As Integer’总点个数;Public IOH As Integer’高差观测数;Public IZ As Integer’必要观测数。
水准网平差程序设计

水准网平差程序设计水准网平差是测绘工程中的一项重要工作,它涉及到对水准测量数据进行处理,以达到测量精度的要求。
水准网平差程序设计通常需要考虑以下几个方面:1. 程序设计的目的和意义水准网平差程序设计的主要目的是通过计算机软件对水准测量数据进行自动化处理,提高数据处理的效率和准确性。
这对于大型工程测量、城市基础设施建设、土地管理等领域具有重要意义。
2. 程序设计的基本要求- 准确性:程序需要能够准确地处理水准测量数据,减少人为误差。
- 稳定性:程序在运行过程中应具有较高的稳定性,避免因系统崩溃等原因导致数据丢失。
- 用户友好性:程序应具备良好的用户界面,使得非专业用户也能方便地使用。
- 扩展性:程序设计应考虑未来可能的功能扩展,以适应不断变化的测量需求。
3. 程序设计的理论基础水准网平差程序设计的理论基础主要包括:- 水准测量原理:了解水准测量的基本原理,包括视线高、转点高、已知点高程等概念。
- 误差理论:掌握测量误差的来源、分类及其对测量结果的影响。
- 最小二乘法:水准网平差通常采用最小二乘法进行数据处理,需要理解其数学原理和应用方法。
4. 程序设计的关键技术- 数据输入:设计高效的数据输入界面,支持多种数据格式的导入。
- 数据处理:实现数据的自动校验、筛选和处理功能。
- 平差计算:编写平差计算算法,包括闭合差计算、误差分配等。
- 结果输出:设计结果输出模块,支持多种输出格式,如文本、图表等。
5. 程序设计的实现步骤1. 需求分析:明确程序设计的目标和用户需求。
2. 系统设计:设计程序的整体架构,包括模块划分、数据流等。
3. 编码实现:根据设计文档进行编码,实现各个功能模块。
4. 测试验证:对程序进行测试,确保其准确性和稳定性。
5. 用户手册编写:编写用户手册,指导用户如何使用程序。
6. 程序设计的注意事项- 数据安全:确保程序在处理数据时的安全性,防止数据泄露。
- 异常处理:程序应能妥善处理各种异常情况,如数据格式错误、计算溢出等。
测绘程序设计实习报告

测量程序设计实习报告:XX班级:XXXX学号:XXXX教师评语:实验名称:使用C#开发环境建立测量程序框架一、实验的目的与任务:(1)学会用C#窗体程序开发环境建立应用程序框架方法(2)学会使用常见的Windows控件(3)根据自身需要设计一个测量程序界面二、实验的过程与步骤:1、首先打开visual studio 2010,选择文件→新建→项目。
在弹出的对话框中右栏一侧选择windows窗体应用。
选择文件存放地址,输入项目名称,点击确定,完成。
2、拖动menuSctrip控件到主窗体,并且键入“文件”、“工具”两个选项,在“文件”下添加一个“打开”选项;在“工具”下添加“近似平差计算”、“高斯消元”两个选项。
3、选择项目→添加windows窗体,输入窗体名称“CLSJ”,点击确定。
4、在CLSJ窗体中拖入SplitContainer控件,将窗体分为左右两部分,调整大小。
在拖入一个“TabControl”,新建选项卡。
最后,加入“Button”、“TextBox”、“Label”控件。
5、用相同的方法,新建一个名为高斯消元的窗体,然后按照需要进行设计。
三、程序运行效果四、本实验心得体会这是第一次接触这种可视化开发编程,刚开始不是很熟悉,对于编程语言来说,在掌握一定语法之后,要多用,多结合实际进行一些简单编程,这样才能提高对一种编程语言的理解。
实验名称:导线计算程序设计及粗差探测一、实验的目的与任务:(1) 掌握方位角计算的程序设计方法(2)掌握符合导线、闭合导线、支导线计算的程序设计方法(3)理解粗差探测的程序设计方法二、实验的设计与开发步骤:1、考虑到在测量时所用的角度均为度分秒,而在c#计算时只是别度分秒,因此先设计两个函数,可以将度分秒和弧度制进行转化。
2、其次先写一个point 类,包含x ,y 两个成员变量,然后在设计一个方位角函数,用两个point 类当作形参传递进去,根据方位角计算公式παk xy +∆∆=arctan ,(根据象限角和方位角关系对k 进行调节)应该分为四种情况,但是考虑到分母不为0,因此应该在加一种情况,即导线与y 轴重合。
最新测绘程序设计实验报告

最新测绘程序设计实验报告实验目的:本实验旨在通过设计和实现最新的测绘程序,提高学生对测绘技术和程序设计的理解,同时培养学生的编程能力和解决实际问题的能力。
通过实验,学生将学习到如何运用现代测绘方法和编程技巧,有效地处理地理信息数据,并生成精确的地图。
实验内容:1. 测绘数据采集:使用全球定位系统(GPS)和遥感技术收集地理信息数据。
2. 数据处理与分析:利用地理信息系统(GIS)软件对采集的数据进行处理和分析,包括数据清洗、格式转换和误差分析。
3. 程序设计:基于Python或C++等编程语言,设计测绘程序,实现数据的自动化处理和地图的生成。
4. 地图生成:通过编写的程序,生成二维或三维地图,并进行可视化展示。
5. 实验评估:对生成的地图精度和程序性能进行评估,提出改进意见。
实验步骤:1. 确定实验目标和所需数据类型。
2. 选择合适的测绘工具和GIS软件。
3. 设计程序架构,编写程序代码。
4. 运行程序,输入测绘数据,进行数据处理。
5. 生成地图,并对地图进行校验和修正。
6. 撰写实验报告,总结实验过程和结果。
实验结果:通过本次实验,成功设计并实现了一个测绘程序。
该程序能够自动处理GPS和遥感数据,生成精确的地图。
实验中发现,程序在处理大规模数据时效率较高,但在数据清洗阶段需要进一步优化以提高准确性。
生成的地图清晰度高,满足了实验的基本要求。
结论:本次实验验证了所设计测绘程序的有效性,通过实际应用,程序能够满足基本的测绘需求。
未来的工作将集中在提高程序的数据处理能力和用户交互体验上,以适应更复杂的测绘任务。
此外,还需探索如何将人工智能技术集成到测绘程序中,进一步提升地图生成的智能化水平。
(整理)测绘程序设计

测绘程序设计课程实习报告一、实习目的《测量平差程序设计》是在我们学习了专业基础课《误差理论与测量平差基础》课程后将测量平差和计算机程序设计等课程的综合实践与应用的一门课程。
其目的是在我们学习过平差这门课后增强我们对误差理论与测量平差基础理论的理解,巩固已掌握的测量平差的基本原理和基本公式以及计算方法,熟悉测量数据处理的基本技能,培养我们正确应用公式、综合分析问题和解决问题的能力,并能能够熟练运用所学过的C++语言,使平差理论与计算机结合起来,将主要的条件平差、间接平差以及水准网平差计算方法过程编写成一般形式的程序用于数据处理,灵活准确的应用于解决各类数据处理的实际问题当中,为我们今后步入工作岗位打下了一定的基础。
二、实习内容本课程要求我们熟练运用测量平差的基本公式与计算方法和拥有基本的C++编程能力,以自由组成3-4人小组的方式共同学习,在老师的指导下能够按照要求由简至繁完成以下程序。
(一)角弧之间的相互转化复习基本的C++内容、程序结构及编写方法,保证任意角度弧度之间可转化及其转化精度。
(二)文件的读入输出在程序外部建立文本文档输入数据使程序具有一般性并且不需要在执行程序时进行输入,同时在程序运行后结果自动生成文件保存。
(三)概率运算根据已知题目以及程序进行加以更改调试,建立文本文档读入文件计算标准正态分布函数、B分布的分布函数等概率函数。
(四)矩阵运算实现矩阵的基本加、减、乘、转置及求逆运算,为接下来平差运算程序解决基本运算问题。
(五)条件平差与间接平差利用之前以编写过的基本程序,以及平差的公式与算法,根据例题编写程序计算条件平差与间接平差(二者具有一定相似度)。
(六)水准网平差首先利用已知的例题以及水准网计算公式和算法编写特殊可解的水准网平差,再在其基础上编写一般形式具有广泛应用的普通程序。
在将以上基本任务都完成之后还可以进一步编写GPS向量网等。
三、实习过程(一)角弧之间的相互转化1.编程思路:首先在头文件中要注明#include<cmath>保证程序中的数学运算合理,然后建立一个角度是否合理判断的函数,在其中将角度的度、分、秒分别用三个double型变量a、b、c表示,将输入或计算出的角度改正成合理的形式(分和秒都小于60大于0),如将30°66´27"化成31°6´27" 以及角度的正负。
毕业设计--水准网条件平差程序设计[管理资料]
![毕业设计--水准网条件平差程序设计[管理资料]](https://img.taocdn.com/s3/m/90bd54d32f60ddccdb38a0d9.png)
本科生毕业设计说明书(毕业论文)题目:水准网条件平差程序设计水准网条件平差程序设计摘要近年来,随着我国经济的快速发展,国家大力于投资各种铁路建设和公路建设,测绘工程的运用也越来越突出。
以水准网布设的高程控制网在各类工程中随处可见。
但观测到的数据存在着各种各样的误差,这就需要我们通过简易平差或严密平差来对数据进行处理,从而使数据能够达到工程的预期精度。
本文主要研究如何解决绘图软件行业标准的网络数据处理问题。
从水准网的结构,平差基本原理、调整模型,基本方程及其解,并对法方程组成,求解,平差值的计算及其精度评定作了介绍。
和Visual ,利用C语言是程序设计的相干事情。
在今后的测量工作中,可结合实际平差方案进行平差计算。
关键词:平差模型;精度评定;程序设计Leveling Network Adjustment Program DesignAbstractIn recent years, with China's rapid economic development, the state vigorously investment in all kinds of railway construction and road construction, the use of mapping project is also more and more prominent. In order to control the network level network in various engineering in everywhere. But the observed data exist various error, this needs us through simple adjustment or rigorous adjustment for data processing, so that data to achieve the desired precision engineering.This paper mainly studies how to solve the problem of mapping software industry standard network data processing. From the structure adjustment of leveling network, the basic principle, adjustment model, basic equation and its solution, and the composition of the solution of equations, adjustment calculation and precision evaluation, gross error elimination are introduced as well. And the use of Visual programming software, using C programming language is related to program design. The measurement work in the future, can be combined with the actual adjustment adjustment calculation.Key words: adjustment model;the accuracy assessment;program design目录摘要 (I)Abstract .......................................................................................................................... I I 第一章绪论 (1) (1) (2) (2)第二章条件平差数学模型 (3)条件平差模型 (3) (6) (8) (11) (13) (17)第三章水准网的设计 (18) (18) (18) (19) (19) (20)第四章C语言介绍 (21) (21) (22) (22)第五章程序设计 (24)水准网条件平差和测角网条件平差实例 (24) (24) (27) (32)参考文献 (57)附录A:外文文献 (57)附录B:中文译文 (69)致谢 (74)第一章绪论施工测量工作是非常基本的,重要环节。
测绘程序设计课程实习报告模板

一、实习目的《测绘程序设计》是一门理论与实践并重的课程,课程设计是测量数据处理理论学习的一个重要实践环节,可以看做是在学习了专业基础理论课《误差理论与测量平差基础》课程后进行的一门实践课程,其目的是增强学生对测量平差基础理论的理解,牢固掌握测量平差的基本原理和公式,熟悉测量数据处理的基本原理和方法,灵活准确地应用于解决各类数据处理的实际问题,回顾所学习过的数据结构、C++高级语言程序设计、误差理论与平差基础、概率统计等课程知识,并能用所学的计算机知识,编制程序来计算实现矩阵(数组)、条件平差/ 间接平差以及水准网东平差的运算。
二、实习内容1、了解角度值与弧度制的关系,编写简单的程序,实现角度制与弧度制的相互转化;2、结合C++高级语言程序设计和数据结构,回顾矩阵的运算(矩阵的加减法、矩阵的乘法、矩阵的转置、矩阵的求逆),矩阵的运算是进行平差的主要程序,无论是哪一种平差模型,都不可或缺。
因此,编写程序实现矩阵的运算十分重要。
3、在实现矩阵的运算之后,学会文件的读写操作,再加上一些程序实现间接平差/条件平差的运算4、在已实现的间接平差程序上实现水准网平差,将观测数据输入到文本,学会从观测数中读取相关矩阵。
三、实习过程(一)角度与弧度的相互转化C++程序设计中,关于角度的计算以弧度制为单位,而在测量以及具体工作中我们通常习惯以角度制为单位。
这样,在数据处理中,经常需要在角度制与弧度制之间进行相互转化。
这里,我们利用C++数学函数库math.h中的相关函数完成这两种功能。
这里,我们使用double类型数据表示角度制数和弧度制数。
例如:123度44 分58.445秒,用double类型表示为123.4458445,其中分、秒根据小数位确定。
在角度制与弧度制的转化中,涉及如下图所示的两个环节。
程序设计基本思想:应用角度与弧度的比例关系,进行相互转化。
JD(角度)=HD (弧度)*180/ n ;HD(弧度)=JD(角度)* n /180(二)文件读写操作1. 思路及方法:头文件#include<fstream>,以test.text 文件为例(1)读取文件:ifstream fin ;fin.open( “test.txt ”) 检查是否正常打开.is_open()) ;if(fin.is_open()) ;if(fin.fail())if(!fin.good()) ;if(!fin) ;读取文件的下一行;fin.getline(buf,90); ;getline(fin,line);( 2)关闭文件:fin.close(); 将数据写入文件ofstream fout;fout<<data;fout.close();使用之前要先检查文件是否正常打开,结束以后要记得关闭文件。
测绘程序设计(VS2008)实验报告--文件操作

《测绘程序设计()》上机实验报告(Visual C++.Net)实验5 文件班级:学号:姓名:序号:二零一零年四月实验5 文件一、实验目的∙掌握文件对话框的使用方法。
∙掌握C++文件操作的一般步骤及实现方法。
∙了解MFC文件操作的特点及使用方法。
二、实验内容1. 编制简单的Cass数据文件进行数据整理的程序。
整理后的数据文件中要求无重复点数据,且数据按点号大小的升序进行排序。
要求整理后的数据按与原始数据文件同样的格式保存为另外一个文件要求:a.用SaveFileDialog和OpenFileDialog控件获取文件打开或保存的文件名。
b.自定义一个测量点数据结构体,其元素包括:点号,编码,X,Y,Hc.用文本框显示原始数据和整理后的数据d..按编程规范进行编码设计思路:1)自定义一个测量点数据结构体,其元素包括:点号,编码,X,Y,H2)定义一个分割函数用来分割数据3)打开文件,将测量点的数据值赋给点的结构体数组4)通过比较结构体元素的异同删除重复点,获得新的总点数5)按点号大小的升序排列6)将新排好的数据输出到另一个文本框中,并保存于文件中。
界面设计:共2个文本框、2个Group Box控件、2个命令按钮。
主要代码:FileDlg.cpp//定义点的结构体#define POINT struct pointPOINT{int iDotmark;CString strCode;double X;double Y;double Z;};void CFileDlg::OnBnClickedOpenfile(){// TODO: 在此添加控件通知处理程序代码CFileDialog dlgFile(TRUE,_T("txt"),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T("(文本文件)|*.txt"));if(dlgFile.DoModal()==IDCANCEL) return;CString strFileName=dlgFile.GetPathName();setlocale(LC_ALL,"");CStdioFile sf;if(!sf.Open(strFileName, CFile::modeRead)) return;CString strLine;strPriData.Empty();BOOL bEOF=sf.ReadString(strLine);while(bEOF){strPriData+=strLine;bEOF=sf.ReadString(strLine);if(bEOF) strPriData+=_T("\r\n");}sf.Close();//整理原始数据并在右边编辑框中输出//UpdateData(TRUE);int iLine;//分行并存入字符串数组CString *pstrLine=SplitString(strPriData,'\n',iLine);int iTotalPoint; //总点数CString *strTmp=NULL;int n;iTotalPoint = _ttoi(pstrLine[0]); //第一行为总点数if(iTotalPoint!=iLine-1)MessageBox(_T("数据格式有误"));POINT *pPoint=new POINT[iTotalPoint]; //结构体指针,指向点结构体//逐行用Split函数分离,给点结构体赋值for(int i=0;i<iTotalPoint;i++){strTmp = SplitString(pstrLine[i+1], ',',n);pPoint[i].iDotmark = _ttoi(strTmp[0]);pPoint[i].strCode = strTmp[1];pPoint[i].X = _tstof(strTmp[2]);pPoint[i].Y = _tstof(strTmp[3]);pPoint[i].Z = _tstof(strTmp[4]);if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}}if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}//删除重复点for(int i=0;i<iTotalPoint;i++){for(int j=i+1;j<iTotalPoint;j++){if(pPoint[i].iDotmark ==pPoint[j].iDotmark){//delete pPoint;for(int k=j;k<iTotalPoint-1;k++){pPoint[k]=pPoint[k+1];}iTotalPoint--;}}}//按点号的升序排列/*POINT min=pPoint[0];*/for(int i=0;i<iTotalPoint;i++){for(int j=i+1;j<iTotalPoint;j++){if(pPoint[i].iDotmark>pPoint[j].iDotmark){POINT t=pPoint[i];pPoint[i]=pPoint[j];pPoint[j]=t;} }}//输出调整后的数据strTidyData.Format(_T("%d\r\n"),iTotalPoint);CString strOutput;for(int i=0;i<iTotalPoint;i++){strOutput.Format(_T("%d,%s,%f,%f,%f\r\n"),pPoint[i]);strTidyData=strTidyData+strOutput;}UpdateData(FALSE);//释放内存if(pPoint!=NULL){delete[] pPoint;pPoint=NULL;}}void CFileDlg::OnBnClickedSavefile(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);CFileDialog dlgFile(FALSE,_T("txt"),NULL,OFN_EXPLORER,_T("(文本文件)|*.txt"));if(dlgFile.DoModal()==IDCANCEL) return;CString strFileName=dlgFile.GetPathName();setlocale(LC_ALL,"");CStdioFile sf;if(!sf.Open(strFileName, CFile::modeCreate|CFile::modeWrite)) return;sf.WriteString(strTidyData);sf.Close();}CString *CFileDlg::SplitString(CString str, char split, int& iSubStrs) {int iPos = 0; //分割符位置int iNums = 0; //分割符的总数CString strTemp = str;CString strRight;//先计算子字符串的数量while (iPos != -1){iPos = strTemp.Find(split);if (iPos == -1){break;}strRight = strTemp.Mid(iPos + 1, str.GetLength());strTemp = strRight;iNums++;}if (iNums == 0) //没有找到分割符{//子字符串数就是字符串本身iSubStrs = 1;return NULL;}//子字符串数组iSubStrs = iNums + 1; //子串的数量= 分割符数量+ 1CString* pStrSplit;pStrSplit = new CString[iSubStrs];strTemp = str;CString strLeft;for (int i = 0; i < iNums; i++){iPos = strTemp.Find(split);//左子串strLeft = strTemp.Left(iPos);//右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetLength());strTemp = strRight;pStrSplit[i] = strLeft;}pStrSplit[iNums] = strTemp;return pStrSplit;}运行结果:操作过程:单击“打开原始数据”,选择原始数据所在的文本文件,自动输出原始数据及整理后的数据,单击“保存整理后的数据”,选择保存路径,确定文件名,单击保存即可。
测绘程序设计基础实验报告

测绘程序设计基础实验报告1.引言本实验旨在通过测绘程序设计基础实验,加深对测绘程序设计基本概念及其应用的理解。
在实验中,我们将学习如何使用测绘程序设计工具,结合实际测绘数据进行计算、分析和可视化展示。
本报告将详细介绍实验背景、实验过程和实验结果,并总结实验中的收获与体会。
2.实验背景测绘程序设计是测绘工程的重要组成部分,它利用计算机技术和数学方法对大量的测量数据进行处理和分析,以实现对地理信息的精确描述与快速获取。
测绘程序设计的基础是计算机编程和地理测量学知识,因此对编程基础和地理测量学的了解是进行测绘程序设计的前提。
为了培养学生对测绘程序设计的理解和应用能力,本实验将通过设计测绘程序,实现对实际测绘数据的处理和分析。
通过这个实验,我们将进一步了解测绘程序设计的基本原理和实际应用。
3.实验过程3.1 实验准备在开始实验之前,我们需要准备以下工具和材料:•计算机•测绘软件•实验数据3.2 实验步骤1.下载并安装测绘软件,根据官方提供的安装指南完成软件的安装。
2.运行测绘软件,新建一个项目,在项目中导入实验数据。
3.使用测绘软件提供的分析工具,对实验数据进行计算和处理。
4.根据实验要求,设计测绘程序,实现对实验数据的处理和分析。
5.在测绘软件中运行测绘程序,获取处理后的数据。
6.根据实验要求,将处理后的数据可视化展示。
7.完成实验报告,总结实验过程和结果。
3.3 实验注意事项在进行实验过程中,需要注意以下几点:•确保测绘软件和测绘程序的兼容性,避免出现兼容性问题导致实验失败。
•仔细阅读实验要求,确保程序设计符合要求并能够正确处理和分析实验数据。
•注意数据质量和精度,对实验数据进行必要的清洗和校验。
4.实验结果根据实验要求,我们设计了一个测绘程序,用于对实验数据进行处理和分析。
经过运行程序并在测绘软件中查看结果,我们得到了以下实验结果:•处理后的数据结果清晰可见。
•分析结果准确,符合实验要求和设计要求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
测绘程序设计实验八水准网平差程序设计报告
Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】
《测绘程序设计》上机实验报告
(Visual C++.Net)
班级:测绘0901班
学号: 04
姓名:代娅琴
2012年4月29日
实验八平差程序设计基础
一、实验目的
巩固过程的定义与调用
巩固类的创建与使用
巩固间接平差模型及平差计算
掌握平差程序设计的基本技巧与步骤
二、实验内容
水准网平差程序设计。
设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。
1.水准网间接平差模型:
2.计算示例:
近似高程计算:
3.水准网平差计算一般步骤
(1)读取观测数据和已知数据;
(2)计算未知点高程近似值;
(3)列高差观测值误差方程;
(4)根据水准路线长度计算高差观测值的权;
(5)组成法方程;
(6)解法方程,求得未知点高程改正数及平差后高程值;
(7)求高差观测值残差及平差后高差观测值;
(8)精度评定;
(9)输出平差结果。
4.水准网高程近似值计算算法
5.输入数据格式示例
实验代码:
#pragma once
class LevelControlPoint
{
public:
LevelControlPoint(void);
~LevelControlPoint(void);
public:
CString strName;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=Sea rchPointUsingID(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_tstof(pstrData[3]);trID==ID) {return &m_pKnownPoint[i];}
}
return NULL;
}
trID==ID)
{return &m_pUnknownPoint[i];}
}
return NULL;
}
LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID)
{
LevelControlPoint* cp;
cp=SearchKnownPointUsingID(ID);
if(cp==NULL)
cp=SearchUnknownPointUsingID(ID);
return cp;
}
void AdjustLevel::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;
}
return p;
}
void AdjustLevel::FormErrorEquation(CMatrix &B, CMatrix &L)
{
(m_iDhObsCount,m_iUnknownPointCount);
(m_iDhObsCount,1);
for(int i=0;i<m_iDhObsCount;i++)pBackObj->strID);
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;
CString strFileName=();
setlocale(LC_ALL,"");
CStdioFile sf;
if(!(strFileName, CFile::modeCreate|CFile::modeWrite)) return;
(LevleContent);
();
UpdateData(FALSE);
}
void CIndircLelveDlg::OnBnClickedComputelevel()
{
f\r\n"), [i].strID,[i].H);
LevleContent+=Temp;
}
(_T("单位权中误差:%.1f mm\r\n"),r0*1000);
LevleContent+=Temp;
LevleContent+=_T("未知点高程中误差(mm):\r\n");
for(int i=0;i< ;i++)
{
();
(_T("%s,%.1f\r\n"),[i].strName,Qx[i]*1000);
LevleContent+=Temp;
}
UpdateData(false);
}
void CIndircLelveDlg::OnBnClickedSavelevleresult()
{
xt"));
if()==IDCANCEL) return;
CString strFileName=();
setlocale(LC_ALL,"");
CStdioFile sf;
if(!(strFileName, CFile::modeCreate|CFile::modeWrite)) return;
(LevleContent);
();
UpdateData(FALSE);
}
三、实验结果
打开文件数据:
平差结果:
四、实验心得
这从实验是我们测绘程序设计的最后一次实验,虽然这个学期我们做了好几次相关的实验,但是我却发现自己学的东西也越来越模糊,感觉很多内容都不理解。
这次
的实验很大程度上我都是按照《测绘程序设计》上面单导线简易计算来编的,在加上后面的关于水准网间接平差的误差方程和法方程,以及精度评定的相关函数,来完成的。
而自己主要完成的就是水准网的数据读取,保存的操作,由于这部分主要用的知识是文件的读取的,因为前面做过,所以不是太难。
但是这并不意味着这次实验很简单,至少在我心中这的确比较难,因为里面很多东西不是纯粹的把代码写上去就可以完成,还要靠自己做相应的代码对应,才能够真正的得到想要的结果。
但学好编程并扎实的为自己所用是需要更多的学习和练习的,我知道在掌握课堂知识的同时,主动的去寻找吸收相关的知识,希望通过本门课程的学习,掌握学习编程的方法,使自己的水平能够更进一步,循序渐进的掌握更多。
虽然这门课的实验已经结束,但是我却深深地知道,我们专业对编程的要求很高,而且必须具备较好的编程能力,或许这些日子下来,我学到的不是很多,但是我或多或少明白,编程是一个循序渐进的过程,我想真的能够在这方面有所突破,就更要花时间多花工夫。