高斯投影坐标正反算编程报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高斯投影坐标正反算编程报告
1. 编程思想
进行高斯投影坐标正反算的编程需要牵涉到大量的公式,为了使程序条理更清楚,各块的数据复用性更强,这里采取了结构化的编程思想。
程序由四大块组成。
GeodesyHomework.cpp 文件用于存放main()函数,是整个程序的入口。通过结构化的编程尽力使main()函数变得简单。
MyFunction.h 和MyFunction.cpp 用于存放计算过程中进行角度弧度换算时所要用到的一些自定的转换函数。
Zhengsuan.h 和Zhengsuan.cpp 用于存放Zhengsuan 类,在Zhengsuan 类中声明了高斯投影坐标正算所要用到的所有变量,在类的构造函数中进行成员变量的初始化及正算计算。通过get 函数获得相应的正算结果。
Fansuan.h 和Fansuan.cpp 用于存放Fansuan 类,类似于Zhengsuan 类,Fansuan 类中声明了高斯投影坐标反算所要用到的所有变量,在类的构造函数中进行成员变量的初始化及反算计算。通过get 函数获得相应的反算结果。
2. 计算模型
高斯投影正算公式
6
4256
4
42234
22)5861(cos sin 720)495(cos 24cos sin 2l
t t B B N l
t B simB N l B B N X x ''+-''+
''++-''+''⋅''+=ρηηρρ
5
2224255
3
2233
)5814185(cos 120)1(cos 6cos l
t t t B N l
t B N l B N y ''-++-''+
''+-''+''⋅''=ηηρηρρ
高斯投影反算公式
()
()
()(
)
2
22425
52
23
36
4254
222232
8624285cos 12021cos 6cos 459061720935242f f f f f f
f f f f
f f f f
f f
f f
f f f f f
f f f
f f f t t t B N y t B N y B N y l y t t y N
M t y
t t
N
M t y N M t B B ηηηηη+++++++-=++-
-+++
-=
3. 程序框图
4. 计算结果
开始
输入B ,L
求定带号N ,中央纬度L 0,纬度差l
按照实用公式计算x,y
换算为国家统一坐标X ,Y
输出X,Y
输入国家统一坐标X,Y
由Y 取定带号N ,并换算出x ,y
求出中央经线L 0
按照实用公式计算B ,l
L=L0+l 求出大地经度L
输出B ,L
结束
正算
反算
5.附录:程序代码
/////主函数入口
GeodesyHomework.cpp
#include "MyFunction.h"
#include "Zhengsuan.h"
#include "Fansuan.h"
#include
using namespace std;
void fansuan();
void zhengsuan();
void main(){
zhengsuan();
fansuan();
printf("/n over!");
}
void zhengsuan(){
double myB,myL;
cout<<"【正算】"< cout<<"请输入大地纬度B"< myB=angleToDegree(); cout<<"请输入大地经度L"< myL=angleToDegree(); Zhengsuan myZhengsuan1(myB,myL); printf("Radian B=%f L=%f \n",myZhengsuan1.getrB(),myZhengsuan1.getrL()); myZhengsuan1.printLocation(); } void fansuan(){ double myX,myY; cout<<"【反算】"< cout<<"请输入国家统一坐标X Y。例如3378627.1819 20243953.4517"< Fansuan myFansuan1(myX,myY); myFansuan1.printLocation(); } ///自定功能函数库 MyFunction.h #define PI 3.1415926 #include using namespace std; double angleToDegree(int du,int fen,float miao); double angleToDegree();//将度分秒换算为度 double degreeToRadian(double degree); double degreeToRadian();//将角度换算为弧度 MyFunction.cpp #include "MyFunction.h" double angleToDegree(int du,int fen,float miao){ double result=0; result=miao/3600.0+fen/60.0+du; return result; } double angleToDegree(){ int du,fen; float miao; double result; cout<<"请输入度分秒。例如:30 20 00"< cin>>du>>fen>>miao; result=angleToDegree(du,fen,miao); return result; } double degreeToRadian(double degree){ double result=0; result=degree/57.295779513082321;