史上最全的高斯投影源代码集合精心收集9种Word文档下载推荐.docx
- 文档编号:6528753
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:43
- 大小:26.71KB
史上最全的高斯投影源代码集合精心收集9种Word文档下载推荐.docx
《史上最全的高斯投影源代码集合精心收集9种Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《史上最全的高斯投影源代码集合精心收集9种Word文档下载推荐.docx(43页珍藏版)》请在冰点文库上搜索。
CEarthCEarthPlaneDialog:
PlaneToEarth(constCCoordinate&
coor,UINTSign)
doublex=coor.m_dX;
doubley=coor.m_dY;
doubleL0=(6.0*Sign-3.0)/180*PI;
doublesinB,cosB,t,t2,N,ng2,V,yN;
doublepreB0,B0;
doubleeta;
y-=500000;
B0=x/A1;
do
{
preB0=B0;
B0=B0*PI/180.0;
B0=(x-(A2*sin(2*B0)+A3*sin(4*B0)+A4*sin(6*B0)))/A1;
eta=fabs(B0-preB0);
}while(eta>
0.0000000000000001);
sinB=sin(B0);
cosB=cos(B0);
t=tan(B0);
V=sqrt(1+ng2);
yN=y/N;
doubleB=B0-(yN*yN-(5+3*t2+ng2-9*ng2*t2)*yN*yN*yN*yN/12.0+(61+90*t2+45*t2*t2)*yN*yN*yN*yN*yN*yN/360.0)*V*V*t/2;
doubleL=L0+(yN-(1+2*t2+ng2)*yN*yN*yN/6.0+(5+28*t2+24*t2*t2+6*ng2+8*ng2*t2)*yN*yN*yN*yN*yN/120.0)/cosB;
CEarthearth(B,L,0,'
r'
);
returnearth;
//将平面直角坐标系转换为大地坐标系
voidCEarthPlaneDialog:
OnRADIOPlane1954()
//TODO:
Addyourcontrolnotificationhandlercodehere
a=6378245;
f=298.3;
e2=1-((f-1)/f)*((f-1)/f);
e12=(f/(f-1))*(f/(f-1))-1;
A1=111134.8611;
A2=-16036.4803;
A3=16.8281;
A4=-0.0220;
m_iReferenceFrame=0;
OnRADIOPlane1980()
a=6378140;
f=298.257;
A1=111133.0047;
A2=-16038.5282;
A3=16.8326;
m_iReferenceFrame=1;
OnRADIOPlaneWGS84()
a=6378137;
f=298.257223563;
m_iReferenceFrame=2;
doubleCEarthPlaneDialog:
SetL0(doubleL)
L=L/PI*180;
if(L>
0)
for(m_iCincture=1;
!
((L>
=(6*m_iCincture-6))&
(L<
(6*m_iCincture)));
m_iCincture++)
{}
L0=6*m_iCincture-3;
}
elseif(L<
L=-L;
(6*m_iCincture-6))&
=(6*m_iCincture)));
m_iCincture=61-m_iCincture;
L0=m_iCincture*6-363;
else
L0=3;
m_iCincture=1;
doubletemp=((double)L0)/180*PI;
returntemp;
SetRad_PIPI(doubleRad)
if(Rad>
0)
doublei=floor(Rad/PI/2);
Rad-=2*PI*i;
if(Rad<
Rad=-Rad;
Rad=-Rad+PI*2;
PI)
Rad-=2*PI;
returnRad;
高斯投影C++源码2
//GaussBL2xy.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include"
stdafx.h"
math.h"
CoorTrans.h"
#include<
iostream>
usingnamespacestd;
voidmain(intargc,char*argv[])
{
doubleMyL0=108;
//中央子午线
doubleMyB=33.44556666;
//33du44fen55.6666miao
doubleMyL=109.22334444;
//3度带,109d22m33.4444s
PrjPoint_KrasovskyMyPrj;
MyPrj.SetL0(MyL0);
MyPrj.SetBL(MyB,MyL);
doubleOutMyX;
//结果应该大致是:
3736714.783,627497.303
doubleOutMyY;
OutMyX=MyPrj.x;
//正算结果:
北坐标x
OutMyY=MyPrj.y;
//结果:
东坐标y
//////////////////反算////////////////////////////////////////
doubleInputMyX=3736714.783;
//如果是独立计算,应该给出中央子午线L0
doubleInputMyY=627497.303;
MyPrj.Setxy(InputMyX,InputMyY);
MyPrj.GetBL(&
MyPrj.B,&
MyPrj.L);
//把计算出的BL的弧度值换算为dms形式
doubleOutputMyB;
doubleOutputMyL;
OutputMyB=MyPrj.B;
//反算结果:
B
OutputMyL=MyPrj.L;
L
//分析表明,此程序的结果和Coord4.2的转换结果是一样的,只差到毫米级
//原程序有几个问题,1.Pi的值不对。
2.SetBL中多了两行错误代码
}
doubleDms2Rad(doubleDms)
doubleDegree,Miniute;
doubleSecond;
intSign;
doubleRad;
if(Dms>
=0)
Sign=1;
else
Sign=-1;
Dms=fabs(Dms);
Degree=floor(Dms);
Miniute=floor(fmod(Dms*100.0,100.0));
Second=fmod(Dms*10000.0,100.0);
Rad=Sign*(Degree+Miniute/60.0+Second/3600.0)*PI/180.0;
doubleRad2Dms(doubleRad)
doubleDms;
Rad=fabs(Rad*180.0/PI);
Degree=floor(Rad);
Miniute=floor(fmod(Rad*60.0,60.0));
Second=fmod(Rad*3600.0,60.0);
Dms=Sign*(Degree+Miniute/100.0+Second/10000.0);
returnDms;
///////////////////////////////////////////////////
//DefinitionofPrjPoint
boolPrjPoint:
BL2xy()
//x,y的计算公式见孔祥元等主编武汉大学出版社2002年出版的《控制测量学》的第72页
//书的的括号有问题,(和[应该交换
x=X+N*t*((0.5+((5-t2+9*ng2+4*ng2*ng2)/24.0+(61-
58*t2+t2*t2)*m2/720.0)*m2)*m2);
y=N*m*(1+m2*((1-t2+ng2)/6.0+m2*(5-18*t2+t2*t2
+14*ng2-58*ng2*t2)/120.0));
returntrue;
xy2BL()
do
{
0.000000001);
B=Rad2Dms(B0);
B=B0-(yN*yN-(5+3*t2+ng2-9*ng2*t2)*yN*yN*yN*yN/
12.0+(61+90*t2+45*t2*t2)*yN*yN*yN*yN*yN*yN/360.0)
*V*V*t/2;
L=L0+(yN-(1+2*t2+ng2)*yN*yN*yN/6.0+(5+28*t2+24
*t2*t2+6*ng2+8*ng2*t2)*yN*yN*yN*yN*yN/120.0)/cosB;
SetL0(doubledL0)
L0=Dms2Rad(dL0);
SetBL(doubledB,doubledL)
B=Dms2Rad(dB);
L=Dms2Rad(dL);
//B=dB;
//我靠,Iwanasayfuck
//L=dL;
//delit!
BL2xy();
GetBL(double*dB,double*dL)
*dB=Rad2Dms(B);
*dL=Rad2Dms(L);
Setxy(doubledx,doubledy)
x=dx;
y=dy;
xy2BL();
高斯投影VB源码1
坐标转换代码
doublea,f,e2,e12;
//基本椭球参数
doubleA1,A2,A3,A4;
//用于计算X的椭球参数
ConstPI=3.14159265358979
ConstY0=500000#
DimA1#,A2#,A3#,A4#,a#,f#
'
高斯正算求X
PublicFunctionX(B#,L#,L0#,zbx%)AsDouble//B纬度L经度L0中央子午线
zbcszbx
e2#=1-((f-1)/f)*((f-1)/f)
e12#=(f/(f-1))*(f/(f-1))-1
B=D_R(B):
L=D_R(L):
L0=D_R(L0)
Dimn,t,t2,m,m2,ng2
DimsinB,cosB
X=A1*B*180#/PI+A2*Sin(2*B)+A3*Sin(4*B)+A4*Sin(6*B)
sinB=Sin(B)
cosB=Cos(B)
t=Tan(B)
t2=t*t
n=a/Sqr(1-e2*sinB*sinB)
m=cosB*(L-L0)
m2=m*m
ng2=cosB*cosB*e2/(1-e2)
X=X+n*t*((0.5+((5-t2+9*ng2+4*ng2*ng2)/24#+(61-58*t2+t2*t2)*m2/720#)*m2)*m2)
EndFunction
高斯正算求Y
PublicFunctionY(B#,L#,L0#,zbx%)AsDouble
Y=n*m*(1+m2*((1-t2+ng2)/6#+m2*(5-18*t2+t2*t2+14*ng2-58*ng2*t2)/120#))
Y=Y+Y0
高斯反算求B(纬度)
PublicFunctionB(X#,Y#,L0#,zbx%)AsDouble
L0=D_R(L0)
DimsinB,cosB,t,t2,n,ng2,V,yN
DimpreB0,B0
Dimeta
Y=Y-Y0
B0=X/A1
DoWhileTrue
preB0=B0
B0=B0*PI/180#
B0=(X-(A2*Sin(2*B0)+A3*Sin(4*B0)+A4*Sin(6*B0)))/A1
eta=Abs(B0-preB0)
Ifeta<
0.0000001ThenExitDo
Loop
B0=B0*PI/180#
sinB=Sin(B0)
cosB=Cos(B0)
t=Tan(B0)
V=Sqr(1+ng2)
yN=Y/n
B=B0-(yN*yN-(5+3*t2+ng2-9*ng2*t2)*yN*yN*yN*yN/12#+(61+90*t2+45*t2*t2)*yN*yN*yN*yN*yN*yN/360#)*V*V*t/2
B=R_D(B)
高斯反算求L(经度)
PublicFunctionL(X#,Y#,L0#,zbx%)AsDouble
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 史上最全 投影 源代码 集合 精心 收集