课程标准
一、课程基本信息
课程编号:0406505
课程名称:测量平差
学 时:60
实验学时:8
总 学 分: 5
课程类别:核心专业课
课程性质:必修课
先行课程:地形测量、地形测量实训、高等数学、工程数学。
后续课程: 控制测量、GPS测量技术、数字化测图技术、地籍测量、控制测量实训、工程测量实训、地理信息系统。
适用专业(方向):测绘工程
学期周学时:4学时
制 定 人: 陈凡臣
制定时间: 20##年2月
授课对象: 工程测量与监理专业
二、课程定位
《测量平差》是工程测量与监理技术专业的核心课程,在工程测量技术专业的整个课程体系中占有重要地位,主要培养学生测量内业的基本技能。通过本课程的学习,学生应掌握控制测量数据的处理能力和工程测量成果精度的分析能力,具有工程建设一线的工程测量能力,同时为测量专业《控制测量》、《GPS测量》、《工程测量》等课程的学习奠定良好的基础。
三、课程设计
打破传统学科课程以知识为主线构建知识体系的模式,采用以测量平差的工作单元为引领,通过工作单元来整合相关知识与技能,将该课程设计成以能力为核心的学习领域课程体系,进行教学做一体化的情境化教学。本课程所设计的相关工作单元是以工程测量员工作岗位作为课程主线,将本课程分解为误差传播、条件平差、间接平差、误差椭圆、软件平差五个学习情景,有利于学生循序渐进地从误差基本理论入手进而详细的掌握测量平差的具体方法。学习过程是一个从简到繁,从整体到局部的过程。教学活动设计中安排了多种训练活动。同时按照岗位工作单元的操作要求,倡导学生在“做”中“学”。通过实践训练,以培养学生胜任工程测量岗位的平差能力,适应学生职业生涯发展的需要。
1.课程开发上,采用校企合作进行以能力培养为核心的设计理念
以教高[2006]16号文件精神为指导,紧紧围绕职业岗位的实际需求,以职业能力培养为重点,与行业企业合作共同编制《测量平差习题集》,训练教材贯穿课程学习的全过程。
2.能力培养过程是一个由简到繁的过程
这个特点在学习情境二中体现最为充分,先让学生认识条件平差的基本原理,然后根据各种控制网的情况组合条件方程式,最后是解算条件方程式和精度评定。平差能力培养循序渐进。
3.多种教学方法与手段综合运用
测绘这个行业决定了测量平差课程不可能实现真正的生产性教学做一体化,教学过程中要培养学生的感性认识和动手能力只能通过案例分析、视频教学以及与实际工程结合最紧密的项目任务来提高学生的综合能力,因此课程设计中运用了大量的项目教学法、单元驱动法、案例法等,因为需要大量的数据,几乎所有的课程实训也需要在多媒体教室进行。
四、课程目标
(一)专业能力
1、能熟练进行控制测量数据的处理和观测条件的改善;
2、能进行水准测量、平面控制测量的条件平差和间接平差;
3、能够测量精度的评定;
4、能熟知误差椭圆的应用。
(二)方法能力
1、具有理解能力与表达能力;
2、能够从个案中找到共性,总结规律,举一反三;
3、准确地用词遣句和矩阵计算。
(三)社会能力
1、具有守法、守纪意识和文明的职业精神;
2、具有良好的团队协作精神;
3、具有信息收集、分析和处理能力;
4、具有认真负责的工作态度和严谨的工作精神。
五、课程内容与要求
1.课程内容
2.课程教学要求
3.教学重点、难点
(1)测量误差的分类、特性与精度评定指标;
(2)完成传播定律的应用;
(3)定权的基本方法;
(4)条件平差的具体步骤;
(5)间接平差的基本过程;
(6)误差椭圆的应用;
(7)利用平差软件教学水准网、导线网严密平差。
六、课程实施建议
u 教学建议
1、教学过程:本课程教学的实施主要是以真实工程案例为载体,通过理论与实践一体化的教学,培养学生测量平差的能力,教学中强调以学生为主体,教师主要是引导学生学习。
2、教学方法:项目教学法、任务驱动法、讨论教学法、引导式教学法、案例法、视频教学法。
3、对教师的要求:教师应具有测量专业课程教学的综合能力。
4、对学生的要求:学生应具有认真的学习态度和实践精神及对专业的热爱。
u 考核评价建议
总评成绩由平时成绩20%、课程设计20%、期末考试60%三部分组成。
平时成绩主要依据考勤、课堂表现、课后作业综合确定。
课程设计分组进行,设计前给学生下达任务,教师根据课程设计任务提出若干问题,并依据学生完成的质量赋分。时间初步确定为教学周最后一周。
期末考试考察基本知识及应用所学知识解决工程问题的能力。
第二篇:测绘程序设计—实验八 水准网平差程序设计报告
《测绘程序设计(VC.net)》
上机实验报告
(Visual C++.Net)
班 级: 测绘0901班
学 号: 0405090204
姓 名: 代娅琴
20##年4月29日
实验八 平差程序设计基础
一、 实验目的
? 巩固过程的定义与调用
? 巩固类的创建与使用
? 巩固间接平差模型及平差计算
? 掌握平差程序设计的基本技巧与步骤
二、 实验内容
水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取,
计算部分与界面无关。
1. 水准网间接平差模型:
2. 计算示例:
近似高程计算:
3. 水准网平差计算一般步骤
(1)读取观测数据和已知数据;
(2)计算未知点高程近似值;
(3)列高差观测值误差方程;
(4)根据水准路线长度计算高差观测值的权;
(5)组成法方程;
(6)解法方程,求得未知点高程改正数及平差后高程值;
(7)求高差观测值残差及平差后高差观测值;
(8)精度评定;
(9)输出平差结果。
4. 水准网高程近似值计算算法
5. 输入数据格式示例
实验代码:
#pragma once
class LevelControlPoint
{
public:
LevelControlPoint(void);
~LevelControlPoint(void);
public:
CString strName;//点名
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; //子串的数量= 分割符数量+ 1
CString* 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; //子串的数量= 分割符数量+ 1
CString* 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: 在此添加控件通知处理程序代码
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);
}
void CIndircLelveDlg::OnBnClickedComputelevel()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
setlocale(LC_ALL,"");
double *Qx=new double[LevelComput.m_iUnknownPointCount];
double r0;
LevelComput.CompAdjust(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);
}
三、 实验结果
打开文件数据:
平差结果:
四、实验心得
这从实验是我们测绘程序设计的最后一次实验,虽然这个学期我们做了好几次相关的实验,但是我却发现自己学的东西也越来越模糊,感觉很多内容都不理解。这次的实验很大程度上我都是按照《测绘程序设计》上面单导线简易计算来编的,在加上后面的关于水准网间接平差的误差方程和法方程,以及精度评定的相关函数,来完成的。而自己主要完成的就是水准网的数据读取,保存的操作,由于这部分主要用的知识是文件的读取的,因为前面做过,所以不是太难。但是这并不意味着这次实验很简单,至少在我心中这的确比较难,因为里面很多东西不是纯粹的把代码写上去就可以完成,还要靠自己做相应的代码对应,才能够真正的得到想要的结果。但学好编程并扎实的为自己所用是需要更多的学习和练习的,我知道在掌握课堂知识的同时,主动的去寻找吸收相关的知识,希望通过本门课程的学习,掌握学习编程的方法,使自己的水平能够更进一步,循序渐进的掌握更多。虽然这门课的实验已经结束,但是我却深深地知道,我们专业对编程的要求很高,而且必须具备较好的编程能力,或许这些日子下来,我学到的不是很多,但是我或多或少明白,编程是一个循序渐进的过程,我想真的能够在这方面有所突破,就更要花时间多花工夫。