高斯投影坐标正反算编程报告(可编辑修改word版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
N N f f f 3 5 高斯投影坐标正反算编程报告
10021 班 张鑫 学号:2010302590040
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. 计算模型
高斯投影正算公式
x = X + N 2''2 sin B c os B ⋅ l ' 2 + N 24''4 simB cos 3 B (5 - t 2 + 92 + 44 )l ''4 + N 720''6 sin B cos 5 B (61 - 58t 2 + t 4 )l ' 6
y = N '' cos B ⋅ l ' + N 6''3
cos 3 B (1 - t 2 +2 )l ''3 + N 120''5 cos 5 B (5 - 18t 2 + t 4 + 142 - 582t 2 )l ''5
高斯投影反算公式
B = B - t f y 2 + t f (5 + 3t 2 +2 - 92 t 2 )y 4 f 2M N 24M f f f f f f - t f y (61 + 90t 2 + 45t 4 )y 6 720M f f = y - f f y 3 ( + 2 +2 ) l N f cos B f 1 6N 3 cos B 2t f f + y 5
( + 2 + 4 + 2 + 2 2 )
5 120N 5 cos B 28t f 24t f
6 f 8 f t f f f
f
3.程序框图
正算
4.计算结果
5.附录:程序代码
/////主函数入口
GeodesyHomework.cpp
#include "MyFunction.h"
#include "Zhengsuan.h"
#include "Fansuan.h"
#include
using namespace std;
void fansuan();
void zhengsuan();
void
main(){ zhengsua
n(); fansuan();
printf("/n over!");
}
void
zhengsuan(){ dou
ble 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(){ doubl e 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; }