测绘程序设计—实验八水准网平差程序设计报告
测绘程序设计—实验八-水准网平差程序设计报告
《测绘程序设计()》上机实验报告(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);}三、实验成果打开文献数据:平差成果:四、实验心得这从实验是我们测绘程序设计旳最后一次实验, 虽然这个学期我们做了好几次有关旳实验, 但是我却发现自己学旳东西也越来越模糊, 感觉诸多内容都不理解。
水准网平差程序设计.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个汉字。但最好 用字符串命名。
式中,正负号取决于高差起始点到终点的方向与 推算路线是否一致。
测绘程序设计课程实习报告2013
测绘程序设计课程实习报告一、实习目的巩固之前所学的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 = 3.14159;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″转换得弧度为 0.36522输入弧度:3.14转化后角度为 179° 54′ 32.0387″Press any key to continue4.出现的问题角度转换过程中需要考虑角度的正负号问题,角度转化可以添加是否超过59的判断。
水准网平差报告
控制网平差报告[控制网概况]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。
绘测程序课程设计报告
测绘程序课程设计()班级:xxxxxxx学号:xxxxxxx姓名:xxxx题目:xxxxxx二零一六年七月测绘程序课程设计报告第一部分导线网平差系统设计一、需求分析导线网平差程序功能要求:1.优化设计:根据控制网的观测精度与网形,全面评定网的精度2.数据输入:表格化输入、图形化输入、外部数据倒入3.概算:自动完成各方向的曲率改正及边长的高程归化与投影改化,近似坐标的推算等。
4.平差计算:对观测数据进行精密平差计算,得到平差后的点位坐标,方向观测值,边长观测值等,精度评定。
5.成果输出:控制网图形输出,平差结果报表及其输出,绘制误差椭圆,打印输出等。
6.其它功能:粗差探测与剔除、方差分量估计、闭合差计算、坐标转换、换带计算等。
二、总体设计①设计七个类:Ccontrolpoint(控制点类):定义控制点坐标信息(测站编号,XY坐标) CDistObs(距离观测值类):距离观测值,测站编号,照准编号CAngleObs(角度观测类):角度观测值,测站编号,照准编号CAngle(角度类):实现角度转换和加减功能CControlNetAdjust.h(导线网平差类)1,loadobsdata函数读取数据获取数值2,方向观测值误差方程的建立3,边长观测值误差方程的建立4,确定权5,建立法方程并计算坐标改正数dx,dy6,精度评定7,输出计算结果到.txt文件CMatrix(矩阵类)CDraw(对话框绘图类)1,计算结果绘制导线网图形及坐标系2,绘制未知点误差椭圆3,实现图形平移,缩放的功能②观测数据及其格式设计//自己测试的数据格式已知点个数点号,已知点坐标待测点个数点号观测边总数测站点号,照准点号,观测距离方向观测总数测站点号,照准点号,方向观测值//老师测试的数据格式(最终读取格式)三、详细设计一、控制网平差模型1、间接平差原理:设未知数个数为t,观测值个数为nV=Bx-f-f=BX0+B0+L其中V为n行1列,B为n行t列,X为t行1列的矩阵根据最小二乘准则应在满足VTPV=min时确定未知参数x列出法方程:其中从而求出改正数;2、精度评定2.1单位权中误差的计算2.2未知数协因数的计算采用了坐标平差法,实际上法方程系数矩阵的逆就是未知数的协因数阵。
测绘程序设计实习报告
测绘程序设计实习报告一、实习背景及目的随着科技的不断发展,测绘领域逐渐融入了越来越多的计算机技术,测绘程序设计成为了一项重要的工作。
本次实习旨在让我们了解测绘程序设计的基本流程,掌握测绘程序设计的方法和技巧,提高我们的实际操作能力。
二、实习内容及过程1. 实习内容本次实习主要分为以下几个部分:(1) 熟悉测绘程序设计的基本原理和流程;(2) 学习测绘程序设计的相关软件;(3) 参与实际测绘项目,进行程序设计和调试;(4) 撰写测绘程序设计实习报告。
2. 实习过程(1) 基本原理学习在实习开始阶段,我们首先学习了测绘程序设计的基本原理,包括测绘数据采集、数据处理、图形绘制等。
通过学习,我们了解了测绘程序设计的核心内容和方法。
(2) 软件学习为了更好地进行测绘程序设计,我们学习了AutoCAD、MapGIS、ArcGIS等软件。
这些软件为我们进行测绘程序设计提供了强大的支持,使我们能够更加高效地完成实习任务。
(3) 实际项目参与在掌握了基本原理和软件操作后,我们参与了实际的测绘项目。
项目中,我们负责进行数据处理、图形绘制等工作,通过实际操作,我们深入了解了测绘程序设计的具体应用。
(4) 实习报告撰写在实习结束后,我们根据实习过程中的经验和收获,撰写了测绘程序设计实习报告。
报告中,我们总结了实习过程中遇到的问题及解决方法,并对自己的实习成果进行了分析。
三、实习收获及体会通过本次实习,我们收获了以下几点:1. 掌握了测绘程序设计的基本原理和方法;2. 熟悉了测绘程序设计的相关软件,提高了实际操作能力;3. 了解了测绘程序设计在实际项目中的应用;4. 培养了团队协作能力和解决问题的能力。
同时,我们认识到测绘程序设计不仅需要理论知识,更需要实践操作。
在实习过程中,我们要善于发现问题、解决问题,不断提高自己的实际操作能力。
此外,我们还应注重学习最新的测绘技术和软件,紧跟科技发展的步伐,为我国的测绘事业做出贡献。
水准网平差报告
控制网平差报告[ 控制网概略 ]1、本成就为按[ 平面 ] 网办理的平差成就计算软件:南方平差易2002网名计算日期 : 日期 : 2017-01-06观察人 :记录人 :计算者 :丈量单位 :备注 :2、高程控制网等级:国家三等= (mm)每公里高差中偏差开端点高程1309(m)1299(m)闭合差统计报告几何条件 : 闭合水平路径: [1309-11]高差闭合差 =(mm), 限差 =(mm)路线长度 =(km)几何条件 : 闭合水平路径: [2-9-10-12-1]高差闭合差 =(mm), 限差 =(mm)路线长度 =(km)几何条件 : 闭合水平路径: [7-8-3-2-9]高差闭合差 =(mm), 限差 =(mm)路线长度 =(km)几何条件 : 闭合水平路径: [5-6-7-8-3-4]高差闭合差 =(mm), 限差 =(mm)路线长度 =(km)[ 方向观察成就表]测站照准方向值(dms)更正数(s)平差后值备注(dms)1309 111309 12991299 13091299 11 12991 121 22 1 2 9 2 33 2 3 8 3 44 3 4 55 4 5 66 5 6 77 6 7 8 7 98 3 8 7979 29 1010 910 1210 1111 1011 130912 112 10[ 高差观察成就表]测段起点号测段终点号测段距离 (m) 测段高差 (m) 1309 111309 12991299 13091299 11 12991 121 22 12 92 33 23 83 44 34 55 45 66 56 77 67 87 98 38 79 79 29 1010 910 1210 1111 1011 130912 112 10[ 高程平差结果表]点号高差更正数更正后高差高程中偏差平差后高程 (m) 备注(m) (m) (m)1309 已知点111309 已知点1299 已知点1299 已知点1309 已知点1299 已知点111299已知点1121222 92 33 23 83 44 34 55 466 56 77 67 87 98 38 79 792910109101210111110111309已知点1211210[ 控制点成就表]点名X(m) Y(m) H(m) 备注1309 已知点1299 已知点123456789101112。
水准网平差程序
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) {
水准网平差程序设计
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 部分 变 量定 义
测绘程序设计—实验八 水准网平差程序设计报告
《测绘程序设计》上机实验报告(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’必要观测数。
水准 网 平 差 报 告
几何条件:闭合水准
路径:[10-12-1-1299-1309-11]
高差闭合差=8.0(mm),限差=11.0(mm)
路线长度=0.834(km)
几何条件:闭合水准
路径:[2-9-10-12-1]
高差闭合差=-7.0(mm),限差=11.6(mm)
路线长度=0.928(km)
几何条件:闭合水准
路径:[7-8-3-2-9]
高差闭合差=-7.0(mm),限差=11.2(mm)
路线长度=0.872(km)
几何条件:闭合水准
路径:[5-6-7-8-3-4]
高差闭合差=4.0(mm),限差=11.9(mm)
路线长度=0.980(km)
[方向观测成果表]
测站
照准
方向值(dms)
改正数(s)
平差后值(dms)
9
0.0065
1591.7864
7
0.0013
1.1653
0.0077
1592.9517
9
0.0065
1591.7864
2
-0.0046
-1.1426
0.0066
1590.6438
9
0.0065
1591.7864
10
0.0017
-1.0643
0.0052
1590.7221
10
0.0052
1590.7221
备注
1309
11
0.000000
1309
1299
172.054600
-619546.00
360.000000
1299
1309
0.000000
1299
(整理)测绘程序设计
测绘程序设计课程实习报告一、实习目的《测量平差程序设计》是在我们学习了专业基础课《误差理论与测量平差基础》课程后将测量平差和计算机程序设计等课程的综合实践与应用的一门课程。
其目的是在我们学习过平差这门课后增强我们对误差理论与测量平差基础理论的理解,巩固已掌握的测量平差的基本原理和基本公式以及计算方法,熟悉测量数据处理的基本技能,培养我们正确应用公式、综合分析问题和解决问题的能力,并能能够熟练运用所学过的C++语言,使平差理论与计算机结合起来,将主要的条件平差、间接平差以及水准网平差计算方法过程编写成一般形式的程序用于数据处理,灵活准确的应用于解决各类数据处理的实际问题当中,为我们今后步入工作岗位打下了一定的基础。
二、实习内容本课程要求我们熟练运用测量平差的基本公式与计算方法和拥有基本的C++编程能力,以自由组成3-4人小组的方式共同学习,在老师的指导下能够按照要求由简至繁完成以下程序。
(一)角弧之间的相互转化复习基本的C++内容、程序结构及编写方法,保证任意角度弧度之间可转化及其转化精度。
(二)文件的读入输出在程序外部建立文本文档输入数据使程序具有一般性并且不需要在执行程序时进行输入,同时在程序运行后结果自动生成文件保存。
(三)概率运算根据已知题目以及程序进行加以更改调试,建立文本文档读入文件计算标准正态分布函数、B分布的分布函数等概率函数。
(四)矩阵运算实现矩阵的基本加、减、乘、转置及求逆运算,为接下来平差运算程序解决基本运算问题。
(五)条件平差与间接平差利用之前以编写过的基本程序,以及平差的公式与算法,根据例题编写程序计算条件平差与间接平差(二者具有一定相似度)。
(六)水准网平差首先利用已知的例题以及水准网计算公式和算法编写特殊可解的水准网平差,再在其基础上编写一般形式具有广泛应用的普通程序。
在将以上基本任务都完成之后还可以进一步编写GPS向量网等。
三、实习过程(一)角弧之间的相互转化1.编程思路:首先在头文件中要注明#include<cmath>保证程序中的数学运算合理,然后建立一个角度是否合理判断的函数,在其中将角度的度、分、秒分别用三个double型变量a、b、c表示,将输入或计算出的角度改正成合理的形式(分和秒都小于60大于0),如将30°66´27"化成31°6´27" 以及角度的正负。
毕业设计--水准网条件平差程序设计[管理资料]
本科生毕业设计说明书(毕业论文)题目:水准网条件平差程序设计水准网条件平差程序设计摘要近年来,随着我国经济的快速发展,国家大力于投资各种铁路建设和公路建设,测绘工程的运用也越来越突出。
以水准网布设的高程控制网在各类工程中随处可见。
但观测到的数据存在着各种各样的误差,这就需要我们通过简易平差或严密平差来对数据进行处理,从而使数据能够达到工程的预期精度。
本文主要研究如何解决绘图软件行业标准的网络数据处理问题。
从水准网的结构,平差基本原理、调整模型,基本方程及其解,并对法方程组成,求解,平差值的计算及其精度评定作了介绍。
和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();使用之前要先检查文件是否正常打开,结束以后要记得关闭文件。
水准网平差程序设计
水准点编号,该点名称
其中点名长度不超过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到 目标点的路线长度为
平差课程设计报告
实验一一.设计原始资料水准网周密平差及精度评定示例。
如图所示水准网,有2个已知点,3个未知点,7个测段。
各已知数据及观测值见下表(1)已知点高程H1= H2=(2)高差观测值(m)高差观测值(m)端点高差观测值测段距离序号号1-3 11-4 22-3 32-4 43-4 53-5 65-2 7(3)求各待定点的高程;3-4点的高差中误差;3号点、4号点的高程中误差。
(提示,本网可采用以测段的高差为平差元素,采用间接平差法编写程序计算。
)二、水准网间接平差思路⑴.按照网型肯定已知水准点数H1 H2,未知水准点数u ,总点数n ,必要观测数t ,多余观测数r 。
⑵.肯定参数。
为平差后能直接求得待定点高程平差值,以3个待定点高程平差值为参数。
设3,4,5点的高程平差值别离为,, 。
⑶.列立条件方程.左侧为观测值(系数为1),右边为参数和常数项,并进一步改化成误差方程,最终写成矩阵形式。
取得系数矩阵A 和常数项L⑷.列立法方程,并解求法方程。
⑸.精度评定。
计算单位权中误差的估值:评定各待定点的高程中误差: 各待定点的精度即为: 评定高程平差值的精度: 四、平差程序设计思路1、 已知数据的输入需要输入的数据包括水准网中已知点数、未知点数和这些点的点号、已知高程和高差观测值、距离观测值等。
本程序采用文件方式进行输入,文件输入的格式如下: 第一行:已知点个数、未知点个数、观测值个数 第二行:点号 (已知点在前,为支点在后) 第三行:已知高程 (顺序与上一行的点号对应)第四行起:高差观测值,依照“起点点号,终点点号,高差观测值,距离观测值”的顺序输入。
2、 平差计算进程 (1)近似高程计算。
uc PV V r PV V T T -==20ˆσ120ˆˆ20ˆˆˆˆ-==bbx x x x N Q D σσjj X X j X Q ˆˆ0ˆˆσσ±=FN F F Q F Q BB T X X T h h 1ˆˆˆˆ-==X F hT ˆˆ=(2)列立观测值的误差方程。
测绘程序课程设计报告
测绘程序课程设计()班级: 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)。
2012年4月29日
实验八平差程序设计基础
一、实验目的
•巩固过程的定义与调用
•巩固类的创建与使用
•巩固间接平差模型及平差计算
•掌握平差程序设计的基本技巧与步骤
二、实验内容
水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取,
计算部分与界面无关。
1.水准网间接平差模型:
2.计算示例:
ﻩvoidCompAdjust(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;//高差观测值个数
4.水准网高程近似值计算算法
5.输入数据格式示例
实验代码:
#pragmaonce
classLevelControlPoint
{
public:
LevelControlPoint(void);
ﻩ
ﻩ~LevelControlPoint(void);
public:
ﻩCString strName;//点名
CString strID;//点号
private:
LevelControlPoint* SearchKnownPointUsingID(CString ID);
ﻩLevelControlPoint* SearchUnknownPointUsingID(CString ID);
LevelControlPoint* SearchPointUsingID(CString ID);
ﻩH=0;
ﻩflag=0;
}
LevelControlPoint::~LevelControlPoint(void)
{
}
CDhObs::CDhObs(void)
{
}
CDhObs::~CDhObs(void)
{
}
#pragmaonce
#include"LevelControlPoint.h"
#include"Matrix.h"
}
AdjustLevel::~AdjustLevel(void)
{
ﻩif(m_pKnownPoint!=NULL)
ﻩ{
ﻩﻩdelete[] m_pKnownPoint;
ﻩm_pKnownPoint=NULL;
ﻩ}
ﻩif(m_pUnknownPoint!=NULL)
ﻩ{
ﻩvoidSetDhObsSize(intsize);//创建大小为size的观测值数组
ﻩboolLoadObsData(constCString& str读入观测文件
CString* SplitString(CString str,charsplit,int& iSubStrs);
voidApproHeignt(void);//计算近似值
测绘程序设计—实验八-水准网平差程序设计报告
———————————————————————————————— 作者:
———————————————————————————————— 日期:
ﻩ
《测绘程序设计()》
上机实验报告
(Visual C++.Net)
班 级:测绘0901班
学 号:0405090204
intm_iUnknownPointCount;//未知点个数
CDhObs* m_pDhObs;//高差观测值数组
intm_iDhObsCownPointSize(intsize);//创建大小为size的已知点数组
voidSetUnkonwnPointSize(intsize);//创建大小为size的未知点数组
近似高程计算:
3.水准网平差计算一般步骤
(1)读取观测数据和已知数据;
(2)计算未知点高程近似值;
(3)列高差观测值误差方程;
(4)根据水准路线长度计算高差观测值的权;
(5)组成法方程;
(6)解法方程,求得未知点高程改正数及平差后高程值;
(7)求高差观测值残差及平差后高差观测值;
(8)精度评定;
(9)输出平差结果。
classAdjustLevel
{
public:
AdjustLevel(void);
~AdjustLevel(void);
public:
ﻩLevelControlPoint* m_pKnownPoint;//已知点数组
ﻩintm_iKnownPointCount;//已知点个数
LevelControlPoint* m_pUnknownPoint;//未知点数组
doubleObsValue;//高差值
doubleDist;//测站的距离
};
#include"StdAfx.h"
#include"LevelControlPoint.h"
LevelControlPoint::LevelControlPoint(void)
{
ﻩstrName=_T("");
ﻩstrID=_T("");
floatH;
boolflag;//标记是否已经计算出近似高程值,若计算出则为,否则为
};
classCDhObs
{
public:
ﻩCDhObs(void);
~CDhObs(void);
public:
LevelControlPoint* cpBackObj;//后视点
LevelControlPoint* cpFrontObj;//前视点
CMatrix LevleWeight(void);//计算权矩阵
public:
voidFormErrorEquation(CMatrix &B, CMatrix &L);//组成误差方程
voidEquationCompute(CMatrix &x);//计算法方程
ﻩvoidAccuracy_Assessment(double&r0,CMatrix &Qxx);//精度评定