测绘程序设计实验八水准网平差程序设计报告模板
测绘程序设计—实验八-水准网平差程序设计报告

《测绘程序设计()》上机实验报告(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
水准网平差程序设计.ppt

2.2 数据存储方案设计
这里的数据存储是指数据在内存中的存储。
测量平差程序中用到的数据较多,一般先将磁盘
中的数据读到内存中,按照不同的类别有序地放
在变量或数组中,然后再进行平差计算,最后将 计算结果写到磁盘文件中。
三、水准网平差界面设计
要整洁、简练、实用、方便有关数据的输入 或输出,必要的话要考虑和用户的交互,尽量不 要画蛇添足。
第三章
水准网平差程序设计
本章难点: 1、近似高程计算 2、最短路线的计算
3、误差方程及法方程的构建
4、直接计算出法方程的系数矩阵BTPB和常 数矩阵BTPL
一、水准网间接平差算法概述
该课程中所采用的平差模型为间接平差,即所 选的独立参数的个数等于必要观测数,这样可以 将每个观测值表示成这t个参数的函数,组成观测 方程。 L B X d 间接平差的函数模型: n ,1 n ,t t ,1 n ,1 0 平差时一般对所选参数取近似值 X X x 代入上式 并令 l L ( BX 0 d ) L L0
1)基本信息部分:该部分仅占一行,其内容为
已知点数N1,未知点数N2,高差观测值个数NS。
2)已知点高程信息:该部分占N1行,每行格式为
已知点编号,该点的高程(单位:米)。 注意:在给控制点编号时,先给待定点编号,然后 给已知点编号。编号从1开始顺序编号。 3)高差观测值信息:该部分占NS行,每行格式为 测段编号,测段起点编号,测段终点编号,测段观 测高差(单位:米),测段长度(单位:千米)。 4)点名信息:该部分占N(N=N1+N2)行,每行 格式为 水准点编号,该点名称 其中点名长度不超过8个字符,即4个汉字。但最好 用字符串命名。
式中,正负号取决于高差起始点到终点的方向与 推算路线是否一致。
水准网平差报告

控制网平差报告[控制网概况]1、本成果为按[平面]网处理的平差成果计算软件:南方平差易2002网名DD 计算日期:日期: 2012-10-30观测人:DD记录人:DD计算者:DD测量单位:DD备注:DD2、高程控制网等级:国家四等每公里高差中误差= 28.52 (mm)起始点高程BM1 202.2520(m)BM3 219.0870(m)BM4 218.3180(m)BM5 250.6730(m)BM6 251.1200(m)BM7 235.3090(m)BM8 239.5890(m)闭合差统计报告[高差观测成果表]测段起点号测段终点号测段距离(m)测段高差(m) BM1D122.7700-0.8550D1D2-1235.3210-0.7560D2-1D3264.6550 2.5700D3DJ1359.72900.2900DJ1DJ3-1310.8500-0.6030DJ3-1DJ3-2278.4340 1.2040DJ3-2DJ4355.21207.5590DJ4D4-3279.6750 4.8860 D4-3D4-9243.3920 3.3560 D4-9BM320.2990-0.8060 D4-9D4-6165.7780-0.1780 D4-6D4-7247.2420 5.2640 D4-7D4-8135.48100.1560 D4-8D574.6400 5.8600 D5DJ5197.3660-4.8600 DJ5BM455.6910-7.8140 DJ5D6350.8760 1.0790 D6DJ6115.23400.4370 DJ6DJ7254.108012.5740 DJ7DJ8326.961012.7980 DJ8BM5244.3930-2.3740 BM5D8-1122.7210 6.7000 BM5BM5-2208.18200.2370 BM5BM5-140.8900 2.2970 D8-1D8187.6190 2.9480 D8D9119.5410-3.3120 D9D10171.1460-9.0660 D10D10-1105.9030-3.9100 D10-1D10-2197.02607.1310 D10-2D11-188.756011.6560 D10-2BM6 5.6580-0.0220 D11-1D12218.4040 2.4280 D12DJ12-2222.6090-2.7720 DJ12-2D14349.1460-25.7690 D14DJ10197.0550 1.2570 DJ10D14-1204.7830-6.4260 D14-1BM7125.1880 3.8020 D14-1D17-1241.3300 4.5670 D17-1D18312.0370-3.2480 D18DJ11398.145014.9810 DJ11DJ12137.2000-6.7920 DJ12D22404.33800.9930 D22-1D23-1190.6870 2.3260 D22-1BM886.4370-2.4990 D23-1D23-2115.52007.2020 D23-2D23-331.9800 3.0420 D23-3D25-153.0970 3.9940 D25-1D25-299.3300 5.4040 D25-2D2695.1650 3.2110 D26D26-1174.386016.1720D26-1D29143.0860-7.4220 D29D30-1118.4190 2.0050 D30-1D3183.1170 2.4510[高程平差结果表]点号高差改正数(m)改正后高差(m)高程中误差(m)平差后高程(m)备注BM10.0000202.2520已知点D1-0.0001-0.85510.0030201.3969D10.0030201.3969D2-1-0.0010-0.75700.0097200.6399D2-10.0097200.6399D3-0.0011 2.56890.0129203.2088D30.0129203.2088DJ1-0.00150.28850.0150203.4973DJ10.0150203.4973DJ3-1-0.0013-0.60430.0155202.8929DJ3-10.0155202.8929DJ3-2-0.0012 1.20280.0151204.0958DJ3-20.0151204.0958DJ4-0.00157.55750.0130211.6533DJ40.0130211.6533D4-3-0.0012 4.88480.0098216.5381D4-30.0098216.5381D4-9-0.0010 3.35500.0028219.8930D4-90.0028219.8930BM3-0.0000-0.80600.0000219.0870已知点D4-90.0028219.8930D4-6-0.0004-0.17840.0077219.7147D4-60.0077219.7147D4-7-0.0005 5.26350.0095224.9781D4-70.0095224.9781D4-8-0.00030.15570.0092225.1338D4-80.0092225.1338D5-0.0002 5.85980.0086230.9937D50.0086230.9937DJ5-0.0004-4.86040.0045226.1332DJ50.0045226.1332BM4-0.0012-7.81520.0000218.3180已知点DJ50.0045226.1332D60.0070 1.08600.0107227.2192D60.0107227.2192DJ60.00230.43930.0114227.6585DJ60.0114227.6585DJ70.005112.57910.0116240.2376DJ70.0116240.2376DJ80.006512.80450.0090253.0421DJ80.0090253.0421BM50.0049-2.36910.0000250.6730已知点BM50.0000250.6730已知点D8-1-0.0030 6.69700.0066257.3700BM50.0000250.6730已知点BM5-2-0.00000.23700.0092250.9100BM50.0000250.6730已知点BM5-1-0.0000 2.29700.0041252.9700D8-10.0066257.3700D8-0.0045 2.94350.0091260.3135D80.0091260.3135D9-0.0029-3.31490.0096256.9986D90.0096256.9986D10-0.0041-9.07010.0091247.9285D100.0091247.9285D10-1-0.0026-3.91260.0080244.0159D10-10.0080244.0159D10-2-0.00487.12620.0015251.1421D10-20.0015251.1421D11-1-0.000211.65580.0060262.7979D10-20.0015251.1421BM6-0.0001-0.02210.0000251.1200已知点D11-10.0060262.7979D12-0.0005 2.42750.0099265.2254D120.0099265.2254DJ12-2-0.0005-2.77250.0116262.4529DJ12-20.0116262.4529D14-0.0008-25.76980.0115236.6831D140.0115236.6831DJ10-0.0005 1.25650.0100237.9396DJ100.0100237.9396D14-1-0.0005-6.42650.0066231.5131D14-10.0066231.5131BM7-0.0061 3.79590.0000235.3090已知点D14-10.0066231.5131D17-10.0113 4.57830.0107236.0914D17-10.0107236.0914D180.0146-3.23340.0128232.8580D180.0128232.8580DJ110.018614.99960.0127247.8576DJ110.0127247.8576DJ120.0064-6.78560.0119241.0721DJ120.0119241.0721D22-10.0189 1.01190.0058242.0840D22-10.0058242.0840D23-1-0.0000 2.32600.0105244.4100D220.0058242.0840BM80.0040-2.49500.0000239.5890已知点D23-10.0105244.4100D23-2-0.00007.20200.0126251.6120D23-20.0126251.6120D23-30.0000 3.04200.0131254.6540D23-30.0131254.6540D25-10.0000 3.99400.0139258.6480D25-10.0139258.6480D25-2-0.0000 5.40400.0153264.0520D25-20.0153264.0520D26-0.0000 3.21100.0165267.2630D260.0165267.2630D26-10.000016.17200.0185283.4350D26-10.0185283.4350D29-0.0000-7.42200.0200276.0130D290.0200276.0130D30-10.0000 2.00500.0212278.0180D30-10.0212278.0180D31-0.0000 2.45100.0220280.4690[控制点成果表]点名X(m)Y(m)H(m)备注BM1202.2520已知点D1201.3969D2-1200.6399D3203.2088DJ1203.4973DJ3-1202.8929DJ3-2204.0958DJ4211.6533D4-3216.5381D4-9219.8930BM3219.0870已知点D4-6219.7147D4-7224.9781D4-8225.1338D5230.9937DJ5226.1332BM4218.3180已知点D6227.2192DJ6227.6585DJ7240.2376DJ8253.0421BM5250.6730已知点BM5-2250.9100BM5-1252.9700D8-1257.3700D8260.3135D9256.9986D10247.9285D10-1244.0159D10-2251.1421D11-1262.7979BM6251.1200已知点D12265.2254DJ12-2262.4529D14236.6831DJ10237.9396D14-1231.5131BM7235.3090已知点D17-1236.0914D18232.8580DJ11247.8576DJ12241.0721D22-1242.0840D23-1244.4100BM8239.5890已知点D23-2251.6120D23-3254.6540D25-1258.6480D25-2264.0520D26267.2630D26-1283.4350D29276.0130D30-1278.0180D31280.4690。
测量平差实习报告

测量平差实习报告专业:班级:组号:姓名:学号:目录高程控制网平差报告 (1)导线控制网平差报告 (2)Matlab编程源代码及截图 (4)技术总结 (7)个人实习小结…………………………………………控制网平差报告[控制网概况]计算软件: 南方平差易2005网名: 开学实习计算日期:观测人:记录人:计算者:检查者:测量单位:备注:平面控制网等级:图根测量, 验前单位权中误差:15.00(s)已知坐标点个数: 4未知坐标点个数: 7未知边数: 8最大点位误差[C5005] = 0.0764 (m)最小点位误差[C5007] = 0.0316 (m)平均点位误差= 0.0572 (m)最大点间误差= 0.0589(m)最大边长比例误差= 2636平面网验后单位权中误差= 51.16 (s)往返测距单位权中误差= 0.000 (m)[边长统计]总边长: 848.338(m),平均边长: 106.042(m),最小边长: 63.141(m),最大边长: 188.486(m)[闭合差统计报告]序号:<1>:附合导线路径: [GP02-GP01-C5001-C5002-C5003-C5004-C5005-C5006-C5007-GP14-GP13]角度闭合差=168.46(s),限差=±180.00(s)fx=0.232(m),fy=0.115(m),fd=0.258(m)总边长[s]=848.338(m),全长相对闭合差k=1/3281,平均边长=106.042(m)点名X(m) Y(m) H(m) 备注C5006 552903.5588 901665.7897C5007 552844.4360 901486.8082Matlab编程源代码:A=[1 1 -1 0;0 1 0 -1];P=[2 0 0 0;0 1 0 0;0 0 2 0;0 0 0 1.5];W=[0 ;-4];Naa=A*inv(P)*A';K=-inv(Naa)*W;V=inv(P)*A'*K运行结果截图:个人实习小结通过本次误差理论与测量平差的课程实习和设计, 我获得了很多收获, 对测量平差有了深刻的认识。
测绘程序设计实习报告

测绘程序设计(VB)课间实习报告姓名:________________________________学号:________________________________班级:_1141502 __________________________2012年10月目录1实习目的 (3)2实习仪器与软件 (3)2.1 Visual Basic 6.0 (3)3实习要求 (4)4实习内容 (5)5实习步骤 (7)5.1坐标正反算 (7)5.2水准测量 (8)5.3导线计算 (12)5.4集成化设计 (15)6实习总结 (16)6.1实习问题总结 (16)6.2程序调试总结 (16)7附录............................................................ 错误!未定义书签。
7.1正算代码 (20)测绘程序设计实习报告1实习目的掌握Visual Basic(VB)程序设计的基本理论、方法和应用,掌握VB程序应用于测绘专业的程序开发,理解程序设计在测绘数据处理中的作用和地位,学会利用模块化程序设计的基本技术,掌握面向对象程序设计方法,应用测绘专业的基本技能,测绘专业模块程序包开发的基本方法,以及掌握一些最基本的知识,编程里面的英语以及函数有很多不知道,以至学习编程有点困难。
、对水准网观测高程间接平差理论内容的验证与应用。
通过学习掌握测绘软件开发过程与方法,初步具备测绘软件开发基本技能。
、实验原理和过程通过本学期对《测绘程序设计》课程的学习,编写一份综合性实验报告我选取的题目是利用vb语言进行编程。
熟悉程序设计任务书的基本内容,调查了解软件需求状况,进行需求分析,。
计算机的基础比较差,要想将编程学好得掌握更多的函数以及专用的编程语言,工程测量运用编程来计算是比较普遍的,运用编程的方面也比较多,因此努力去掌握一些基础非常重要,为学习后续课程和专业技术工作打下基础。
水准网间接平差程序设计

水准网间接平差程序设计水准网间接平差是测量水准网中各测站的高程值,通过观测值的处理,进行计算来消除观测误差,得到准确的高程数据。
在进行水准网间接平差程序设计时,需要考虑观测值的处理方法、具体的计算步骤、误差的传递和消除等因素。
下面将详细介绍水准网间接平差程序设计的内容。
首先,在水准网间接平差的程序设计中,需要对观测值进行处理。
观测值的处理包括检查观测数据的精度、合理性及完整性,并进行数据的筛选和滤波处理。
在这一步骤中,需要使用适当的统计方法对观测数据进行筛选,剔除异常值和明显错误的数据,保留符合要求的观测值。
接下来,在进行水准网间接平差计算之前,需要对网络进行拟合,拟合过程即将观测值与已知高程值进行比较,并进行拟合计算得到误差。
网络拟合可以使用最小二乘法进行计算,即通过最小化观测值与已知高程值的差的平方和,来求得最优拟合结果。
然后,进行水准网的平差计算。
平差计算是根据测站之间的观测关系,通过一系列的计算公式,将所有观测值联立起来,并通过方程组进行求解,得到最终的平差结果。
在这个过程中,需要进行传递误差的计算,即通过误差传递公式计算各点高程值的精度,以评估平差结果的可靠性。
最后,在完成水准网间接平差计算之后,需要对平差结果进行检查和评估。
检查结果是否符合工程要求和精度要求,评估平差的可靠性。
如果结果不符合要求,需要重新进行观测值的处理和计算。
在进行水准网间接平差程序设计时,还需要注意以下几点:1.数据的输入与输出:程序需要提供方便的数据输入和输出方式,以便用户输入观测数据,并输出平差结果。
同时,需要考虑数据的存储和传输方式,确保数据的安全和完整性。
2.程序的可扩展性:设计程序时应考虑未来可能的数据规模扩大和功能的增加。
通过模块化设计和灵活的架构,使程序能够方便地扩展和添加新的功能。
3.用户友好性:程序应提供简单易用的操作界面,提供友好的用户交互方式。
用户应能够方便地输入观测数据和设置计算参数,并能够直观地查看和分析计算结果。
水准网平差程序设计

V j j = + h 广 H 。 一 l I i , 式中, h i . h i 为i 点和j 点的近似高程; H i  ̄: I - I j 为i 点
和j 点为已知点时的高程 ; l 为i 点至 j 点间的观测高差 。
( 2 ) 权 的确 定 :P  ̄ = l l S . ( 3 ) 未 知数 的排 列
Opt i o n Ba s e 1
3 . 4 . 1误 差 方程 的列立
( 1 ) 设有两点 i 和J , 则误差方程式为 V j = d 对 一 + h 广 h - 1 如果 j 点为已知点 , 则V l _ 一 d + H i — h 一 1 ; 如果 i 点 为已知点 , 则
科 技创 新与应 用 I 2 0 1 5 年 第1 7 期
科 技 创 新
水准 网平差程序设 计
杨 福 涛
( 北京市怀柔测绘所 , 北京 1 0 1 4 0 0 ) 摘 要: 水准 测 量是 现今 城 市测量 工 作 中测 定 高程 和对 建 筑物 进 行 变形 观 测 常 用 的测 量方 法。 水准 网平 差 的 目的在 于依 据 最 小 二乘 原理 , 消除 观测 之 间的矛 盾和 不 符值 , 进 而求 出点 的 最后 高程及 评 定精 度 , 编 制相 应 的 计 算程 序 , 实现 水 准 网的 自动 平 差 , 才 能提 高计算效率, 然而近似 高程的 自动推算、 闭合差的计算、 以及误差方程、 法方程 的列立解算是程序设计的重点和难点。 关键 词 : 水 准 网平 差 ; 高程 ; 程 序设 计 1数 据 库 的建 立 1 . 1建立建网信息表格 建 网信 息 表用 于保 存 建 网信 息 。 1 . 2 建 立观 测高 差 录入 表 格 记 录 高差 和高 差起 点 终点 点 号 和两 点之 间的距 离 。 1 . 3建立 已知 高程 录入 表格 记录高程用于 以后计算。 1 . 4建立 平 差成 果 表 用 于记 录 和输 出结 果 。 2 应用 软 件用 户界 面的设 计 本程序共设计 了五个窗体 , 分别为主窗体 , 建网信息输入窗体 , 测量高差输入窗体 , 已知高程输入窗体 , 平差计算结果显示窗体。 其 中主窗体是程序 的启动窗体 ,所有窗体都从 主窗体界面弹 出。建网信息输入窗体用于输入项 目名称 , 测量单位 , 负责人 , 测量 范围, 备注 信 息 , 并 于 数据 库 连 接 。 测 量 高差 输 入窗 体 用于 输 入 高差 观 测值 和 路线 长 度 , 并 和数 据 库 连接 。已知 高 程 输入 窗 体 用 于输 入 已知高 程 , 并 连接 数 据库 。平差 计 算 结果 显 示 窗 体 聚集 了大部 分 的 算法, 包括待定点高程计算 , 误差方程和法方程 的列立 , 法方程 的运 算等等 , 并通过 D m a G i f d 控件输出。 3 程序 算 法 的基本 思 想 及部 分 代码 3 . 1高 程控 制 网 间接 平差 的步 骤 ( 1 ) 计算待定 点的近似高程 x = ( x b X :… ) ; ( 2 )  ̄ l J 出误差 方程 ; ( 3 ) 组 成 法 方程 ; ( 4 ) 解算 法 方 程 , 求得 d X = ( d x , d x :… ) ; ( 5 ) 求 得 平 差 后 的高 程 X = X + d X; ( 6 ) 精度 评定 。 3 . 2 网形 的 编号 及部 分 变量 的定 义 3 . 2 . 1网形 编 号 为了使编程更加方便 , 首先约定各高程点编号由小到大按 自然 数 的顺 序 编码 , 不可 重 复也 不 可缺 少 。 已知 点 优先 于 待定 点 , 靠 近 已 知 点 的待 定点 编 号要 尽 量小 。 3 . 2 . 2 部分 变 量定 义
水准间接平差程序设计说明书

地球科学与环境工程学院水准间接平差实验报告书课程名:《误差理论与测量平差基础》学号:姓名:黄黎东指导老师:日期: 2015年12月7日一、任务概述利用MATLAB或者C++编程间接平差程序,通过该程序读取观测数据文件,并计算出平差结果。
二、计算结果截图:图一图二图三图四三、水准网图四、输入的数据格式数据格式为TXT文件,如图所示:TXT文件格式说明:(1)第一行格式第一行分别表示观测个数5个,水准点数4个,未知点3个,已知点1个,所有数据用英文逗号隔开(2)已知点数据格式第二行开始是已知点点号和高程,一行列一个已知点点号和高程,由于该水准网只有一个已知点,所有只能列出一行。
图中表示已知点点号为1,高程为237.483m(3)测站起始点号格式(4)测站终点点号格式(5)高差格式(6)距离格式该部分表示测站的起始点点号该部分表示测站的终点点号该部分表示各测站的高差该部分表示各测站的距离S 五、流程图六、附件代码function SDJianJiePingCha()[FileName,PathName] = uigetfile('*.txt','打开水准观测数据');%打开文件f=csvread( strcat(PathName,FileName));%打开文件并存在矩阵f中point=f(1,2);%获取所有水准点个数n=f(1,1);%获得观测个数nt=f(1,3);%获得必要观测个数ty=f(1,4);%获得已知点个数yXX=zeros(point,1);%初始化XX阵等于0,方便下面把已知点高程和未知点参数估值放到XX阵B=zeros(n,t);%初始化B阵,方便下面求V=Bx-l中的系数阵B;for j=1:yXX(j,1)=f(j+1,2);%把已知点高程放到XX阵中enddata=f((2+y):end,:);%从文件中获取观测数据,并放到data阵中h=data(:,3);%从data中获取观测高差,并放到h阵中P=zeros(n);%初始化权阵Pfor j=1:nP(j,j)=10/data(j,4);%以10km观测值为单位权误差计算权阵Pendfor i=1:n%通过循环求B阵point1=data(i,1);%获取某个测站的起始点号point2=data(i,2);%获取某个测站的终点点号if point1>y&&point2>y%当某测站起始点和终点高程都未知时,求B阵第i行B(i,point1-y)=-1;B(i,point2-y)=1;elseif point1<=y&&point2>y%当起始点高程已知和终点高程未知时,求B阵第i 行B(i,point2-y)=1;XX(point2,1)=XX(point1,1)+h(i,1);%求第i个参数估值elseif point1>y&&point2<=y%当起始点高程未知和终点高程已知时,求B阵第i 行B(i,point1-y)=-1;XX(point1,1)=XX(point2,1)-h(i,1);%求第i个参数估值endendl=zeros(n,1);%初始化小l阵,方便下面求V=Bx-l中的系数阵l;for i=1:n%通过循环求小lpoint1=data(i,1);point2=data(i,2);l(i,1)=-(XX(point2,1)-XX(point1,1)-h(i,1));end%带入间接平差数学模型公式进行计算:r=n-t;%求多余观测数N=B'*P*B;W=B'*P*l;x=N\W;X=XX((y+1):end,1)+x; V=B*x-l;L=h+V;a0=sqrt(V'*P*V/r); Qxx=inv(N);Dxx=a0*a0*inv(N);%输出计算结果:disp('参数改正数:') x=x'disp('参数平差值:') X=X'disp('观测值改正数:') V=V'disp('观测值平差值:') L=L'disp('协方差阵:') Dxxdisp('单位权方差:') a0disp('协因数阵:') QxxBlPNWend。
水准网平差程序的设计与实现课程设计书

int getRow() const { return row; }
void setColunm(const int i) { column = i; }
int getColumn() const { return column; }
六、附录(完整代码)
(要求:按照代码所属文件不同分别附上,且代码须有完整注释。)
#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>
#include<math.h>
#define max 50
class CMatrix
{
public:
CMatrix(){row=0; column=0;}; // 默认构造函数
二、设计内容
如图所示水准网, 和 是已知高程的水准点,并设这些点的已知高程无误差。图中P1和P2点是待定点。 和 点高程、观测高差和相应的水准路线长度见表4-3。试按间接平差法求各个待定点的平差高程。
表1 观测值与起始数据
线路号
观测高差(m)
水准路线长度(km)
已知高程(m)
1
+1.359
1
HA=35.000
V7=x2-x3-(h7-X2+X3)=x2-x3-1;
注意:(x和X的区别)
3.3 法方程构建与解算
由上式可得:
B=[1,0 , 0] L=[ 0 ] P=[ 2 ]
0,1,0 0 2
-1,0, 0 4 1
0, 0, 1 0 1
-1, 1, 0 7 2
测绘程序设计—实验八 水准网平差程序设计报告

《测绘程序设计》上机实验报告(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. 程序设计的注意事项- 数据安全:确保程序在处理数据时的安全性,防止数据泄露。
- 异常处理:程序应能妥善处理各种异常情况,如数据格式错误、计算溢出等。
测绘程序设计课程实习报告

测绘程序设计课程实习报告一、实习目的巩固之前所学的c++类概念、文件操作等各方面知识,把握矩阵计算的大体算法,熟悉并熟练运用平差模型,把握测量平差的大体原理和公式,并处置测量观测数据。
二、实习内容该课程的实习要紧为c语言及c++编程基础,矩阵操作算法,条件平差,间接平差,和在水准网平差中的应用。
三、实习进程(一)实习1(文件的大体操作和角度、弧度的转化)1.预备C++文件操作函数包括于头文件<fstream><ofstream><ifstream>,一样情形下利用<fstream>即可。
在计算进程中需要文件输出格式操纵,函数包括于<iomainip>。
c++的流操作函数包括于<iostream>,相应的流函数在命名空间“std”。
角度转弧度的进程中,第一判定正负,对符号进行不同情形的处置。
将度数的分,秒位别离除以60、3600,然后把取得的结果与度位绝对值相加,判定符号。
弧度转角度的进程中,一样判定正负,取小数位乘以60取整数取得相应角度的分,再取剩余的小数乘以60即取得相应角度的秒。
2.代码#include <iostream>#include <math.h>#include <fstream>#include <string>using namespace std;const double pi =;int main(){fstream file("a.txt");//概念文件操作对象string aa;file>>aa;cout<<aa<<endl;//输出文件中的内容int a =1;//概念重复输入利用的变量while(a)//限制循环,重复输入{float a1,a2,a3;cout<<endl;double deg;cout<<"输入度"<<endl;cin>>a1;cout<<"输入分"<<endl;cin>>a2;cout<<"输入秒"<<endl;cin>>a3;cout<<"角度为 "<<a1<<"° "<<a2<<"′ "<<a3<<"″"<<endl;if(a1 >=0)//判定输入度数的正负deg = a1 + a2/60+ a3/3600;elsedeg = a1 - a2/60- a3/3600;double radian;radian = deg/180*pi;cout<<"转换得弧度为 "<<radian<<endl;cout<<endl;cout<<"输入弧度: "<<endl;cin>>radian;bool tm =0;deg = radian*180/pi;if(deg<0){tm =1;deg =-deg;}a1 =int(deg);a2 =int((deg-a1)*60);a3 =((deg-a1-a2/60)*3600);if(tm ==1){a1 =-a1;tm = 0;}cout<<"转换后角度为 "<<a1<<"° "<<a2<<"′ "<<a3<<"″"<<endl;}return0;}3.运行结果输入度20输入分55输入秒32角度为 20° 55′ 32″输入弧度:转化后角度为 179° 54′″Press any key to continue4.显现的问题角度转换进程中需要考虑角度的正负号问题,角度转化能够添加是不是超过59的判定。
测绘程序设计课程实习报告模板

一、实习目的《测绘程序设计》是一门理论与实践并重的课程,课程设计是测量数据处理理论学习的一个重要实践环节,可以看做是在学习了专业基础理论课《误差理论与测量平差基础》课程后进行的一门实践课程,其目的是增强学生对测量平差基础理论的理解,牢固掌握测量平差的基本原理和公式,熟悉测量数据处理的基本原理和方法,灵活准确地应用于解决各类数据处理的实际问题,回顾所学习过的数据结构、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();使用之前要先检查文件是否正常打开,结束以后要记得关闭文件。
水准网平差程序设计

水准点编号,该点名称
其中点名长度不超过8个字符,即4个汉字。但最好 用字符串命名。
以下为一具有两个已知点、三个待定点和七个测段的
水准网的示例数据,打开TXT文件文件后,内容如下。
2,3,7 4 , 5.016 5 , 6.016 1 , 4 , 1 , 1.359 , 1.1 2 , 4 , 2 , 2.009 , 1.7 3 , 5 , 1 , 0.363 , 2.3 4 , 5 , 2 , 1.012 , 2.7 5 , 1 , 2 , 0.657 , 2.4 6 , 1 , 3 , 0.238 , 1.4 7 , 3 , 5 ,-0.595 , 2.6 1 ,P1 2 ,P2 3 ,P3 4 ,A 5 ,B
组建误差方程,即 B、l的生成
代入相应的公式 进行计算 x 、v
计算待求量 的平差植
精度评定 成果输出
2.1 水准网平差中数据的组织(数据文 件格式的设计)
水准网平差程序设计中数据的组织是一个关键 问题。文件格式的设计就是规定数据文件中包含 的内容、各类数据的先后顺序以及各种数据的书 写格式。从程序设计者的角度来说,数据文件格 式设计相当于告诉用户应当怎样准备数据文件, 当然,程序中也必须按照约定的格式从文件中读 取数据。数据文件由四个部分组成,其格式如下。 1)基本信息部分:该部分仅占一行,其内容为 已知点数N1,未知点数N2,高差观测值个数NS。
设p1选择p2作为邻接点,P2到目标点的路线长
度为S2, p1到p2的路线长度为S12,则p1到目标点 的路线长度S1为
S1=S2+S12 若还有一点P3也是P1的邻接点,则经由P3到 目标点的路线长度为
测绘程序课程设计报告

测绘程序课程设计()班级: xxxxxxx 学号: xxxxxxx 姓名:xxxx 题目:XXXXXX二零一六年七月测绘程序课程设计报告第一部分导线网平差系统设计一、需求分析导线网平差程序功能要求:1•优化设计:根据控制网的观测精度与网形,全面评定网的精度2•数据输入:表格化输入、图形化输入、外部数据倒入3•概算:自动完成各方向的曲率改正及边长的高程归化与投影改化,近似坐标的推算等。
4•平差计算:对观测数据进行精密平差计算,得到平差后的点位坐标, 方向观测值,边长观测值等,精度评定。
5•成果输出:控制网图形输出,平差结果报表及其输出,绘制误差椭圆,打印输出等。
6•其它功能:粗差探测与剔除、方差分量估计、闭合差计算、坐标转换、换带计算等。
二、总体设计①设计七个类:Ccontrolpoint (控制点类):定义控制点坐标信息(测站编号,XY坐标)CDistObs(距离观测值类):距离观测值,测站编号,照准编号CAn gleObs(角度观测类):角度观测值,测站编号,照准编号CAngle (角度类):实现角度转换和加减功能CControlNetAdjust.h (导线网平差类)1,loadobsdata函数读取数据获取数值2,方向观测值误差方程的建立3,边长观测值误差方程的建立4,确定权5,建立法方程并计算坐标改正数dx,dy6,精度评定7,输出计算结果到.txt文件CMatrix (矩阵类)CDraw对话框绘图类)1,计算结果绘制导线网图形及坐标系2,绘制未知点误差椭圆3, 实现图形平移,缩放的功能②观测数据及其格式设计//自己测试的数据格式已知点个数点号,已知点坐标待测点个数点号观测边总数测站点号,照准点号,观测距离方向观测总数测站点号,照准点号,方向观测值//老师测试的数据格式(最终读取格式)Surveys:. NameRecord亡匚NameDate,加*F##Xletecro^7, TemperaTuie. Pressure, Humidity AngleAccuracy, No b幷3囲Tii eAccurac y.No. A. BStation Count,斗匕#END Header主数据俸:己知数堀:己知蚊据粪型悔识,己知救摇体Cam.PointMo, XA;HD ISL StartPo mtNo:E ndPointNo±昨Ans le T Siad onPciintNo, U 切o 严艺兰*现劃峻据起始标志拠站点号,观测值个数跟准点号,观测值类塑CD/AL 观测值,[取側迤精夏编号]三、详细设计控制网平差模型1、间接平差原理:设未知数个数为t,观测值个数为nV=Bxf-f二BXO+BO+L其中V为n行1列,B为n行t列,X为t行1列的矩阵根据最小二乘准则应在满足VTPV=min时确定未知参数x列出法方程:N bb?- f e = 0其中N bb = B T PBf e = B T Pf从而求出改正数?;2、精度评定2.1单位权中误差的计算中误差计篡;%匚二(¥^九为观测值亍数J t为未狂数个数2.2未知数协因数的计算采用了坐标平差法,实际上法方程系数矩阵的逆就是未知数的协因数阵。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
测绘程序设计实验八水准网平差程序
设计报告
《测绘程序设计()》
上机实验报告
(Visual C++.Net)
班级:测绘0901班
学号:
姓名:代娅琴
4月29日
实验八平差程序设计基础一、实验目的
•巩固过程的定义与调用
•巩固类的创立与使用
•巩固间接平差模型及平差计算
•掌握平差程序设计的基本技巧与步骤
二、实验内容
水准网平差程序设计。
设计一个水准网平差的程序,要求数据从文件中读取,
计算部分与界面无关。
1.水准网间接平差模型:
2.计算示例:
近似高程计算:
3.水准网平差计算一般步骤
(1)读取观测数据和已知数据;
(2)计算未知点高程近似值;
(3)列高差观测值误差方程;
(4)根据水准路线长度计算高差观测值的权;
(5)组成法方程;
(6)解法方程,求得未知点高程改正数及平差后高程值;
(7)求高差观测值残差及平差后高差观测值;
(8)精度评定;
(9)输出平差结果。
4.水准网高程近似值计算算法
5.输入数据格式示例。