单导线平差计算具体步骤
第一步:读取观测数据与已知点坐标数据
第二步:计算未知点近似坐标(推算方法与简易计算中一样)
第三步:计算角度观测值误差方程的系数和常数项
第四步:计算边长观测值误差方程的系数和常数项
第五步:组成误差方程,得到系数矩阵和常数项矩阵
第六步:定权,得到权矩阵
第七步:组成并解算法方程
第八步:计算观测值残差及平差后观测值
第九步:精度评定(单位权中误差、观测值验后误差、点位误差,误差椭圆参
数计算)
第十步:输出结果
//数据格式: //第一行:单水准类型,=附合,=闭合 //第二行:起点高程," 点号,高程" //第三行:终点高程," 点号,高程" (附合水准才有,闭合水准则开始观测数据) //第四行:观测数据," 序号,高差观测值m ,水准路线长度km" //...... UpdateData(FALSE); //Edit control的MultiLine 和WantReturn 属性都设置成TRUE strObsData.Format(_T("%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s"), _T("1" ), _T("A, 45.286") , _T("B, 49.579") , _T("1,2.331,1.6" ), _T("2,2.813,2.1" ), _T("3,-2.244,1.7" ), _T("4,1.430,2.0" ));
} void CSingleLevelingDlg::OnSysCommand(UINT nID, LPARAM lParam) { } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的MFC 应用程序, // 这将由框架自动完成。 void CSingleLevelingDlg::OnPaint() { SendMessage(WM_ICONERASEBKGND, if (IsIconic()) { CPaintDC dc(this ); // 用于绘制的设备上下文 if ((nID & 0xFFF0) == IDM_ABOUTBOX) { } else { } CDialog::OnSysCommand(nID, lParam); CAboutDlg dlgAbout; dlgAbout.DoModal();
reinterpret_cast(dc.GetSafeHdc()), 0);
// 绘制图标 // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2;
} } else { } CDialog::OnPaint(); //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CSingleLevelingDlg::OnQueryDragIcon() { } void CSingleLevelingDlg::OnBnClickedBtncompute() { CString *strTmp=NULL; int n; nLevelType = _ttoi(pstrLine[0]); //第一行为单一水准类型 //分行并存入字符串数组 CString *pstrLine=SplitString(strObsData,13,iLine); if (iLine(m_hIcon);
Ha = _tstof((strTmp[1])); //获取起始点高程 if (strTmp!=NULL)//释放内存 { } delete [] strTmp; strTmp=NULL; strTmp = SplitString(pstrLine[2], ',' ,n); //分割第三行 Hb = _tstof((strTmp[1])); //获取终点高程 if (strTmp!=NULL)//释放内存 { } delete [] strTmp; strTmp=NULL; //逐行用Split 函数分离,获取观测数据 for (int i=0;i
} dSumD = dSumD + dObs[i];//计算水准路线总长度 dFh = dFh - (Hb - Ha); //计算高差闭合差 for (int i=0;i
} if (dObs!=NULL) { } delete [] dObs; dObs=NULL; if (hObs!=NULL) { } if (dH!=NULL) { } delete [] dH; dH=NULL; delete [] hObs; hObs=NULL; CString * CSingleLevelingDlg::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
水准网平差计算一般步骤
(1) 读取观测数据和已知数据
(2)计算未知点高程近似值
(3)列高差观测值误差方程
(4)根据水准路线长度计算高差观测值的权
(5)组成法方程
(6)解法方程,求得未知点高程改正数及平差后高程值
(7)求高差观测值残差及平差后高差观测值
(8)精度评定
(9)输出平差结果
单一水准导线计算
//数据格式:
//第一行:单水准类型,=附合,=闭合
//第二行:起点高程," 点号,高程"
//第三行:终点高程," 点号,高程" (附合水准才有,闭合水准则开始观测数据) //第四行:观测数据," 序号,高差观测值m ,水准路线长度km"
//......
void CSingleLevelingDlg::OnBnClickedBtncompute()
{
CString *strTmp=NULL; int n; //分行并存入字符串数组 CString *pstrLine=SplitString(strObsData,13,iLine); if (iLine
strTmp = SplitString(pstrLine[1], ',' ,n); //分割第二行 Ha = _tstof((strTmp[1])); //获取起始点高程 if (strTmp!=NULL)//释放内存 { } delete [] strTmp; strTmp=NULL; strTmp = SplitString(pstrLine[2], ',' ,n); //分割第三行 Hb = _tstof((strTmp[1])); //获取终点高程 if (strTmp!=NULL)//释放内存 { } delete [] strTmp; strTmp=NULL; //逐行用Split 函数分离,获取观测数据 for (int i=0;i
} dFh = dFh + hObs[i]; //计算高差观测值之和 dSumD = dSumD + dObs[i];//计算水准路线总长度 dFh = dFh - (Hb - Ha); //计算高差闭合差 for (int i=0;i
}
CString * CSingleLevelingDlg::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) //没有找到分割符 if (hObs!=NULL) { } if (dH!=NULL) { } delete [] dH; dH=NULL; delete [] hObs; hObs=NULL; //释放内存 if (dObs!=NULL) { } delete [] dObs; dObs=NULL;
{
//子字符串数就是字符串本身
iSubStrs = 1;
return NULL;
}
//子字符串数组
iSubStrs = iNums + 1; //子串的数量= 分割符数量+ 1 CString* pStrSplit;
pStrSplit = new CString[iSubStrs];
strTemp = str;
CString strLeft;
for (int i = 0; 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;
}
单导线平差计算具体步骤
第一步:读取观测数据与已知点坐标数据
第二步:计算未知点近似坐标(推算方法与简易计算中一样)
第三步:计算角度观测值误差方程的系数和常数项
第四步:计算边长观测值误差方程的系数和常数项
第五步:组成误差方程,得到系数矩阵和常数项矩阵
第六步:定权,得到权矩阵
第七步:组成并解算法方程
第八步:计算观测值残差及平差后观测值
第九步:精度评定(单位权中误差、观测值验后误差、点位误差,误差椭圆参
数计算)
第十步:输出结果
//数据格式: //第一行:单水准类型,=附合,=闭合 //第二行:起点高程," 点号,高程" //第三行:终点高程," 点号,高程" (附合水准才有,闭合水准则开始观测数据) //第四行:观测数据," 序号,高差观测值m ,水准路线长度km" //...... UpdateData(FALSE); //Edit control的MultiLine 和WantReturn 属性都设置成TRUE strObsData.Format(_T("%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s"), _T("1" ), _T("A, 45.286") , _T("B, 49.579") , _T("1,2.331,1.6" ), _T("2,2.813,2.1" ), _T("3,-2.244,1.7" ), _T("4,1.430,2.0" ));
} void CSingleLevelingDlg::OnSysCommand(UINT nID, LPARAM lParam) { } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的MFC 应用程序, // 这将由框架自动完成。 void CSingleLevelingDlg::OnPaint() { SendMessage(WM_ICONERASEBKGND, if (IsIconic()) { CPaintDC dc(this ); // 用于绘制的设备上下文 if ((nID & 0xFFF0) == IDM_ABOUTBOX) { } else { } CDialog::OnSysCommand(nID, lParam); CAboutDlg dlgAbout; dlgAbout.DoModal();
reinterpret_cast(dc.GetSafeHdc()), 0);
// 绘制图标 // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2;
} } else { } CDialog::OnPaint(); //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CSingleLevelingDlg::OnQueryDragIcon() { } void CSingleLevelingDlg::OnBnClickedBtncompute() { CString *strTmp=NULL; int n; nLevelType = _ttoi(pstrLine[0]); //第一行为单一水准类型 //分行并存入字符串数组 CString *pstrLine=SplitString(strObsData,13,iLine); if (iLine(m_hIcon);
Ha = _tstof((strTmp[1])); //获取起始点高程 if (strTmp!=NULL)//释放内存 { } delete [] strTmp; strTmp=NULL; strTmp = SplitString(pstrLine[2], ',' ,n); //分割第三行 Hb = _tstof((strTmp[1])); //获取终点高程 if (strTmp!=NULL)//释放内存 { } delete [] strTmp; strTmp=NULL; //逐行用Split 函数分离,获取观测数据 for (int i=0;i
} dSumD = dSumD + dObs[i];//计算水准路线总长度 dFh = dFh - (Hb - Ha); //计算高差闭合差 for (int i=0;i
} if (dObs!=NULL) { } delete [] dObs; dObs=NULL; if (hObs!=NULL) { } if (dH!=NULL) { } delete [] dH; dH=NULL; delete [] hObs; hObs=NULL; CString * CSingleLevelingDlg::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
水准网平差计算一般步骤
(1) 读取观测数据和已知数据
(2)计算未知点高程近似值
(3)列高差观测值误差方程
(4)根据水准路线长度计算高差观测值的权
(5)组成法方程
(6)解法方程,求得未知点高程改正数及平差后高程值
(7)求高差观测值残差及平差后高差观测值
(8)精度评定
(9)输出平差结果
单一水准导线计算
//数据格式:
//第一行:单水准类型,=附合,=闭合
//第二行:起点高程," 点号,高程"
//第三行:终点高程," 点号,高程" (附合水准才有,闭合水准则开始观测数据) //第四行:观测数据," 序号,高差观测值m ,水准路线长度km"
//......
void CSingleLevelingDlg::OnBnClickedBtncompute()
{
CString *strTmp=NULL; int n; //分行并存入字符串数组 CString *pstrLine=SplitString(strObsData,13,iLine); if (iLine
strTmp = SplitString(pstrLine[1], ',' ,n); //分割第二行 Ha = _tstof((strTmp[1])); //获取起始点高程 if (strTmp!=NULL)//释放内存 { } delete [] strTmp; strTmp=NULL; strTmp = SplitString(pstrLine[2], ',' ,n); //分割第三行 Hb = _tstof((strTmp[1])); //获取终点高程 if (strTmp!=NULL)//释放内存 { } delete [] strTmp; strTmp=NULL; //逐行用Split 函数分离,获取观测数据 for (int i=0;i
} dFh = dFh + hObs[i]; //计算高差观测值之和 dSumD = dSumD + dObs[i];//计算水准路线总长度 dFh = dFh - (Hb - Ha); //计算高差闭合差 for (int i=0;i
}
CString * CSingleLevelingDlg::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) //没有找到分割符 if (hObs!=NULL) { } if (dH!=NULL) { } delete [] dH; dH=NULL; delete [] hObs; hObs=NULL; //释放内存 if (dObs!=NULL) { } delete [] dObs; dObs=NULL;
{
//子字符串数就是字符串本身
iSubStrs = 1;
return NULL;
}
//子字符串数组
iSubStrs = iNums + 1; //子串的数量= 分割符数量+ 1 CString* pStrSplit;
pStrSplit = new CString[iSubStrs];
strTemp = str;
CString strLeft;
for (int i = 0; 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;
}