
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.计算模型
高斯投影正算公式
高斯投影反算公式
3.程序框图
4.计算结果
5.附录:程序代码
/////主函数入口
GeodesyHomework.cpp
#include "MyFunction.h"
#include "Zhengsuan.h"
#include "Fansuan.h"
#include using namespace std; void fansuan(); void zhengsuan(); void main(){ } void zhengsuan(){ 【正算】"< void fansuan(){ 【反算】"< ///自定功能函数库 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 angleToDegree(){ 请输入度 分 秒。例如:30 20 00"< double degreeToRadian(double degree){ } double degreeToRadian(){ } ///正算类 Zhengsuan.h // Zhengsuan.h: interface for the Zhengsuan class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_ZHENGSUAN_H__2655EA28_E810_44A3_8F14_521A7B4466__INCLUDED_) #define AFX_ZHENGSUAN_H__2655EA28_E810_44A3_8F14_521A7B4466__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #define rouSecond 2062.806247096355 #include "MyFunction.h" #include #include using namespace std; class Zhengsuan { public: private: 大地坐标 国家统一坐标 输入的大地纬度B,大地经度L,rB,rL为对应弧度表示值,Bsecond为换算成秒数值 带号n 经线纬度L0 纬度差L-L0 换算成秒的纬度差 七个计算参数 }; #endif // !defined(AFX_ZHENGSUAN_H__2655EA28_E810_44A3_8F14_521A7B4466__INCLUDED_) Zhengsuan.cpp // Zhengsuan.cpp: implementation of the Zhengsuan class. // ////////////////////////////////////////////////////////////////////// #include "Zhengsuan.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// Zhengsuan::Zhengsuan() { } Zhengsuan::Zhengsuan(double fB,double fL){ 初始化大地经度L,大地纬度B,Bsecond,按弧度的大地纬度rB 初始化带号n 经线经度,角度单位 经度差 计算参数l 计算参数N 计算参数a0 计算参数a4 计算参数a6 计算参数a3 计算参数a5 正算x 正算y 国家统一坐标 } Zhengsuan::~Zhengsuan() { } double Zhengsuan::getX(){ } double Zhengsuan::getY(){ } void Zhengsuan::printLocation(){ 正算得国家统一坐标为: } double Zhengsuan::getrB(){ } double Zhengsuan::getrL(){ } ///反算类 Fansuan.h // Fansuan.h: interface for the Fansuan class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_FANSUAN_H__5B5E4668_EE81_463F_8D65_FFE2AEACE745__INCLUDED_) #define AFX_FANSUAN_H__5B5E4668_EE81_463F_8D65_FFE2AEACE745__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #define rouSecond 2062.806247096355 #include #include "MyFunction.h" #include using namespace std; class Fansuan { public: private: 高斯投影坐标 国家统一坐标,N为带号 最后反算得到B、L 经线经度 ,L0=6*N-3 计算的8个参数 }; #endif // !defined(AFX_FANSUAN_H__5B5E4668_EE81_463F_8D65_FFE2AEACE745__INCLUDED_) Fansuan.cpp // Fansuan.cpp: implementation of the Fansuan class. // ////////////////////////////////////////////////////////////////////// #include "Fansuan.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// Fansuan::Fansuan() { } Fansuan::Fansuan(double X,double Y){ 初始化x,y 取出带号 初始化该带号的经线经度 初始化beta,弧度单位 初始化beta,秒单位 初始化beta,整度数单位 初始化Bf,弧度单位 初始化Bf,秒单位 初始化Bf,整度数单位 计算大地经度B,单位为秒 用整度数表示B 计算经度差l,单位为秒 用整度数表示l 计算大地经度L } double Fansuan::getB(){ } double Fansuan::getL(){ } void Fansuan::printLocation(){ 反算得大地坐标为:大地纬度B= %f° 大地经度L=%f°\\n",B,L); } Fansuan::~Fansuan() { }
