高斯投影坐标正反算编程报告

更新时间:2023-09-10 11:04:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

高斯投影坐标正反算编程报告

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??NN232244????sinBcosB?l?simBcosB(5?t?9??4?)l2???224???4N5246??sinBcosB(61?58t?t)l720???6y??NN3223??cosB?l???cosB(1?t??)l???6???3N5242225??cosB(5?18t?t?14??58?t)l120???5

tf2MfNf5f高斯投影反算公式

B?Bf??tfy?2tf24MfN3f?5?3t2f224??2f?9?ftfy?720MfN46y61?90t2?45tyff??yy32l??1?2t2f??f3NfcosBf6NfcosBf???

y524222?5?28t?24t?6??8?fffftf5120NfcosBf?3. 程序框图

1

开始 输入B,L 求定带号N,中央纬度L0,纬度差l 正算 按照实用公式计算x,y 换算为国家统一坐标X,Y 输出X,Y 输入国家统一坐标X,Y 由Y取定带号N,并换算出x,y 求出中央经线L0 反算 按照实用公式计算B,l L=L0+l求出大地经度L 输出B,L 结束

4. 计算结果

2

5. 附录:程序代码

/////主函数入口

GeodesyHomework.cpp

#include \#include \#include \#include using namespace std; voidfansuan(); voidzhengsuan();

void main(){ zhengsuan(); fansuan();

printf(\ }

voidzhengsuan(){ doublemyB,myL;

cout<<\【正算】\

cout<<\请输入大地纬度B\ myB=angleToDegree();

cout<<\请输入大地经度L\ myL=angleToDegree();

ZhengsuanmyZhengsuan1(myB,myL);

printf(\ myZhengsuan1.printLocation();

3

}

voidfansuan(){ doublemyX,myY;

cout<<\【反算】\

cout<<\请输入国家统一坐标 X Y。例如 3378627.1819 20243953.4517\ cin>>myX>>myY;

FansuanmyFansuan1(myX,myY); myFansuan1.printLocation(); }

///自定功能函数库 MyFunction.h

#define PI 3.1415926 #include using namespace std;

doubleangleToDegree(intdu,intfen,floatmiao); double angleToDegree();//将度分秒换算为度 doubledegreeToRadian(double degree); double degreeToRadian();//将角度换算为弧度

MyFunction.cpp

#include \

doubleangleToDegree(intdu,intfen,floatmiao){ double result=0;

result=miao/3600.0+fen/60.0+du; return result; }

doubleangleToDegree(){ intdu,fen; floatmiao; double result;

cout<<\请输入度分秒。例如:30 20 00\ cin>>du>>fen>>miao;

result=angleToDegree(du,fen,miao); return result; }

doubledegreeToRadian(double degree){ double result=0;

result=degree/57.295779513082321;

4

return result; }

doubledegreeToRadian(){ doubleresult,degree; degree=angleToDegree();

result=degreeToRadian(degree); return result; }

///正算类 Zhengsuan.h

// Zhengsuan.h: interface for the Zhengsuan class. //

//////////////////////////////////////////////////////////////////////

#if !defined(AFX_ZHENGSUAN_H__2655EA28_E810_44A3_8F14_56421A7B4466__INCLUDED_)

#define

AFX_ZHENGSUAN_H__2655EA28_E810_44A3_8F14_56421A7B4466__INCLUDED_

#if _MSC_VER > 1000 #pragma once

#endif // _MSC_VER > 1000

#define rouSecond 206264.806247096355 #include \#include #include using namespace std;

classZhengsuan {

public:

Zhengsuan();

Zhengsuan(double fB,doublefL); doublegetX(); doublegetY(); doublegetrB(); doublegetrL();

voidprintLocation(); virtual ~Zhengsuan();

private:

5

本文来源:https://www.bwwdw.com/article/mhqh.html

Top