95 lines
1.9 KiB
C++
95 lines
1.9 KiB
C++
#include "geotogk.h"
|
|
#include "ui_geotogk.h"
|
|
|
|
GEOtoGK::GEOtoGK(QWidget *parent) :
|
|
QDialog(parent),
|
|
ui(new Ui::GEOtoGK)
|
|
{
|
|
ui->setupUi(this);
|
|
setAttribute(Qt::WA_DeleteOnClose);
|
|
((Widget*)parent)->changeOpenWidget(this);
|
|
}
|
|
|
|
GEOtoGK::~GEOtoGK()
|
|
{
|
|
delete ui;
|
|
}
|
|
void GEOtoGK::closeEvent(QCloseEvent *event)
|
|
{
|
|
((Widget*)parent())->clearOpenWidget();
|
|
event->accept();
|
|
}
|
|
|
|
void GEOtoGK::on_pushButton_2_clicked()
|
|
{
|
|
close();
|
|
}
|
|
|
|
void GEOtoGK::on_pushButton_clicked()
|
|
{
|
|
int nZone, b1, b2, b3, l1, l2, l3;
|
|
bool south;
|
|
|
|
int XL, YL;
|
|
|
|
double CA2=5333.5419;
|
|
double CA4=4.84339;
|
|
double CA6=0.007622;
|
|
double A1,A2,A3,B1,B2,B3,C1,C2,C3,D1,D2,D3,
|
|
E,EL,FI,L0,TGE,THP,P;
|
|
|
|
|
|
|
|
nZone = ui->lineEdit->text().toInt();
|
|
south = ui->checkBox->isChecked();
|
|
b1 = ui->lineEdit_2->text().toInt();
|
|
b2 = ui->lineEdit_3->text().toInt();
|
|
b3 = ui->lineEdit_4->text().toInt();
|
|
l1 = ui->lineEdit_5->text().toInt();
|
|
l2 = ui->lineEdit_6->text().toInt();
|
|
l3 = ui->lineEdit_7->text().toInt();
|
|
|
|
|
|
|
|
// ðàñ÷åò
|
|
|
|
|
|
B = (((b3/60)+b2) /60 + b1)/180*M_PI;
|
|
if (south) B=-B;
|
|
L = (((l3/60)+l2)/60+l1)/180*M_PI;
|
|
|
|
L0=double(nZone)*6.0-3.0;
|
|
L0=L0*M_PI/180.0;
|
|
EL=L-L0;
|
|
FI=(2624.0*sin(B)*sin(B)+372834.0)*sin(B)*sin(B);
|
|
FI=B-((FI+66934216.0)*sin(B)*cos(B)*0.0000000001);
|
|
TGE=tan(FI)/cos(EL);
|
|
E=atan(TGE);
|
|
THP=cos(FI)*sin(EL);
|
|
P=0.5*log((1.0+THP)/(1.0-THP));
|
|
A1=sin(2.0*E);
|
|
B1=cos(2.0*E);
|
|
C1=sinh(2.0*P);
|
|
D1=cosh(2.0*P);
|
|
A2=2.0*A1*B1;
|
|
B2=1.0-2.0*A1*A1;
|
|
C2=2.0*C1*D1;
|
|
D2=1.0+2.0*C1*C1;
|
|
A3=A1*B2+A2*B1;
|
|
B3=B1*B2-A1*A2;
|
|
C3=C1*D2+C2*D1;
|
|
D3=D1*D2+C1*C2;
|
|
|
|
XL = 6367558.497*E+CA2*A1*D1+CA4*A2*D2+CA6*A3*D3;
|
|
if (XL<0) XL=-XL;
|
|
|
|
YL = 6367558.497*P+CA2*B1*C1+CA4*B2*C2+CA6*B3*C3 + 500000.0;
|
|
|
|
ui->lineEdit_8->setText(QString::number(XL));
|
|
ui->lineEdit_9->setText(QString::number(YL));
|
|
|
|
|
|
|
|
}
|
|
|