cin>>du>>fen>>miao;
result=angleToDegree(du,fen,miao);
returnresult;
}
doubledegreeToRadian(doubledegree){
doubleresult=0;
result=degree/57.295779513082321;
returnresult;
}
doubledegreeToRadian(){
doubleresult,degree;
degree=angleToDegree();
result=degreeToRadian(degree);
returnresult;
}
///正算类
Zhengsuan.h
//Zhengsuan.h:
interfacefortheZhengsuanclass.
//
//////////////////////////////////////////////////////////////////////
#if!
defined(AFX_ZHENGSUAN_H__2655EA28_E810_44A3_8F14_56421A7B4466__INCLUDED_)
#defineAFX_ZHENGSUAN_H__2655EA28_E810_44A3_8F14_56421A7B4466__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
#definerouSecond206264.806247096355
#include"MyFunction.h"
#include
#include
usingnamespacestd;
classZhengsuan
{
public:
Zhengsuan();
Zhengsuan(doublefB,doublefL);
doublegetX();
doublegetY();
doublegetrB();
doublegetrL();
voidprintLocation();
virtual~Zhengsuan();
private:
doublex;
doubley;//大地坐标
doubleX;
doubleY;//国家统一坐标
doubleB;
doublerB;
intBsecond;
doubleL;
doublerL;
//输入的大地纬度B,大地经度L,rB,rL为对应弧度表示值,Bsecond为换算成秒数值
intn;//带号n
doubleL0;//中央经线纬度L0
doubleLDot;//纬度差L-L0
intLDotSecond;//换算成秒的纬度差
doublel;
doubleN;
doublea0;
doublea3;
doublea4;
doublea5;
doublea6;//七个计算参数
};
#endif//!
defined(AFX_ZHENGSUAN_H__2655EA28_E810_44A3_8F14_56421A7B4466__INCLUDED_)
Zhengsuan.cpp
//Zhengsuan.cpp:
implementationoftheZhengsuanclass.
//
//////////////////////////////////////////////////////////////////////
#include"Zhengsuan.h"
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
//////////////////////////////////////////////////////////////////////
Zhengsuan:
:
Zhengsuan()
{
}
Zhengsuan:
:
Zhengsuan(doublefB,doublefL){
B=fB;
rB=degreeToRadian(fB);
L=fL;
rL=degreeToRadian(fL);
Bsecond=B*3600;//初始化大地经度L,大地纬度B,Bsecond,按弧度的大地纬度rB
n=(int)(L/6+1);//初始化带号n
L0=6*n-3;//中央经线经度,角度单位
LDot=L-L0;//经度差
LDotSecond=LDot*3600;
l=(LDot)*3600/rouSecond;//计算参数l
N=6399698.902-(21562.267-(108.973-0.612*cos(rB)*cos(rB))*cos(rB)*cos(rB))*cos(rB)*cos(rB);//计算参数N
a0=32140.404-(135.3302-(0.7092-0.004*cos(rB)*cos(rB))*cos(rB)*cos(rB))*cos(rB)*cos(rB);//计算参数a0
a4=(0.25+0.00252*cos(rB)*cos(rB))*cos(rB)*cos(rB)-0.04166;//计算参数a4
a6=(0.166*cos(rB)*cos(rB)-0.084)*cos(rB)*cos(rB);//计算参数a6
a3=(0.3333333+0.001123*cos(rB)*cos(rB))*cos(rB)*cos(rB)-0.1666667;//计算参数a3
a5=0.0083-(0.1667-(0.1968+0.004*cos(rB)*cos(rB))*cos(rB)*cos(rB))*cos(rB)*cos(rB);//计算参数a5
x=6367558.4969*Bsecond/rouSecond-(a0-(0.5+(a4+a6*l*l)*l*l)*l*l*N)*sin(rB)*cos(rB);//正算x
y=(1+(a3+a5*l*l)*l*l)*l*N*cos(rB);//正算y
X=x;
Y=n*1000000+y+500000;//国家统一坐标
}
Zhengsuan:
:
~Zhengsuan()
{
}
doubleZhengsuan:
:
getX(){
returnX;
}
doubleZhengsuan:
:
getY(){
returnY;
}
voidZhengsuan:
:
printLocation(){
printf("正算得国家统一坐标为:
X=%8.8fY=%8.8f\n",X,Y);
}
doubleZhengsuan:
:
getrB(){
returnrB;
}
doubleZhengsuan:
:
getrL(){
returnrL;
}
///反算类
Fansuan.h
//Fansuan.h:
interfacefortheFansu