测绘程序设计 实验八_水准网平差程序设计报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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; } }
AdjustLevel(void); ~AdjustLevel(void); public: LevelControlPoint* m_pKnownPoint;//已知点数组 int m_iKnownPointCount;//已知点个数 LevelControlPoint* m_pUnknownPoint;//未知点数组 int m_iUnknownPointCount;//未知点个数 CDhObs* m_pDhObs;//高差观测值数组 int m_iDhObsCount;//高差观测值个数 public:
~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;
B,P1,1.7881,0.5
P1,A,5.2065,0.7
P4,P2,2.0850,0.9
P2,A,3.4175,0.4
C,P3,1.2081,1.0
P3Βιβλιοθήκη BaiduA,6.0372,0.6
C,P5,4.3306,0.7 高差观测数据:起点,终点,高差,路线长度
P6,P5,3.6513,0.6
P7,P6,2.5122,0.3
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++)//读取已知点的点名和高程值 {
4
} LevelControlPoint::~LevelControlPoint(void) { } CDhObs::CDhObs(void) { } CDhObs::~CDhObs(void) { }
#pragma once #include"LevelControlPoint.h" #include "Matrix.h" class AdjustLevel { public:
《误差理论与测量平差基础 课程设计(VC.net)》 实习报告
(Visual C++.Net)
班 级: 学 号: 姓 名:
2014 年 2 月 17 日至 2 月 28 日
水准网平差程序设计
一、 实验目的
• 巩固过程的定义与调用 • 巩固类的创建与使用 • 巩固间接平差模型及平差计算 • 掌握平差程序设计的基本技巧与步骤
3
P7,P9,2.0415,0.8 P9,P4,1.5366,0.7 C,P4,1.7450,0.8 P8,P5,2.7436,0.4 P9,P8,1.3783,0,5
实验代码: #pragma once class LevelControlPoint { public:
LevelControlPoint(void);
void AdjustLevel::SetKnownPointSize(int size) {
m_pKnownPoint=new LevelControlPoint[size];//创建动态指针 m_iKnownPointCount=size; }
6
void AdjustLevel::SetUnkonwnPointSize(int size) {
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设置为 }
CString* AdjustLevel::SplitString(CString str, char split, int& iSubStrs) {
int iPos = 0; //分割符位置 int iNums = 0; //分割符的总数 CString strTemp = str; CString strRight; //先计算子字符串的数量 while (iPos != -1) {
2
(8)精度评定; (9)输出平差结果。 4. 水准网高程近似值计算算法
5. 输入数据格式示例
3
已知点数
A,151.5664
B,144.5684
已知点号及高程
C,144.3194
9
未知数
P1,P2,P3,P4,P5,P6,P7,P8,P9 未知点号
15
高差观测数据个数
B,P4,1.4966,0.4
二、 实验内容
水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件 中读取, 计算部分与界面无关。 1. 水准网间接平差模型:
2. 计算示例: 近似高程计算:
1
3. 水准网平差计算一般步骤 (1)读取观测数据和已知数据; (2)计算未知点高程近似值; (3)列高差观测值误差方程; (4)根据水准路线长度计算高差观测值的权; (5)组成法方程; (6)解法方程,求得未知点高程改正数及平差后高程值; (7)求高差观测值残差及平差后高差观测值;
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[]); };
7
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; }
5
#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=new LevelControlPoint[size]; m_iUnknownPointCount=size; }
void AdjustLevel::SetDhObsSize(int size) {
m_pDhObs=new CDhObs[size]; m_iDhObsCount=size;//高差观测值个数 }
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; } }
AdjustLevel(void); ~AdjustLevel(void); public: LevelControlPoint* m_pKnownPoint;//已知点数组 int m_iKnownPointCount;//已知点个数 LevelControlPoint* m_pUnknownPoint;//未知点数组 int m_iUnknownPointCount;//未知点个数 CDhObs* m_pDhObs;//高差观测值数组 int m_iDhObsCount;//高差观测值个数 public:
~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;
B,P1,1.7881,0.5
P1,A,5.2065,0.7
P4,P2,2.0850,0.9
P2,A,3.4175,0.4
C,P3,1.2081,1.0
P3Βιβλιοθήκη BaiduA,6.0372,0.6
C,P5,4.3306,0.7 高差观测数据:起点,终点,高差,路线长度
P6,P5,3.6513,0.6
P7,P6,2.5122,0.3
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++)//读取已知点的点名和高程值 {
4
} LevelControlPoint::~LevelControlPoint(void) { } CDhObs::CDhObs(void) { } CDhObs::~CDhObs(void) { }
#pragma once #include"LevelControlPoint.h" #include "Matrix.h" class AdjustLevel { public:
《误差理论与测量平差基础 课程设计(VC.net)》 实习报告
(Visual C++.Net)
班 级: 学 号: 姓 名:
2014 年 2 月 17 日至 2 月 28 日
水准网平差程序设计
一、 实验目的
• 巩固过程的定义与调用 • 巩固类的创建与使用 • 巩固间接平差模型及平差计算 • 掌握平差程序设计的基本技巧与步骤
3
P7,P9,2.0415,0.8 P9,P4,1.5366,0.7 C,P4,1.7450,0.8 P8,P5,2.7436,0.4 P9,P8,1.3783,0,5
实验代码: #pragma once class LevelControlPoint { public:
LevelControlPoint(void);
void AdjustLevel::SetKnownPointSize(int size) {
m_pKnownPoint=new LevelControlPoint[size];//创建动态指针 m_iKnownPointCount=size; }
6
void AdjustLevel::SetUnkonwnPointSize(int size) {
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设置为 }
CString* AdjustLevel::SplitString(CString str, char split, int& iSubStrs) {
int iPos = 0; //分割符位置 int iNums = 0; //分割符的总数 CString strTemp = str; CString strRight; //先计算子字符串的数量 while (iPos != -1) {
2
(8)精度评定; (9)输出平差结果。 4. 水准网高程近似值计算算法
5. 输入数据格式示例
3
已知点数
A,151.5664
B,144.5684
已知点号及高程
C,144.3194
9
未知数
P1,P2,P3,P4,P5,P6,P7,P8,P9 未知点号
15
高差观测数据个数
B,P4,1.4966,0.4
二、 实验内容
水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件 中读取, 计算部分与界面无关。 1. 水准网间接平差模型:
2. 计算示例: 近似高程计算:
1
3. 水准网平差计算一般步骤 (1)读取观测数据和已知数据; (2)计算未知点高程近似值; (3)列高差观测值误差方程; (4)根据水准路线长度计算高差观测值的权; (5)组成法方程; (6)解法方程,求得未知点高程改正数及平差后高程值; (7)求高差观测值残差及平差后高差观测值;
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[]); };
7
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; }
5
#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=new LevelControlPoint[size]; m_iUnknownPointCount=size; }
void AdjustLevel::SetDhObsSize(int size) {
m_pDhObs=new CDhObs[size]; m_iDhObsCount=size;//高差观测值个数 }