高斯投影坐标正反算编程报告Word文件下载.docx
- 文档编号:4699953
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:14
- 大小:92.02KB
高斯投影坐标正反算编程报告Word文件下载.docx
《高斯投影坐标正反算编程报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《高斯投影坐标正反算编程报告Word文件下载.docx(14页珍藏版)》请在冰点文库上搜索。
voidmain(){
zhengsuan();
fansuan();
printf("
/nover!
"
);
}
voidzhengsuan(){
doublemyB,myL;
cout<
<
【正算】"
endl;
请输入大地纬度B"
myB=angleToDegree();
请输入大地经度L"
myL=angleToDegree();
ZhengsuanmyZhengsuan1(myB,myL);
RadianB=%fL=%f\n"
myZhengsuan1.getrB(),myZhengsuan1.getrL());
myZhengsuan1.printLocation();
voidfansuan(){
doublemyX,myY;
【反算】"
请输入国家统一坐标XY。
例如3378627.181920243953.4517"
cin>
>
myX>
myY;
FansuanmyFansuan1(myX,myY);
myFansuan1.printLocation();
///自定功能函数库
MyFunction.h
#definePI3.1415926
doubleangleToDegree(intdu,intfen,floatmiao);
doubleangleToDegree();
//将度分秒换算为度
doubledegreeToRadian(doubledegree);
doubledegreeToRadian();
//将角度换算为弧度
MyFunction.cpp
doubleangleToDegree(intdu,intfen,floatmiao){
doubleresult=0;
result=miao/3600.0+fen/60.0+du;
returnresult;
doubleangleToDegree(){
intdu,fen;
floatmiao;
doubleresult;
请输入度分秒。
例如:
302000"
du>
fen>
miao;
result=angleToDegree(du,fen,miao);
doubledegreeToRadian(doubledegree){
result=degree/57.295779513082321;
doubledegreeToRadian(){
doubleresult,degree;
degree=angleToDegree();
result=degreeToRadian(degree);
///正算类
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>
#definerouSecond206264.806247096355
math.h>
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//!
Zhengsuan.cpp
//Zhengsuan.cpp:
implementationoftheZhengsuanclass.
//Construction/Destruction
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()
doubleZhengsuan:
getX(){
returnX;
getY(){
returnY;
voidZhengsuan:
printLocation(){
正算得国家统一坐标为:
X=%8.8fY=%8.8f\n"
X,Y);
getrB(){
returnrB;
getrL(){
returnrL;
///反算类
Fansuan.h
//Fansuan.h:
interfacefortheFansuanclass.
defined(AFX_FANSUAN_H__5B5E4668_EE81_463F_8D65_FFE2AEACE745__INCLUDED_)
#defineAFX_FANSUAN_H__5B5E4668_EE81_463F_8D65_FFE2AEACE745__INCLUDED_
classFansuan
Fansuan();
Fansuan(doubleX,doubleY);
doublegetB();
doublegetL();
virtual~Fansuan();
//高斯投影坐标
doubleY;
intN;
//国家统一坐标,N为带号
doubleB,Bsecond;
doubleL;
//最后反算得到B、L
//中央经线经度
doublel,lsecond;
//L=L0+l,L0=6*N-3
doubleBf,BfSecond,BfDegree;
doublebeta,betaSecond,betaDegree;
doubleZ;
doubleNf;
doubleb2;
doubleb3;
doubleb4;
doubleb5;
//计算的8个参数
Fansuan.cpp
//Fansuan.cpp:
implementationoftheFansuanclass.
Fansuan:
Fansuan()
Fansuan(doubleX,doubleY){
this->
X=X;
this->
Y=Y;
//初始化x,y
N=(int)(Y/1000000);
//取出带号
L0=6*N-3;
//初始化该带号的中央经线经度
x=X;
y=Y-1000000*N-500000;
beta=x/6367558.4969;
//初始化beta,弧度单位
betaSecond=beta*rouSecond;
//初始化beta,秒单位
betaDegree=betaSecond/3600;
//初始化beta,整度数单位
Bf=beta+(50221746+(293622+(2350+22*cos(beta)*cos(beta))*cos(beta)*cos(beta))*cos(beta)*cos(beta))*(1e-10)*sin(beta)*cos(beta);
//初始化Bf,弧度单位
BfSecond=Bf*rouSecond;
//初始化Bf,秒单位
BfDegree=BfSecond/3600;
//初始化Bf,整度数单位
Nf=6399698.902-(21562.267-(108.973-0.612*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf);
Z=y/(Nf*cos(Bf));
b2=(0.5+0.003369*cos(Bf)*cos(Bf))*sin(Bf)*cos(Bf);
b4=0.25+(0.16161+0.00562*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf);
b3=0.333333-(0.166667-0.001123*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf);
b5=0.2-(0.166667-0.0088*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf);
Bsecond=BfSecond-(1-(b4-0.12*Z*Z)*Z*Z)*Z*Z*b2*rouSecond;
//计算大地经度B,单位为秒
B=Bsecond/3600;
//用整度数表示B
lsecond=(1-(b3-b5*Z*Z)*Z*Z)*Z*rouSecond;
//计算经度差l,单位为秒
l=lsecond/3600;
//用整度数表示l
L=L0+l;
//计算大地经度L
doubleFansuan:
getB(){
returnB;
getL(){
returnL;
voidFansuan:
反算得大地坐标为:
大地纬度B=%f°
大地经度L=%f°
\n"
B,L);
~Fansuan()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 投影 坐标 正反 编程 报告