平差数据录入示例
- 格式:docx
- 大小:104.54 KB
- 文档页数:7
《测绘程序设计()》上机实验报告(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);}三、实验成果打开文献数据:平差成果:四、实验心得这从实验是我们测绘程序设计旳最后一次实验, 虽然这个学期我们做了好几次有关旳实验, 但是我却发现自己学旳东西也越来越模糊, 感觉诸多内容都不理解。
§9.8 边角网坐标平差算例例9 今有一边角网如图9-11所示。
网中A 、B 、C 、D 、E 是已知点,起算数据见(表9-12),1P 、2P 是待定点。
同精度观测了九个角度921,,,L L L (见表9-13),测角中误差为5.2''±;测量了五个边长141110,,,L L L ,其观测结果及中误差见表9-13。
试按间接点1P 按 013.493301=x m 702.651301=y m283.468402=x m 948.799202=y m2、由已知点坐标和待定点近似坐标计算待定边的坐标方位角改正数方程系数(见表9-14的6~9列);计算待定边的边长改正数方程的系数(见表9-14的10~13列)。
需要指出,坐标方位角改正数方程的系数的单位是秒/厘米,而边长改正数的系数无单位。
3、计算观测角误差方程的系数和常数项,其结果见表9-15的1~9行。
写出观测边误差方程的系数和常数项,其结果见表9-15的第10~14行。
表中,每一行表示一个误差方程;s 为每个误差方程的和检核数。
设取±2.5″为单位权中误差,则测角的权为22)(i i m P ββμ=令 22i m βμ=,则1)5.2()5.2(2222===ii i m m P βββ(无单位) 观测边的权为 2222)(ii Li mm m P iβμ==(秒2/cm 2)表9-14表9-15表9-163 / 64 / 6各观测值的权写在表9-15的p 列中。
v 为角度及边长的改正数,是在解出坐标改正数后计算的。
表9-15中,角度误差方程常数项的单位为秒,边误差方程常数项的单位为cm ,按误差方程求得观测角和观测边的改正数的单位也分别为秒和cm 。
4、法方程的组成和解算。
由表9-15取得误差方程的系数、常数项、和检核数和权组成法方程的系数、常数项、检核数,其结果和法方程的解算均见表9-16。
导线测量平差最近更新导线测量平差最近发布4.2版,主要增加或更新了以下功能:(如表格显示不正常,请刷新)一、表格输出。
表格输出到WORD,支持表格中的列向下错开半行(如方位角、边长),所有表格输出到WORD后与软件中显示的样式一样。
如下表:导线严密平差计算表工程名称:附合及水准示例等级:城市二级计算者:杨运英校核者:日期:2003.08.28二、导线采用近似平差且方位角边长不进行反算时的表格样式。
原表格中显示的是坐标增量改正数,现增加了一个选项,可以选择显示改正后的坐标增量,以满足一些工程要求格式统一的要求。
导线平差计算表工程名称:附合及水准示例等级:城市二级计算者:杨运英校核者:日期:2003.08.28、坐标导线平差。
指使用全站仪直接观测坐标、高程的闭、附合导线,其中平面坐标完全差的分配方式可以选用“按边长”、“按坐标增量”、“坐标转换”等方式。
坐标导线平差计算表工程名级:城市二级:杨运英校核者:日期:200四、单面单程水准记录计算已知点较密时线路中间也可以穿过已知点。
当含有中视时可以用于中平测量等,表格形式如下:水准测量记录计算表测线:仪器:观测:天气:地点:记录:计算者:校核者:日期:不含有中视时可用于五等、等外水准等的记录、计算。
表格形式如下:水准测量记录计算表测线:仪器:观测:天气:地点:记录:计算:校核:日期:部测量知点设站,后视另一已知点,观测各碎部点,计算其坐标、高程,绘制图形并可输出到CAD。
方式可以选用“斜距+天顶距”、“平距+高差”或“视距+天顶距”。
距+高差”方式表格如下:碎部测量记录后视:B 测站高程:仪高:气:复核:距”(或“斜距+天顶距”)表格如下:碎部测量记录后视:B 测站高程:指标差:0" 天气:记录:日期:坐标转换于同椭球的不同坐标系间进行转换。
比如同椭球的国家坐标系与工程独立坐标系的转换。
坐标转换计算表工程名第页计算:复核:日期:支导线计算里指输入方位角与边长计算坐标的支导线,如需输入水平角、边长计算各点坐标,请使用“平差计算”模块中的支导线进行计算。
概述: (一)全站仪可以测斜距、平距、角度,普通工作在要求不高时,我们可以直接用平距,但是一旦涉及导线等精密测量时,“平距”必须通过别的渠道进行改正得到 (斜距改平或者边长改正)(二)当测量任务涉及到变形监测、导线网、多测回测角等精密测量时,不少测工受制于仪器、或者相关后处理软件的制约(如建策Dam6.0 徕卡三维变形软件)、其“数据整理归纳”和“斜距改平”的工作难以推进,困惑不前。
(三)本文主要交流探讨:①徕卡tca2003 、tcr1201 、tm30 、tm50 、ts15/16 、ts60 等徕卡测量机器人的非官方软件多测回测角测量的外业采集及数据后处理平差替代方法。
②普通1″仪器(特指:无马达、无自动照准、无多测回测角)的外业测量-原始数据—整理—编制—科傻平差的流程作业。
(四)本文是关于:徕卡测量机器人和普通仪器对精密测量外业数据作用于后期数据平差的探讨和交流,交流指正(如测距仪的气象改正系数K1 、K2)(五)仪器架设为控制点上 (不用设站)采用全圆观测方法非极坐标方法进行数据采集 (仪器架设点以为方向,观测其余待监测点再以测站点以为方向,观测其余待监测点 ) 外业上不带入任何坐标,只采集边角数据。
内业用的已知坐标,加入气象等条件后,通过软件解算得出坐标,可先做为高等级控制网、再测量时候把也测进去,用于复核 (网形图片参考附件五)关键:全圆观测、变形监测、导线、网平差、边坡监测、三角高程平差难点:多测回测角、斜距化平、边长改正要点:(一)精密测量都是级别范畴、需要严谨的态度对待 (注意:仪器对中精度、量取精度、温度、干湿、气压、成像条件等)(二) 对变形监测、导线网、三角高程的外业数据采集步骤要有大致了解(三) 明白“多测回测角”对于工作的重要性(四)关于“斜距化平” 的突破(五) 常用到的参数 (大气折光系数K 、地球曲率R、仪器加 (乘) 常数、温度℃、气压Pa 等)①仪器加 (乘) 常数通过该台仪器的检定证书查看如(常数主要是对测距改正)(加常数:K=-1.38mm 乘常数:R=1.78mm/km )②更严谨的会涉及到激光的波长、及频率、周期等③测距仪气象改正系数,公式 (请百度:查阅全站仪距离气象改正与推导)(六)针对从非自动仪器,下载出原始数据进行编制及—Cosa 进行平差,我们得掌握Cosa 的高程in1、平面in2 及其斜距化平.SV 文件的编写、明白其具体含义. (七)适合无马达、无ATR 的普通全站仪外业采集数据—整理外业—编制cosa.SV 文件进行后处理。
科傻平差in2数据格式科傻平差in2数据格式是一种常用的地形测量数据格式,它主要用于测量高程和坐标的精确度分析。
下面将从科傻平差in2数据格式的定义、特点、应用等方面进行全面详细的介绍。
一、科傻平差in2数据格式的定义科傻平差in2数据格式是一种基于文本文件的地形测量数据格式,以ASCII码方式存储。
它主要包括两个部分:头文件和数据文件。
头文件包含了该文件的相关信息,如单位、坐标系和高程系统等;而数据文件则包含了实际采集到的高程和坐标值。
二、科傻平差in2数据格式的特点1. 灵活性高:科傻平差in2数据格式支持多种不同单位、坐标系和高程系统,可以根据具体需求进行选择。
2. 数据精度高:科傻平差in2数据格式可以存储高精度的地形测量数据,可以达到亚厘米级别。
3. 数据量大:由于其存储方式为文本文件,因此相对于二进制存储方式来说,其文件大小较大。
4. 易读性好:由于其采用ASCII码存储方式,因此可以直接使用文本编辑器进行查看和编辑。
三、科傻平差in2数据格式的应用1. 地形测量:科傻平差in2数据格式是地形测量领域常用的数据格式之一,可以用于存储高程和坐标值,以及进行精度分析等。
2. 地图制图:科傻平差in2数据格式可以用于地图制图中的高程和坐标信息的存储和处理。
3. 工程建设:科傻平差in2数据格式可以在工程建设中用于测量、设计和施工等方面的应用。
4. 环境监测:科傻平差in2数据格式也可以用于环境监测领域,如水文、气象等方面的应用。
四、科傻平差in2数据格式的文件结构1. 头文件结构头文件包含了该文件的相关信息,如单位、坐标系和高程系统等。
其结构如下:$FILE_TYPE IN2$FILE_VERSION 01$UNIT METRIC$COORDINATE_SYSTEM UTM$EASTING 500000$NORTHING 0$ZONE 50$VERTICAL_DATUM EGM96其中,$FILE_TYPE表示文件类型;$FILE_VERSION表示文件版本;$UNIT表示单位;$COORDINATE_SYSTEM表示坐标系;$EASTING表示东向偏移量;$NORTHING表示北向偏移量;$ZONE 表示地带号;$VERTICAL_DATUM表示高程系统。
《测绘程序设计》上机实验报告(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.1 观测数据处理观测数据处理是指对测量得到的原始数据进行筛选、检查和处理,以确保数据的可靠性和准确性。
常见的观测数据处理方法包括数据编辑、数据检核和数据修正等。
1.2 平差模型建立平差模型是指根据测量任务的性质和测量结果的特点,建立合理的数学模型,描述测量结果与实际值之间的关系。
常见的平差模型包括最小二乘法模型、条件方程模型和组合模型等。
1.3 平差计算平差计算是指根据建立的平差模型,利用数学方法进行计算,得出平差结果。
平差计算方法常见的有最小二乘法、最小二乘多项式法和最小二乘区别法等。
二、平差计算方法的应用2.1 遥感影像平差遥感影像是获取地表信息的一种重要手段,但受限于影像获取方式和设备精度等因素,遥感影像中常常存在一定的误差。
平差计算方法可以通过对一系列遥感影像数据进行处理和修正,消除或减小这些误差,得到更准确的地表信息。
2.2 GPS定位平差GPS定位是一种广泛应用于测绘制图中的定位技术,但由于信号传播环境的影响和接收机本身的误差,GPS定位结果常常存在一定的偏差。
平差计算方法可以选用合适的平差模型和计算方法,对GPS定位结果进行修正,提高定位精度。
2.3 地形图平差地形图是测绘制图中常见的一种制图方式,用于展示地表的高程变化。
在地形图制作过程中,采集到的高程数据常常存在误差,通过平差计算方法可以对高程数据进行修正,获得更准确的地形图。
三、实例分析3.1 实例一:道路测量与平差假设我们要对一条道路进行测量和制图,通过测量我们得到了一系列道路节点的坐标数据。
科傻平差in1数据格式
科傻平差in1,是一种常用于测量和定位的数据处理方法。
其作用是通过对各个测量点的坐标进行平差,得出相对精确的坐标值,以提
高测量的准确性和可靠性。
科傻平差in1数据格式包含了大量的信息。
其中,最基本的是每
个点的坐标值。
这些坐标值包括水平坐标和垂直坐标,通常用以描述
地球表面的位置。
同时,在科傻平差in1中还包含了一些额外的信息,如每个点的精度、标准偏差等参数,这些参数可以用于评估测量结果
的可靠性和精度。
科傻平差in1在实际应用中发挥了重要作用。
例如,在工程领域中,该方法可以用于大型建筑项目的坐标定位。
在地质勘探领域中,
科傻平差in1可以用于确定矿区的坐标和长度等参数,从而提高矿区
开发和资源评估的精度和可靠性。
此外,在土地测绘和城市规划等领
域中,也广泛使用科傻平差in1进行测量和坐标计算。
然而,科傻平差in1也存在一些限制和局限性。
首先,由于需要
对点的坐标进行平差,因此数据处理的过程比较耗时和复杂。
其次,
科傻平差in1仅适用于较小的区域测量,无法用于全球性的地球定位
系统。
最后,科傻平差in1对测量数据的精度要求比较高,需要采用
高精度测量设备和技术,否则会导致结果偏差较大。
因此,在使用科傻平差in1进行测量时,需要充分考虑数据的精
度和准确性,避免因数据不准确而导致的计算结果无效。
同时,也需
要结合实际应用需求,灵活选择合适的测量方法和数据处理方式,以达到更好的测量效果和结果。
科傻平差in1数据格式一、什么是科傻平差in1数据格式1.1 介绍科傻平差in1数据格式科傻(Kousa)平差in1数据格式是一种用于存储和传输平差数据的标准格式。
科傻平差in1数据格式的设计旨在满足平差数据的高效存储和传输需求,提供一种统一的、可扩展的数据格式,并且易于解析和处理。
1.2 科傻平差in1数据格式的特点•结构简洁:科傻平差in1数据格式采用了简洁的数据结构,使得数据易于理解和解析。
•可扩展性:科傻平差in1数据格式支持数据的扩展和自定义,能够适应不同的平差需求。
•高效性:科傻平差in1数据格式使用紧凑的二进制编码方式,使得数据的存储和传输效率高。
•兼容性:科傻平差in1数据格式与现有的平差软件和工具兼容性良好,能够无缝地与其它平差数据进行交互和处理。
1.3 科傻平差in1数据格式的应用领域科傻平差in1数据格式广泛应用于测量、地理信息系统和地图制图等领域。
它可以用于存储和传输各种平差数据,如平面坐标、高程、角度等,方便数据的共享和交流。
二、科傻平差in1数据格式的结构和数据类型2.1 数据格式的结构科傻平差in1数据格式由文件头、数据块和文件尾三部分组成。
文件头包含了文件的基本信息,数据块用于存储实际的平差数据,文件尾标志着文件的结束。
2.2 数据类型科傻平差in1数据格式支持多种数据类型,包括整型、浮点型、字符串型等。
不同的数据类型可以根据具体的需求进行选择。
三、科傻平差in1数据格式的使用示例3.1 创建一个科傻平差in1数据文件1.打开文本编辑器,创建一个新的文件。
2.编写文件头信息,包括文件名、创建时间等。
3.添加数据块,按照指定的格式填写平差数据。
4.写入文件尾,标志文件的结束。
5.保存文件并命名为.in1。
3.2 解析科傻平差in1数据文件1.打开科傻平差软件或工具,选择导入文件功能。
2.选择之前创建的.in1文件。
3.解析文件并显示平差数据。
4.可根据需求对数据进行处理和分析。
平差数据录入示例
1 / 7
通过实例来介绍导线、水准、三角高程的数据输入方法。
导线实例
这是一条符合导线的测量数据和简图,A、B、C和D是已知坐标点,2、3和4是
待测的控制点。
原始测量数据如下:
测站点 角度(°′″) 距离(米) X (米) Y(米)
B 8345。8709 5216。6021
A 85.30211 1474.4440 7396。2520 5530。0090
2 254.32322 1424。7170
3 131。04333 1749。3220
4 272.20202 1950.4120
C 244。18300 4817.6050 9341.4820
D 4467.5243 8404。7624
导线原始数据表
导线图如下:
导线图
在平差易软件中输入以上数据,如下图“数据输入”所示:
数据输入
在测站信息区中输入A、B、C、D、2、3和4号测站点,其中A、B、C、D为已
平差数据录入示例
2 / 7
知坐标点,其属性为10,其坐标如“原始数据表”;2、3、4点为待测点,其属性为
00,其它信息为空。如果要考虑温度、气压对边长的影响,就需要在观测信息区
中输入每条边的实际温度、气压值,然后通过概算来进行改正。
根据控制网的类型选择数据输入格式,此控制网为边角网,选择边角格式。
如下图“选择格式”所示:
选择格式
在观测信息区中输入每一个测站点的观测信息,如下表
B、D作为定向点,它没有设站,所以无观测信息,但在测站信息区中必须输入它
们的坐标。
以A为测站点,B为定向点时(定向点的方向值必须为零),照准2号点的数据输
入如下图“测站A的观测信息"所示:
测站A的观测信息
以C为测站点,以4号点为定向点时,照准D点的数据输入如下图“测站C的观
测信息”所示:
测站C的观测信息
2号点作为测站点时,以A为定向点,照准3号点,如下图“测站2的观测信息”
所示:
测站2的观测信息
以3号点为测站点,以2号点为定向点时,照准4号点的数据输入如下图“测站3
的观测信息”所示:
测站3的观测信息
平差数据录入示例
3 / 7
以4号点为测站点,以3号点为定向点时,照准C点的数据输入如下图“测站4的
观测信息"所示:
测站4的观测信息
说明:①数据为空或前面已输入过时可以不输入(对向观测例外)
②在电子表格中输入数据时,所有零值可以省略不输。
以上数据输入完后,点击菜单“文件\另存为”,将输入的数据保存为平差易数据
格式文件:
[STATION] (测站信息)
B,10,8345。870900,5216.602100
A,10,7396。252000,5530.009000
C,10,4817.605000,9341。482000
D,10,4467.524300,8404.762400
2,00
3,00
4,00
[OBSER] (观测信息)
A,B,,1000.0000
A,2,85.302110,1474.4440
C,4
C,D,244.183000,1000。0000
2,A
2,3,254。323220,1424。7170
3,2
3,4,131.043330,1749。3220
4,3
4,C,272.202020,1950.4120
上面[STATION](测站点)是测站信息区中的数据,[OBSER](照准点)是观测
信息区中的数据。
水准实例
这是一条符合水准的测量数据和简图,A和B是已知高程点,2、3和4是待测的
高程点。
原始测量数据如下:
测站点 高差(米) 距离(米) 高程 (米)
A -50.440 1474.4440 96。0620
2 3。252 1424.7170
3 -0.908 1749.3220
4 40。218 1950。4120
B 88.1830
平差数据录入示例
4 / 7
水准原始数据表
水准路线图(模拟)
图中h为高差.
在平差易中输入以上数据,如下图“水准数据输入"所示:
水准数据输入
在测站信息区中输入A、B、2、3和4号测站点,其中A、B为已知高程点,其属
性为01,其高程如“水准原始数据表”;2、3、4点为待测高程点,其属性为00,其
它信息为空。因为没有平面坐标数据,故在平差易软件中没有网图显示。
根据控制网的类型选择数据输入格式,此控制网为水准网,选择水准格式,如下
图“选择格式”所示:
选择格式
注意:
1、在“计算方案”中要选择“一般水准”,而不是“三角高程”。
“一般水准"所需要输入的观测数据为:观测边长和高差.
“三角高程"所需要输入的观测数据为:观测边长、垂直角、站标高、仪器高。
2、在一般水准的观测数据中输入了测段高差就必须要输入相对应的观测边长,否
则平差计算时该测段的权为零,因此导致计算结果错误。
平差数据录入示例
5 / 7
在观测信息区中输入每一组水准观测数据
测段A点至2号点的观测数据输入(观测边长为平距)如下图“A->2观测数据”
所示:
A->2观测数据
测段2号点至3号点的观测数据输入如下图“2-〉3观测数据”所示:
2
->3观测数据
测段3号点至4号点的观测数据输入如下图“3-〉4观测数据”所示:
3->4观测数据
测段4号点至B点的观测数据输入如下图“4-〉B观测数据”所示:
4->B观测数据
以上数据输入完后,点击菜单“文件\另存为",将输入的数据保存为平差易数据格
式文件:
[STATION]
A,01,,,96。062000
B,01,,,88。183000
2,00
3,00
4,00
[OBSER]
A,2,,1474.444000,—50.4400
2,3,,1424。717000,3。2520
3,4,,1749.322000,-0。9080
4,B,,1950.412000,40。2180
三角高程实例
这是三角高程的测量数据和简图,A和B是已知高程点,2、3和4是待测的高程
点。
平差数据录入示例
6 / 7
原始测量数据如下图“三角高程原始数据表”所示:
测站点 距离(米) 垂直角 (°′″) 仪器高 (米) 站标高 (米) 高程
(米)
A 1474.4440 1。0440 1。30 96。0620
2 1424。7170 3。2521 1。30 1。34
3 1749。3220 -0.3808 1.35 1。35
4 1950.4120 —2.4537 1.45 1。50
B 1.52 95.9716
三角高程原始数据表
三角高程路线图(模拟)
上图中r为垂直角
在平差易中输入以上数据,如下图“三角高程数据输入"所示:
三角高程数据输入
在测站信息区中输入A、B、2、3和4号测站点,其中A、B为已知高程点,其属
性为01,其高程如“三角高程原始数据表";2、3、4点为待测高程点,其属性为
00,其它信息为空.因为没有平面坐标数据,故在平差易软件中也没有网图显示。
此控制网为三角高程,选择三角高程格式。如下图“选择格式”所示:
选择格式
平差数据录入示例
7 / 7
注意:在“计算方案"中要选择“三角高程”,而不是“一般水准"。
在观测信息区中输入每一个测站的三角高程观测数据
测段A点至2号点的观测数据输入如下图“A->2观测数据”所示:
A-〉2观测数据
测段2点至3号点的观测数据输入如下图“2->3观测数据”所示:
A-〉2观测数据
测段3点至4号点的观测数据输入如下图“3->4观测数据"所示:
A-〉2观测数据
测段4点至B点的观测数据输入如下图“4-〉B观测数据”所示:
4->B观测数据
以上数据输入完后,点击“文件\另存为”,将输入的数据保存为平差易格式文件为:
[STATION]
A,01,,,96。062000,1.30
B,01,,,95.97160,
2,00,,,,1。30
3,00,,,,1。35
4,00,,,,1。45
[OBSER]
A,2,,1474。444000,27。842040,,1。044000,1.340
2,3,,1424。717000,85.289093,,3。252100,1。350
3,4,,1749。322000,—19.353448,,—0。380800,1。500
4,B,,1950.412000,-93。760085,,-2。452700,1.520