📄 coordtranbase.cpp
字号:
// CoordTran.cpp: implementation of the CCoordTran class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <fstream.h>
#include <math.h>
#include "CoordTranBase.h"
#include "common.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCoordTranBase::CCoordTranBase()
{
m_Flag=0; //默认为54椭球
}
CCoordTranBase::~CCoordTranBase()
{
}
//从数据文件中读取已知数据
//返回所读数据的个数,
//filename:文件名
//flag=1时,为XYZ数据,flag=1时为BLH数据
int CCoordTranBase::ReadFile(CString filename, int flag)
{
ifstream infile;
int i=0;
infile.open(filename,ios::nocreate);
if(!infile)
{
cout<<"Can't Open inputfile"<<endl;
return 0;
}
if(flag==0)
{
xyz m_temp;
for(i=0;!infile.eof();i++)
{
infile>>m_temp.x>>m_temp.y>>m_temp.z;
m_xyz.Add(m_temp);
}
}
else
{
blh m_temp;
for(i=0;!infile.eof();i++)
{
infile>>m_temp.b>>m_temp.l>>m_temp.h;
m_blh.Add(m_temp);
}
}
infile.close();
return i;
}
int CCoordTranBase::WriteFile(CString filename, int flag)
{
ofstream outfile;
int i;
outfile.open(filename);
if(!outfile)
{
cout<<"Open outfile Error!"<<endl;
return 0;
}
if(flag==0)
{
for(i=0;i<m_xyz.GetSize();i++)
{
outfile.precision(14);
outfile<<m_xyz.GetAt(i).x<<" "<<m_xyz.GetAt(i).y<<" "<<m_xyz.GetAt(i).z<<endl;
}
}
else
{
for(i=0;i<m_blh.GetSize();i++)
{
outfile.precision(14);
outfile<<m_blh.GetAt(i).b<<" "<<m_blh.GetAt(i).l<<" "<<m_blh.GetAt(i).h<<endl;
//outfile<<m_blh.GetAt(i).b<<m_blh.GetAt(i).l<<m_blh.GetAt(i).h<<endl;
}
}
outfile.close();
return i;
}
void CCoordTranBase::DecToArc(void)
{
double DecTemp1,DecTemp2,DecTemp3,DecTemp4;
blh bte;
for(int i=0;i<m_blh.GetSize();i++)
{
//计算B
DecTemp1=m_blh.GetAt(i).getb();
//DecTemp3 存放余数部分,DecTemp2 存放整数部分
DecTemp3=modf(DecTemp1,&DecTemp2);
DecTemp3=DecTemp3*100;
DecTemp1=modf(DecTemp3,&DecTemp4);
//计算十进制角度
DecTemp3=DecTemp2+DecTemp4/60+DecTemp1*100/3600;
//转化成弧度值
DecTemp3=DecTemp3*PI/180;
bte.b=DecTemp3;
//m_blh.GetAt(i).setb(DecTemp3);
//计算L
DecTemp1=m_blh.GetAt(i).getl();
//DecTemp3 存放余数部分,DecTemp2 存放整数部分
DecTemp3=modf(DecTemp1,&DecTemp2);
DecTemp3=DecTemp3*100;
DecTemp1=modf(DecTemp3,&DecTemp4);
//计算十进制角度
DecTemp3=DecTemp2+DecTemp4/60+DecTemp1*100/3600;
//转化成弧度值
DecTemp3=DecTemp3*PI/180;
bte.l=DecTemp3;
//m_blh.GetAt(i).setl(DecTemp3);
//计算H
/* DecTemp1=m_blh.GetAt(i).geth();
//DecTemp3 存放余数部分,DecTemp2 存放整数部分
DecTemp3=modf(DecTemp1,&DecTemp2);
DecTemp3=DecTemp3*100;
DecTemp1=modf(DecTemp3,&DecTemp4);
//计算十进制角度
DecTemp3=DecTemp2+DecTemp4/60+DecTemp1*100/3600;
//转化成弧度值
DecTemp3=DecTemp3*PI/180;
m_blh.GetAt(i).seth(DecTemp3);
*/
bte.h=m_blh.GetAt(i).geth();
m_blh.SetAt(i,bte);
}
}
void CCoordTranBase::ArcToDec(void)
{
blh bte;
double DecTemp1,DecTemp2,DecTemp3,DecTemp4;
for(int i=0;i<m_blh.GetSize();i++)
{
//计算B
DecTemp1=m_blh.GetAt(i).getb();
if(DecTemp1<0)
DecTemp1=DecTemp1+PI;
//计算十进制角度
DecTemp1=DecTemp1*180/PI;
//DecTemp3 存放余数部分,DecTemp2 存放整数部分
DecTemp3=modf(DecTemp1,&DecTemp2);
DecTemp3=DecTemp3*60;
DecTemp1=modf(DecTemp3,&DecTemp4);
DecTemp3=DecTemp2+DecTemp4/100+DecTemp1*60/10000;
bte.b=DecTemp3;
//m_blh.GetAt(i).setb(DecTemp3);
//计算L
DecTemp1=m_blh.GetAt(i).getl();
if(DecTemp1<0)
DecTemp1=DecTemp1+PI;
//计算十进制角度
DecTemp1=DecTemp1*180/PI;
//DecTemp3 存放余数部分,DecTemp2 存放整数部分
DecTemp3=modf(DecTemp1,&DecTemp2);
DecTemp3=DecTemp3*60;
DecTemp1=modf(DecTemp3,&DecTemp4);
DecTemp3=DecTemp2+DecTemp4/100+DecTemp1*60/10000;
bte.l=DecTemp3;
//m_blh.GetAt(i).setl(DecTemp3);
//计算H
/*DecTemp1=m_blh.GetAt(i).geth();
bl.h=DecTemp1;
m_bltemp.Add(bl);
//计算十进制角度
/* DecTemp1=DecTemp1*180/PI;
//DecTemp3 存放余数部分,DecTemp2 存放整数部分
DecTemp3=modf(DecTemp1,&DecTemp2);
DecTemp3=DecTemp3*60;
DecTemp1=modf(DecTemp3,&DecTemp4);
DecTemp3=DecTemp2+DecTemp4/100+DecTemp1*60/10000;
m_blh.GetAt(i).seth(DecTemp3);
*/
bte.h=m_blh.GetAt(i).geth();
m_blh.SetAt(i,bte);
}
}
double CCoordTranBase::DecToArc(double m_dec)
{
double DecTemp1,DecTemp2,DecTemp3,DecTemp4;
DecTemp1=m_dec;
//DecTemp3 存放余数部分,DecTemp2 存放整数部分
DecTemp3=modf(DecTemp1,&DecTemp2);
DecTemp3=DecTemp3*100;
DecTemp1=modf(DecTemp3,&DecTemp4);
//计算十进制角度
DecTemp3=DecTemp2+DecTemp4/60+DecTemp1*100/3600;
//转化成弧度值
DecTemp3=DecTemp3*PI/180;
return DecTemp3;
}
double CCoordTranBase::ArcToDec(double m_Arc)
{
double DecTemp1,DecTemp2,DecTemp3,DecTemp4;
DecTemp1=m_Arc;
if(DecTemp1<0)
DecTemp1=DecTemp1+PI;
//计算十进制角度
DecTemp1=DecTemp1*180/PI;
//DecTemp3 存放余数部分,DecTemp2 存放整数部分
DecTemp3=modf(DecTemp1,&DecTemp2);
DecTemp3=DecTemp3*60;
DecTemp1=modf(DecTemp3,&DecTemp4);
DecTemp3=DecTemp2+DecTemp4/100+DecTemp1*60/10000;
return DecTemp3;
}
void CCoordTranBase::InitValue(int flag)
{
m_Flag=flag;
switch(m_Flag)
{
case 0:
e2=e54;
lax=a54;
sax=b54;
af=af54;
break;
case 1:
e2=e80;
lax=a80;
sax=b80;
af=af80;
break; //.....
case 2:
e2=e84;
lax=a84;
sax=b84;
af=af84;
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -