高斯投影坐標正反算編程報告_第1頁
高斯投影坐標正反算編程報告_第2頁
高斯投影坐標正反算編程報告_第3頁
高斯投影坐標正反算編程報告_第4頁
高斯投影坐標正反算編程報告_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

高斯投影坐標正反算編程報告編程思想進行高斯投影坐標正反算的編程需要牽涉到大量的公式,為了使程序條理更清楚,各塊的數(shù)據(jù)復(fù)用性更強,這里采取了結(jié)構(gòu)化的編程思想。程序由四大塊組成。GeodesyHomework.cpp文件用于存放main()函數(shù),是整個程序的入口。通過結(jié)構(gòu)化的編程盡力使main()函數(shù)變得簡單。MyFunction.h和MyFunction.cpp用于存放計算過程中進行角度弧度換算時所要用到的一些自定的轉(zhuǎn)換函數(shù)。Zhengsuan.h和Zhengsuan.cpp用于存放Zhengsuan類,在Zhengsuan類中聲明了高斯投影坐標正算所要用到的所有變量,在類的構(gòu)造函數(shù)中進行成員變量的初始化及正算計算。通過get函數(shù)獲得相應(yīng)的正算結(jié)果。Fansuan.h和Fansuan.cpp用于存放Fansuan類,類似于Zhengsuan類,F(xiàn)ansuan類中聲明了高斯投影坐標反算所要用到的所有變量,在類的構(gòu)造函數(shù)中進行成員變量的初始化及反算計算。通過get函數(shù)獲得相應(yīng)的反算結(jié)果。計算模型高斯投影正算公式高斯投影反算公式程序框圖開始開始輸入B,L求定帶號N,中央緯度L0,緯度差l按照實用公式計算x,y換算為國家統(tǒng)一坐標X,Y輸出X,Y輸入國家統(tǒng)一坐標X,Y由Y取定帶號N,并換算出x,y求出中央經(jīng)線L0按照實用公式計算B,lL=L0+l求出大地經(jīng)度L輸出B,L結(jié)束正算反算計算結(jié)果附錄:程序代碼/////主函數(shù)入口GeodesyHomework.cpp#include"MyFunction.h"#include"Zhengsuan.h"#include"Fansuan.h"#include<iostream>usingnamespacestd;voidfansuan();voidzhengsuan();voidmain(){ zhengsuan(); fansuan(); printf("/nover!");}voidzhengsuan(){ doublemyB,myL; cout<<"【正算】"<<endl; cout<<"請輸入大地緯度B"<<endl; myB=angleToDegree(); cout<<"請輸入大地經(jīng)度L"<<endl; myL=angleToDegree(); ZhengsuanmyZhengsuan1(myB,myL); printf("RadianB=%fL=%f\n",myZhengsuan1.getrB(),myZhengsuan1.getrL()); myZhengsuan1.printLocation();}voidfansuan(){ doublemyX,myY; cout<<"【反算】"<<endl; cout<<"請輸入國家統(tǒng)一坐標XY。例如3378627.181920243953.4517"<<endl; cin>>myX>>myY; FansuanmyFansuan1(myX,myY); myFansuan1.printLocation();}///自定功能函數(shù)庫MyFunction.h#definePI3.1415926#include<iostream>usingnamespacestd;doubleangleToDegree(intdu,intfen,floatmiao);doubleangleToDegree();//將度分秒換算為度doubledegreeToRadian(doubledegree);doubledegreeToRadian();//將角度換算為弧度MyFunction.cpp#include"MyFunction.h"doubleangleToDegree(intdu,intfen,floatmiao){ doubleresult=0; result=miao/3600.0+fen/60.0+du; returnresult;}doubleangleToDegree(){ intdu,fen; floatmiao; doubleresult; cout<<"請輸入度分秒。例如:302000"<<endl; 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<iostream>#include<math.h>usingnamespacestd;classZhengsuan{public: Zhengsuan(); Zhengsuan(doublefB,doublefL); doublegetX(); doublegetY(); doublegetrB(); doublegetrL(); voidprintLocation(); virtual~Zhengsuan();private: doublex; doubley;//大地坐標 doubleX; doubleY;//國家統(tǒng)一坐標 doubleB; doublerB; intBsecond; doubleL; doublerL; //輸入的大地緯度B,大地經(jīng)度L,rB,rL為對應(yīng)弧度表示值,Bsecond為換算成秒數(shù)值 intn;//帶號n doubleL0;//中央經(jīng)線緯度L0 doubleLDot;//緯度差L-L0 intLDotSecond;//換算成秒的緯度差 doublel; doubleN; doublea0; doublea3; doublea4; doublea5; doublea6;//七個計算參數(shù)};#endif//!defined(AFX_ZHENGSUAN_H__2655EA28_E810_44A3_8F14_56421A7B4466__INCLUDED_)Zhengsuan.cpp//Zhengsuan.cpp:implementationoftheZhengsuanclass.////////////////////////////////////////////////////////////////////////#include"Zhengsuan.h"http:////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////Zhengsuan::Zhengsuan(){}Zhengsuan::Zhengsuan(doublefB,doublefL){ B=fB; rB=degreeToRadian(fB); L=fL; rL=degreeToRadian(fL); Bsecond=B*3600;//初始化大地經(jīng)度L,大地緯度B,Bsecond,按弧度的大地緯度rB n=(int)(L/6+1);//初始化帶號n L0=6*n-3;//中央經(jīng)線經(jīng)度,角度單位 LDot=L-L0;//經(jīng)度差 LDotSecond=LDot*3600; l=(LDot)*3600/rouSecond;//計算參數(shù)l N=6399698.902-(21562.267-(108.973-0.612*cos(rB)*cos(rB))*cos(rB)*cos(rB))*cos(rB)*cos(rB);//計算參數(shù)N a0=32140.404-(135.3302-(0.7092-0.004*cos(rB)*cos(rB))*cos(rB)*cos(rB))*cos(rB)*cos(rB);//計算參數(shù)a0 a4=(0.25+0.00252*cos(rB)*cos(rB))*cos(rB)*cos(rB)-0.04166;//計算參數(shù)a4 a6=(0.166*cos(rB)*cos(rB)-0.084)*cos(rB)*cos(rB);//計算參數(shù)a6 a3=(0.3333333+0.001123*cos(rB)*cos(rB))*cos(rB)*cos(rB)-0.1666667;//計算參數(shù)a3 a5=0.0083-(0.1667-(0.1968+0.004*cos(rB)*cos(rB))*cos(rB)*cos(rB))*cos(rB)*cos(rB);//計算參數(shù)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;//國家統(tǒng)一坐標}Zhengsuan::~Zhengsuan(){}doubleZhengsuan::getX(){ returnX;}doubleZhengsuan::getY(){ returnY;}voidZhengsuan::printLocation(){ printf("正算得國家統(tǒng)一坐標為:X=%8.8fY=%8.8f\n",X,Y);}doubleZhengsuan::getrB(){ returnrB;}doubleZhengsuan::getrL(){ returnrL;}///反算類Fansuan.h//Fansuan.h:interfacefortheFansuanclass.////////////////////////////////////////////////////////////////////////#if!defined(AFX_FANSUAN_H__5B5E4668_EE81_463F_8D65_FFE2AEACE745__INCLUDED_)#defineAFX_FANSUAN_H__5B5E4668_EE81_463F_8D65_FFE2AEACE745__INCLUDED_#if_MSC_VER>1000#pragmaonce#endif//_MSC_VER>1000#definerouSecond206264.806247096355#include<math.h>#include"MyFunction.h"#include<iostream>usingnamespacestd;classFansuan{public: Fansuan(); Fansuan(doubleX,doubleY); doublegetB(); doublegetL(); voidprintLocation(); virtual~Fansuan();private: doublex; doubley;//高斯投影坐標 doubleX; doubleY; intN;//國家統(tǒng)一坐標,N為帶號 doubleB,Bsecond; doubleL;//最后反算得到B、L doubleL0;//中央經(jīng)線經(jīng)度 doublel,lsecond;//L=L0+l,L0=6*N-3 doubleBf,BfSecond,BfDegree; doublebeta,betaSecond,betaDegree; doubleZ; doubleNf; doubleb2; doubleb3; doubleb4; doubleb5;//計算的8個參數(shù)};#endif//!defined(AFX_FANSUAN_H__5B5E4668_EE81_463F_8D65_FFE2AEACE745__INCLUDED_)Fansuan.cpp//Fansuan.cpp:implementationoftheFansuanclass.////////////////////////////////////////////////////////////////////////#include"Fansuan.h"http:////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////Fansuan::Fansuan(){}Fansuan::Fansuan(doubleX,doubleY){ this->X=X; this->Y=Y;//初始化x,y N=(int)(Y/1000000);//取出帶號 L0=6*N-3;//初始化該帶號的中央經(jīng)線經(jīng)度 x=X; y=Y-1000000*N-500000; beta=x/6367558.4969;//初始化beta,弧度單位 betaSecond=beta*rouSecond;//初始化beta,秒單位 betaDegree=betaSecond/3600;//初始化beta,整度數(shù)單位 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;//初

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論