大地测量程序设计.docx
《大地测量程序设计.docx》由会员分享,可在线阅读,更多相关《大地测量程序设计.docx(23页珍藏版)》请在冰点文库上搜索。
![大地测量程序设计.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/20bbb284-6253-4c46-91f4-5e3f2d96f98b/20bbb284-6253-4c46-91f4-5e3f2d96f98b1.gif)
大地测量程序设计
八程序设计
1已知某椭球体的长轴a=6378140.0m,扁率:
1
298.257
求给定大地维度处的子午
线曲率半径。
【提示:
M
a(1-e2)
W=,1-e2sin2B
22
e2=2二-二2】
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1{
classApplication
{
staticvoidMain(string[]args)
{
doublea=6378140.0;
doublea=1.0/298.257;
Console.Write("请输入大地维度B=");
doubleB=DEG(double.Parse(Console.ReadLine()));
doubleee=2*a-a*a;
doubleW=Math.Sqrt(1-ee*Math.Sin(B)*Math.Sin(B));
doubleM=a*(1-ee)/W/W/W;
Console.WriteLine("子午线曲率半径={0}",M);
}
//将ddd.mmss转为弧度
staticpublicdoubleDEG(doubleang)
{
intfuhao=(int)(ang/Math.Abs(ang));
ang=Math.Abs(ang);
intd=(int)ang;
intm=((int)(ang*100))-d*100;
doubles=ang*10000-m*100-d*10000;
return((d+m/60.0+s/3600.0)*fuhao)/180.0*Math.PI;
}
298.257,求给定大地维度处的卯酉
2已知某椭球体的长轴a=6378140.0m,扁率:
线曲率半径。
叽N嗚Wj—Se—
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1{
classApplication
{
staticvoidMain(string[]args)
{
doublea=6378140.0;
doublea=1.0/298.257;
Console.Write("请输入大地维度B=");
doubleB=DEG(double.Parse(Console.ReadLine()));
doubleee=2*a-a*a;
doubleW=Math.Sqrt(1-ee*Math.Sin(B)*Math.Sin(B));
doubleN=a/W;
Console.WriteLine("卯酉线曲率半径={0}",N);
}
//将ddd.mmss转为弧度
staticpublicdoubleDEG(doubleang)
{
intfuhao=(int)(ang/Math.Abs(ang));
ang=Math.Abs(ang);
intd=(int)ang;
intm=((int)(ang*100))-d*100;
doubles=ang*10000-m*100-d*10000;
return((d+m/60.0+s/3600.0)*fuhao)/180.0*Math.PI;
}
}
}
曲率半径。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplicationl{
classApplication
{
staticvoidMain(string[]args)
{
doublea=6378140.0;
doublea=1.0/298.257;
Console.Write("请输入大地维度B=");
doubleB=DEG(double.Parse(Console.ReadLine()));
doubleee=2*a-a*a;
doubleW=Math.Sqrt(1-ee*Math.Sin(B)*Math.Sin(B));
doubleN=a/W;
doubleM=a*(1-ee)/W/W/W;
doubleR=Math.Sqrt(N*M);
Console.WriteLine("平均曲率半径={0}",R);
}
//将ddd.mmss转为弧度
staticpublicdoubleDEG(doubleang)
{
intfuhao=(int)(ang/Math.Abs(ang));
ang=Math.Abs(ang);
intd=(int)ang;
intm=((int)(ang*100))-d*100;
doubles=ang*10000-m*100-d*10000;
return((d+m/60.0+s/3600.0)*fuhao)/180.0*Math.PI;
}
}
}
圈曲率半径。
【提示:
acosB
r
丁1-e2sin2B
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplicationl{
classApplication
staticvoid
Main(string[]args)
double
a=6378140.0;
double
a=1.0/298.257;
Console
.Write("请输入大地维度B=");
double
B=DEG(double.Parse(Console.ReadLine()));
double
ee=2*a-a*a;
double
Console
r=a*Math.Cos(B)/Math.Sqrt(1-ee*.WriteLine("平行圈曲率半径={0}",r);
Math.Sin(B)*Math.Sin(B));
//
将ddd.mmss转为弧度
staticpublicdoubleDEG(doubleang)
intfuhao=(int)(ang/Math.Abs(ang));
ang=Math.Abs(ang);
intd=(int)ang;
intm=((int)(ang*100))-d*100;
doubles=ang*10000-m*100-d*10000;
Math.PI;
return((d+m/60.0+s/3600.0)*fuhao)/180.0*
m),请根据空间点在A空间直
X,厶Y,迄,3个旋转参数;x,丫,;z,一个尺度变化参数
角坐标系中的坐标求该空间点在B空间直角坐标系中的坐标。
[提示:
XB1
Yb
(1+m)R0Ya
cosYco$7
立B」
cossizn
R)=
-cosysinz
-si
coscczs
sinx
AY。
Na」工Z°」
sXn;$in;qos;xsin;zsin;xco$
SXns$in名zsin名xsi氓cosJcO$
ccxscy)s
Sizn
cos
sin
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespace坐标转换
{
classProgram
{
staticvoidMain(string[]args)
{
Console.Write("请输入转换参数ex(格式为:
ddd.mmss)=");
doublee=坐标转换.DEG(double.Parse(Console.ReadLine()));
Console.Write("请输入转换参数ey(格式为:
ddd.mmss)=");
doubleey=坐标转换.DEG(double.Parse(Console.ReadLine()));
Console.Write("请输入转换参数ez(格式为:
ddd.mmss)=");
doubleez=坐标转换.DEG(double.Parse(Console.ReadLine()));
Console.Write("请输入转换参数AX0=");
doubleAX0=double.Parse(Console.ReadLine());
Console.Write("请输入转换参数AY0=");
doubleAY0=double.Parse(Console.ReadLine());
Console.Write("请输入转换参数AZ0=");
doubleAZO=double.Parse(Console.ReadLine());
Console.Write("请输入转换参数m=");
doublem=double.Parse(Console.ReadLine());
坐标转换.设置参数(ex,ey,ez,AXO,AYO,AZO,m);
do
{
Console.Write("请输入XA[直接回车结束输入]=");
stringstr=Console.ReadLine();
if(str=="")break;
doubleXA=double.Parse(str);
Console.Write("请输入YA=");
doubleYA=double.Parse(Console.ReadLine());
Console.Write("请输入ZA=");
doubleZA=double.Parse(Console.ReadLine());
doubleXB,YB,ZB;
坐标转换•转换(XA,YA,ZA,outXB,outYB,outZB);
Console.WriteLine("该点在B坐标系中的坐标为({0},{1},{2})",XB,YB,ZB);}while(true);
}
}
class坐标转换
{
static
public
double
“x;
static
public
double
“y;
static
public
double
“z;
static
public
double
AX0;
static
public
double
AY0;
static
public
double
AZ0;
static
public
double
m;
//将ddd.mmss转为弧度
staticpublicdoubleDEG(doubleang)
{
intfuhao=(int)(ang/Math.Abs(ang));
ang=Math.Abs(ang);
intd=(int)ang;
intm=((int)(ang*100))-d*100;
doubles=ang*10000-m*100-d*10000;
return((d+m/60.0+s/3600.0)*fuhao)/180.0*Math.PI;
}
//设置7参数
staticpublicvoid设置参数(double“‘double^doubleez,doubleAXO,double△
Y0,doubleAZO,doublem)
{
坐标转换.“x=“x;
坐标转换.“y=“y;
坐标转换.“z=“z;
坐标转换.AX0=AX0;
坐标转换.AY0=AY0;
坐标转换.AZ0=AZ0;
坐标转换.m=m;
}
//7参数转换
staticpublicvoid转换(doubleX1,doubleY1,doubleZ1,outdoubleX2,outdoubleY2,outdoubleZ2)
{
doubleR11=Math.Cos(“y)*Math.Cos(“z);
doubleR12=Math.Cos(“x)*Math.Sin(“z)+Math.Sin(“x)*Math.Sin(“y)*Math.Cos(“
z);
doubleR13=Math.Sin(“x)*Math.Sin(“z)-Math.Cos(“x)*Math.Sin(“y)*Math.Cos(“z);
doubleR21=-Math.Cos(“y)*Math.Sin(“z);
doubleR22=Math.Cos(“x)*Math.Cos(“z)-Math.Sin(“x)*Math.Sin(“y)*Math.Sin(“z);
doubleR23=Math.Sin(“x)*Math.Cos(“z)+Math.Cos(“x)*Math.Sin(“y)*Math.Sin(“
z);
doubleR31=Math.Sin(ey);
doubleR32=-Math.Sin(e)*Math.Cos(e);
doubleR33=Math.Cos(e)*Math.Cos(e);
X2=(1+m)*(R11*X1+R12*Y1+R13*Z1)+AX0;
Y2=(1+m)*(R21*X1+R22*Y1+R23*Z1)+AY0;
Z2=(1+m)*(R31*X1+R32*Y1+R33*Z1)+AZO;
}
}
}
L,H),求该点在空间直角坐标系中的坐标。
[提示:
X(NH)cosBcosL
Y=(N+H)cosBsinL
2
ZJN(1—e)+H]sinB
]
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespace坐标转换
{
classProgram
{
staticvoidMain(string[]args)
{
do
{
Console.Write(”请输入大地维度B[直接回车结束输入](格式为:
ddd.mmss)=");
stringstr=Console.ReadLine();
if(str=="")break;
doubleB=坐标转换.DEG(double.Parse(str));
Console.Write("请输入大地经度L(格式为:
ddd.mmss)=");
doubleL=坐标转换.DEG(double.Parse(Console.ReadLine()));
Console.Write("请输入大地高H=");
doubleH=double.Parse(Console.ReadLine());
doubleX,Y,Z;
坐标转换.转换(B,L,H,outX,outY,outZ);
Console.WriteLine("该点的空间坐标为({0},{1},{2})",X,Y,Z);
}while(true);
}
}
class坐标转换
{
//转换参数
staticpublicdoublea;//长半车由
staticpublicdoublea;//扁率
staticpublicdoubleee;//e的平方
//静态构造函数
static坐标转换()
{
a=6378140.0;
a=1.0/298.257;
ee=2*a-a*a;//e的平方
}
//将ddd.mmss转为弧度
staticpublicdoubleDEG(doubleang)
{
intfuhao=(int)(ang/Math.Abs(ang));
ang=Math.Abs(ang);
intd=(int)ang;
intm=((int)(ang*100))-d*100;
doubles=ang*10000-m*100-d*10000;
return((d+m/60.0+s/3600.0)*fuhao)/180.0*Math.PI;
}
//转换
staticpublicvoid转换(doubleB,doubleL,doubleH,outdoubleX,outdoubleY,outdoubleZ)
{
doubleN=a/Math.Sqrt(1-ee*Math.Sin(B)*Math.Sin(B));
X=(N+H)*Math.Cos(B)*Math.Cos(L);
Y=(N+H)*Math.Cos(B)*Math.Sin(L);
Z=(N*(1-ee)+H)*Math.Cos(B);
}
}
}
标(X,Y,Z)求该点的大地坐标(B,L,H)。
[提示:
Y
L=arctan
X
W二siBi2二:
e—:
2
Z+Ne2sinBtanB二
Jx2+Y2
HZN(1—e2)
sinB
]
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespace坐标转换
{
classProgram
{
staticvoidMain(string[]args){
do{
Console.Write("请输入X[直接回车结束输入]=");
stringstr=Console.ReadLine();
if(str=="")break;
doubleX=double.Parse(str);
Console.Write("请输入Y=");
doubleY=double.Parse(Console.ReadLine());
Console.Write("请输入Z=");
doubleZ=double.Parse(Console.ReadLine());
doubleB,L,H;
坐标转换.转换(X,Y,乙outB,outL,outH);
Console.WriteLine("该点的大地坐标为({0},{1},{2})",坐标转换.DMS(B),坐标转换.DMS(L),H);
}while(true);
}
}
class坐标转换
{
//转换参数
staticpublicdoublea;//长半车由staticpublicdoublea;〃扁率staticpublicdoubleee;//e的平方
//静态构造函数
static坐标转换()
{
a=6378140.0;
a=1.0/298.257;
ee=2*a-a*a;//e的平方
}
//将弧度转为ddd.mmss
staticpublicdoubleDMS(doubleang)
{
ang+=1.0E-15;//加上一个小量,以保证进位
intfuhao=(int)(ang/Math.Abs(ang));
ang=Math.Abs(ang)*180.0/Math.PI;
intd=(int)ang;
ang=(ang-d)*60.0;intm=(int)ang;
doubles=(ang-m)*60.0;
return(d+m/100.0+s/10000.0)*fuhao;
}
//计算方位角,返回弧度值
publicstaticdouble方位角(doublex1,doubley1,doublex2,doubley2)
{
doubledeltaX=x2-x1;
doubledeltaY=y2-y1;
doubleangle=Math.PI*0.5;
if(Math.Abs(deltaX)>0.000000001)
{
angle=Math.Atan2(deltaY,deltaX);
}
if(angle<0)
{
angle+=Math.PI;
}
if(deltaY<0.0||((Math.Abs(deltaY)<0.000000001)&&(deltaX<0)))
{
angle+=Math.PI;
}
returnangle;
}
//转换
L,out
staticpublicvoid转换(doubleX,doubleY,doubleZ,outdoubleB,outdoubledoubleH)
{
doubleN=0;
L=方位角(0,0,X,Y);
doubleS=Mat