#include "SevenCalDlg.h"
#include "SevenAdminDlg.h"
#include "ui_SevenCalDlg.h"
#include "CoorTtranDlg.h"
#include "CoordDBHelper.h"
#include "InportPointsDlg.h"
#include <fstream>
#include <iostream>
#include <string>
#include <Eigen/Dense>
#include <vector>
#include <cmath>
#include <iomanip>
#include <QAbstractItemView>
#include "CoordConvert.h"
#include <math.h>
#include <QMessageBox>
#include <QFile>
#include <QFileDialog>
/*
为计算模型中的七个参数,至少需要三个已知点的空间坐标(X,Y,Z)BJ54和WGS-84空间坐标(X,Y,Z)WGS84,利用最小二乘法求出七参数。
然而,我们已知的三个公共控制点的坐标成果,一种是GPS观测中可直接获得的WGS84椭球下的大地坐标经纬度(纬度B、经度L和大地高H),另一种是工程测量中使用的是高斯投影后的平面直角坐标(x,y,h)。即已知的三个公共控制点的坐标成果就是这两种形式的坐标表来表示的。首先,我们要把这两种形式的坐标都转换为七参数模型中的空间直角坐标。步骤如下:
1.将WGS84椭球下的大地坐标经纬度(B,L,H),采用WGS84椭球参数,转换为WGS84的空间直角坐标(X,Y,Z)
2.将北京54投影平面直角坐标(x,y,h),采用克拉索夫斯基椭球参数,转换为大地坐标((B,L,H)后,再转换为北京54的空间直角坐标(X,Y,Z)。
3.将转换得到的三个公共点的北京54空间坐标(X,Y,Z)BJ54和WGS-84空间坐标(X,Y,Z)WGS84代入七参数模型中,求解七个参数。
*/
using namespace std;
using namespace Eigen;
using Eigen::MatrixXd;
#define PI 3.1415926535897932
SevenCalDlg::SevenCalDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::SevenCalDlg)
{
ui->setupUi(this);
CoordDBHelper* pCoordDBHelper= new CoordDBHelper();
QList<QEllipse*> _Ellipses = pCoordDBHelper->GetEllipses();
for(int i = 0;i < _Ellipses.count();i++){
QEllipse* pEllipse = _Ellipses.at(i);
ui->Ctrl_S_Ellipsoid->addItem(pEllipse->ELLISSOIDE, QVariant::fromValue(*pEllipse));
ui->Ctrl_D_Ellipsoid->addItem(pEllipse->ELLISSOIDE, QVariant::fromValue(*pEllipse));
}
QList<QProjection*> _Projections = pCoordDBHelper->GetProjections();
for(int i = 0;i < _Projections.count();i++){
QProjection* pProjection = _Projections.at(i);
ui->Ctrl_S_Projection->addItem(pProjection->ProjectionName, QVariant::fromValue(*pProjection));
ui->Ctrl_D_Projection->addItem(pProjection->ProjectionName, QVariant::fromValue(*pProjection));
}
ui->Ctrl_S_Projection->view()->setFixedWidth(120);
ui->Ctrl_D_Projection->view()->setFixedWidth(120);
delete pCoordDBHelper;
pCoordDBHelper = nullptr;
ui->Ctrl_S_DegreeUnit->addItem("度(D)");
ui->Ctrl_S_DegreeUnit->addItem("度.分秒(DDD.MMSSSSSSS)");
ui->Ctrl_S_DegreeUnit->addItem("度°分′秒″(DDD°MM′SS.SSSSS″)");
ui->Ctrl_S_DegreeUnit->addItem("度:分:秒(DDD:MM:SS.SSSSS)");
ui->Ctrl_S_DegreeUnit->setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow);
ui->Ctrl_S_DegreeUnit->view()->setFixedWidth(180);
ui->Ctrl_D_DegreeUnit->addItem("度(D)");
ui->Ctrl_D_DegreeUnit->addItem("度.分秒(DDD.MMSSSSSSS)");
ui->Ctrl_D_DegreeUnit->addItem("度°分′秒″(DDD°MM′SS.SSSSS″)");
ui->Ctrl_D_DegreeUnit->addItem("度:分:秒(DDD:MM:SS.SSSSS)");
ui->Ctrl_D_DegreeUnit->setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow);
ui->Ctrl_D_DegreeUnit->view()->setFixedWidth(180);
ui->Ctrl_S_Projection->setVisible(false);
ui->Ctrl_S_MeridianLine->setVisible(false);
ui->Ctrl_D_DegreeUnit->setVisible(false);
//测试数据
vc_befor.push_back(Coor(1, -2850017.4720, 4690744.5225, 3237959.9725)); vc_after.push_back(Coor(1, -2850023.9497, 4680915.4702, 3237036.8089));
vc_befor.push_back(Coor(2, -2838514.0744, 4704426.8235, 3228266.3341)); vc_after.push_back(Coor(2, -2838520.5570, 4694597.9568, 3227343.6466));
vc_befor.push_back(Coor(3, -2865534.8833, 4672522.4133, 3250504.9271)); vc_after.push_back(Coor(3, -2865541.3037, 4662693.0793, 3249581.2094));
vc_befor.push_back(Coor(4, -2831988.2672, 4639803.8041, 3325394.3271)); vc_after.push_back(Coor(4, -2831996.3411, 4629974.7937, 3324471.1958));
vc_befor.push_back(Coor(5, -2828112.6536, 4649775.2984, 3314823.5928)); vc_after.push_back(Coor(5, -2828120.6115, 4639946.4678, 3313900.6500));
vc_befor.push_back(Coor(6, -2855329.6573, 4630358.1765, 3318638.7826)); vc_after.push_back(Coor(6, -2855337.4429, 4620529.0691, 3317715.1436));
/*
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
vc_befor.push_back(Coor(1, -2722720.343, 4429306.301, 3682136.625)); vc_after.push_back(Coor(1, -2722708.864, 4429315.210, 3682132.936));
vc_befor.push_back(Coor(2, -2723130.106, 4431260.780, 3679550.261)); vc_after.push_back(Coor(2, -2723118.632, 4431269.685, 3679546.589));
vc_befor.push_back(Coor(3, -2726120.504, 4427716.358, 3681514.511)); vc_after.push_back(Coor(3, -2726109.020, 4427725.263, 3681510.823));
vc_befor.push_back(Coor(4, -2725958.007, 4430477.961, 3678382.473)); vc_after.push_back(Coor(4, -2725946.528, 4430486.870, 3678378.793));
*/
}
SevenCalDlg::~SevenCalDlg()
{
delete ui;
}
void SevenCalDlg::on_Ctrl_S_SpaceCoord_clicked()
{
ui->Ctrl_S_DegreeUnit->setVisible(false);
ui->Ctrl_S_Projection->setVisible(false);
ui->Ctrl_S_MeridianLine->setVisible(false);
}
void SevenCalDlg::on_Ctrl_S_GeodeticCoord_clicked()
{
ui->Ctrl_S_DegreeUnit->setVisible(true);
ui->Ctrl_S_Projection->setVisible(false);
ui->Ctrl_S_MeridianLine->setVisible(false);
}
void SevenCalDlg::on_Ctrl_S_PlaneCoord_clicked()
{
ui->Ctrl_S_DegreeUnit->setVisible(false);
ui->Ctrl_S_Projection->setVisible(true);
ui->Ctrl_S_MeridianLine->setVisible(true);
}
void SevenCalDlg::on_Ctrl_D_SpaceCoord_clicked()
{
ui->Ctrl_D_DegreeUnit->setVisible(false);
ui->Ctrl_D_Projection->setVisible(false);
ui->Ctrl_D_MeridianLine->setVisible(false);
}
void SevenCalDlg::on_Ctrl_D_GeodeticCoord_clicked()
{
ui->Ctrl_D_DegreeUnit->setVisible(true);
ui->Ctrl_D_Projection->setVisible(false);
ui->Ctrl_D_MeridianLine->setVisible(false);
}
void SevenCalDlg::on_Ctrl_D_PlaneCoord_clicked()
{
ui->Ctrl_D_DegreeUnit->setVisible(false);
ui->Ctrl_D_Projection->setVisible(true);
ui->Ctrl_D_MeridianLine->setVisible(true);
}
void SevenCalDlg::on_Ctrl_Save_Para_Btn_clicked()
{
SevenAdminDlg* pSevenAdminDlg = new SevenAdminDlg();
pSevenAdminDlg->setID("");
pSevenAdminDlg->setParaName("");
pSevenAdminDlg->setDx(ui->Ctrl_DX_Value->text().toDouble());
pSevenAdminDlg->setDy(ui->Ctrl_DY_Value->text().toDouble());
pSevenAdminDlg->setDz(ui->Ctrl_DZ_Value->text().toDouble());
pSevenAdminDlg->setWx(ui->Ctrl_WX_Value->text().toDouble());
pSevenAdminDlg->setWy(ui->Ctrl_WY_Value->text().toDouble());
pSevenAdminDlg->setWz(ui->Ctrl_WZ_Value->text().toDouble());
pSevenAdminDlg->setK(ui->Ctrl_K_Value->text().toDouble());
pSevenAdminDlg->exec();
delete pSevenAdminDlg;
pSevenAdminDlg = nullptr;
////////////////////////////////////////////////////////////
///测试代码
/*
SevenParameter sevenParameter;
std::vector<Coor> DV;
Cal_Para(vc_befor, vc_after, sevenParameter, DV);
qDebug()<<"计算结果=====================";
qDebug()<<"改正数-----------------------------";
for (int i = 0; i < DV.size(); i++)
{
qDebug()<<"Vx(m):"<<QString::number(DV.at(i).X,'f', 4)<<" Vy(m):"<<QString::number(DV.at(i).Y,'f', 4)<<" Vz(m):"<<QString::number(DV.at(i).Z,'f', 4);
}
qD
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
QT版坐标转换(七、四参数求解)源码 (1232个子文件)
CoordTrans.bin 28KB
Cholesky 1KB
CholmodSupport 2KB
Core 12KB
SevenCalDlg.cpp 80KB
CoorTtranDlg.cpp 39KB
CoordConvert.cpp 29KB
CoordDBHelper.cpp 12KB
moc_CoorTtranDlg.cpp 11KB
moc_SevenCalDlg.cpp 10KB
moc_SevenCalDlg.cpp 10KB
SevenAdminDlg.cpp 10KB
moc_CoorTtranDlg.cpp 7KB
moc_InportPointsDlg.cpp 6KB
moc_InportPointsDlg.cpp 6KB
moc_MyComboBox.cpp 6KB
moc_SevenAdminDlg.cpp 5KB
moc_SevenAdminDlg.cpp 5KB
moc_mainwindow.cpp 5KB
moc_mainwindow.cpp 5KB
moc_CoordDBHelper.cpp 3KB
moc_CoordDBHelper.cpp 3KB
moc_CCombobox.cpp 3KB
moc_CCombobox.cpp 3KB
moc_Brusa.cpp 3KB
InportPointsDlg.cpp 2KB
mainwindow.cpp 952B
main.cpp 186B
Brusa.cpp 84B
CCombobox.cpp 58B
MyComboBox.cpp 5B
Makefile.Debug 233KB
Dense 122B
Eigen 35B
Eigenvalues 2KB
CoordTrans.exe 1.83MB
CoordTrans.exe 353KB
Geometry 2KB
lapacke.h 1.01MB
PacketMath.h 185KB
MatrixProduct.h 117KB
GeneralBlockPanelKernel.h 106KB
PacketMath.h 100KB
PacketMath.h 86KB
GenericPacketMathFunctions.h 66KB
PacketMath.h 63KB
PacketMath.h 63KB
CoreEvaluators.h 62KB
Transform.h 60KB
Eigen_Colamd.h 60KB
MathFunctions.h 59KB
BlockMethods.h 58KB
SparseMatrix.h 56KB
PacketMath.h 56KB
BDCSVD.h 53KB
ProductEvaluators.h 53KB
Macros.h 52KB
TypeCasting.h 50KB
PlainObjectBase.h 48KB
Memory.h 46KB
AssignEvaluator.h 41KB
UnaryFunctors.h 39KB
GenericPacketMath.h 38KB
TriangularMatrix.h 37KB
PacketMath.h 36KB
CwiseNullaryOp.h 35KB
XprHelper.h 35KB
Half.h 35KB
SelfAdjointEigenSolver.h 34KB
VectorwiseOp.h 34KB
Quaternion.h 34KB
SuperLUSupport.h 34KB
PacketMath.h 33KB
SparseLU.h 33KB
JacobiSVD.h 32KB
FullPivLU.h 32KB
ui_SevenCalDlg.h 31KB
DenseBase.h 31KB
blas.h 30KB
Meta.h 29KB
SparseQR.h 28KB
PacketMath.h 27KB
BFloat16.h 26KB
FullPivHouseholderQR.h 26KB
SparseSelfAdjointView.h 25KB
SparseCwiseBinaryOp.h 25KB
ColPivHouseholderQR.h 25KB
CholmodSupport.h 25KB
DenseStorage.h 25KB
LDLT.h 24KB
MatrixProductMMA.h 24KB
DenseCoeffsBase.h 24KB
UmfPackSupport.h 24KB
SparseBlock.h 24KB
Matrix.h 24KB
SimplicialCholesky.h 24KB
MatrixBase.h 23KB
RealQZ.h 23KB
HouseholderSequence.h 23KB
CompleteOrthogonalDecomposition.h 23KB
共 1232 条
- 1
- 2
- 3
- 4
- 5
- 6
- 13
资源评论
bbbin3000
- 粉丝: 5
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功