常用测绘C#程序设计源代码.docx
《常用测绘C#程序设计源代码.docx》由会员分享,可在线阅读,更多相关《常用测绘C#程序设计源代码.docx(55页珍藏版)》请在冰豆网上搜索。
常用测绘C#程序设计源代码
常用测量程序设计
(1)用全站仪在A点观测了B点斜边和垂直角,求A到B的高差。
(提示:
,D--斜边,
--垂直角,
--仪器高,
--反光镜高,
--大气折光系数)
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1
{
classApplication
{
staticvoidMain(string[]args)
{
Console.Write("请输入斜边=");
doubleD=double.Parse(Console.ReadLine());
Console.Write("请输入垂直角[ddd.mmss]=");
doublea=DEG(double.Parse(Console.ReadLine()));
Console.Write("请输入仪器高=");
doublei=double.Parse(Console.ReadLine());
Console.Write("请输入反光镜高=");
doublev=double.Parse(Console.ReadLine());
doubleh=D*Math.Sin(a)+(1-0.13)*D/6371000.0*D/6371000.0*Math.Cos(a)*Math.Cos(a)/2.0+i-v;
Console.WriteLine("高差为{0}",h);
}
//将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;
}
}
}
(2)如图所示,已知A点的坐标及A点到B点的边长及方位角,计算B点的坐标。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1
{
classApplication
{
staticvoidMain(string[]args)
{
Console.Write("请输入A点的X坐标=");
doubleXA=double.Parse(Console.ReadLine());
Console.Write("请输入A点的Y坐标=");
doubleYA=double.Parse(Console.ReadLine());
Console.Write("请输入A到B的方位角[ddd.mmss]=");
doublea=DEG(double.Parse(Console.ReadLine()));
Console.Write("请输入A到B的水平距离=");
doubleS=double.Parse(Console.ReadLine());
doubleXB=XA+S*Math.Cos(a);
doubleYB=YA+S*Math.Sin(a);
Console.WriteLine("B点的坐标({0},{1})",XB,YB);
}
//将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;
}
}
}
(3)如图所示,已知A点和B点的坐标,计算A点到的边长及方位角。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1
{
classApplication
{
staticvoidMain(string[]args)
{
Console.Write("请输入A点的X坐标=");
doubleXA=double.Parse(Console.ReadLine());
Console.Write("请输入A点的Y坐标=");
doubleYA=double.Parse(Console.ReadLine());
Console.Write("请输入B点的X坐标=");
doubleXB=double.Parse(Console.ReadLine());
Console.Write("请输入B点的Y坐标=");
doubleYB=double.Parse(Console.ReadLine());
doubleS=距离(XA,YA,XB,YB);
doublea=方位角(XA,YA,XB,YB);
Console.WriteLine("AB间的距离={0},从A到B的方位角={1}",S,DMS(a));
}
//将弧度转为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)
{
angle+=Math.PI;
}
returnangle;
}
//计算距离
publicstaticdouble距离(doublex1,doubley1,doublex2,doubley2)
{
returnMath.Sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
}
}
(4)在如图所示的支中导线,已知A点到M点的坐标方位角
及每个左角,求每条边的坐标方位角。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1
{
classApplication
{
staticvoidMain(string[]args)
{
Console.Write("请输入A点到M点的坐标方位角=");
//将A点到M点的坐标方位角换算为M点到A点的坐标方位角,以便利用公式
doublea0=DEG(double.Parse(Console.ReadLine())+180.0);
if(a0>2*Math.PI)
{
a0-=2*Math.PI;
}
List导线转角集合=newList();
inti=1;
do
{
Console.Write("请输入第{0}个转角的水平角[左角为正,右角为负]<直接回车结束输入>=",i++);
stringstr=Console.ReadLine();
if(str!
="")
{
导线转角集合.Add(DEG(double.Parse(str)));
}
else
{
break;
}
}while(true);
i=1;
foreach(doubleain导线转角集合)
{
a0+=a+Math.PI;
if(a0>2*Math.PI)
{
a0-=2*Math.PI;
}
elseif(a0<0.0)
{
a0+=2*Math.PI;
}
Console.WriteLine("第{0}条边的方位角为{1}",i++,DMS(a0));
}
}
//将弧度转为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;
}
//将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;
}
}
}
(5)在如图所示的支中导线,已知A点和M点的坐标及每个左角和每条边长,求每个点的坐标。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1
{
classApplication
{
staticvoidMain(string[]args)
{
Console.Write("请输入M点的x坐标=");
doubleMx=double.Parse(Console.ReadLine());
Console.Write("请输入M点的y坐标=");
doubleMy=double.Parse(Console.ReadLine());
Console.Write("请输入A点的x坐标=");
doubleAx=double.Parse(Console.ReadLine());
Console.Write("请输入A点的y坐标=");
doubleAy=double.Parse(Console.ReadLine());
List导线转角集合=newList();
List导线边长集合=newList();
inti=1;
do
{
Console.Write("请输入第{0}个转角的水平角[左角为正,右角为负]<直接回车结束输入>=",i);
stringstr=Console.ReadLine();
if(str!
="")
{
导线转角集合.Add(DEG(double.Parse(str)));
}
else
{
break;
}
Console.Write("请输入第{0}条边长值=",i++);
导线边长集合.Add(double.Parse(Console.ReadLine()));
}while(true);
//计算M到A的坐标方位角
doublea0=方位角(Mx,My,Ax,Ay);
//计算每个点的坐标
doublex0=Ax;
doubley0=Ay;
for(intj=0;j<导线转角集合.Count;j++)
{
a0+=导线转角集合[j]+Math.PI;
if(a0>2*Math.PI)a0-=2*Math.PI;
x0=x0+导线边长集合[j]*Math.Cos(a0);
y0=y0+导线边长集合[j]*Math.Sin(a0);
Console.WriteLine("P{0}点的坐标是:
{1},{2}",j+2,x0,y0);
}
}
//将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;
}
//计算方位角,返回弧度值
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)
{
angle+=Math.PI;
}
returnangle;
}
}
}
(6)在如图所示的单一附合水准路线中,已知A点和B点的高程及每段的长度和高差,求每个点的高程。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1
{
classApplication
{
staticvoidMain(string[]args)
{
Console.Write("请输入A点的高程=");
doubleHa=double.Parse(Console.ReadLine());
Console.Write("请输入B点的高程=");
doubleHb=double.Parse(Console.ReadLine());
List路线段长度集合=newList();
List路线段高差集合=newList();
inti=1;
do
{
Console.Write("请输入第{0}段长度[公里为单位]<直接回车结束输入>=",i);
stringstr=Console.ReadLine();
if(str!
="")
{
路线段长度集合.Add(double.Parse(str));
}
else
{
break;
}
Console.Write("请输入第{0}段高差=",i++);
路线段高差集合.Add(double.Parse(Console.ReadLine()));
}while(true);
//计算水准路线闭合差
doublew=0;
double总长度=0;
for(intj=0;j<路线段长度集合.Count;j++)
{
w+=路线段高差集合[j];
总长度+=路线段长度集合[j];
}
w=w-(Hb-Ha);//闭合差
doublev=-w/总长度;//每公里改正数
//计算每个点的高程
doubleH=Ha;
for(intj=0;j<路线段长度集合.Count;j++)
{
H+=路线段高差集合[j]+v*路线段长度集合[j];
Console.WriteLine("P{0}点的高程是:
{1}",j+1,H);
}
Console.WriteLine("最后一点就是B点!
");
}
}
}
(7)在如图所示的前方交会中,ABJ三点按逆时针方向排列,已知AB两点的坐标和两个交会角度,求J点的坐标。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1
{
classApplication
{
staticvoidMain(string[]args)
{
Console.Write("请输入A点的x坐标=");
doubleAx=double.Parse(Console.ReadLine());
Console.Write("请输入A点的y坐标=");
doubleAy=double.Parse(Console.ReadLine());
Console.Write("请输入B点的x坐标=");
doubleBx=double.Parse(Console.ReadLine());
Console.Write("请输入B点的y坐标=");
doubleBy=double.Parse(Console.ReadLine());
Console.Write("请输入α的角度值=");
doubleα=DEG(double.Parse(Console.ReadLine()));
Console.Write("请输入β的角度值=");
doubleβ=DEG(double.Parse(Console.ReadLine()));
//计算A到B的坐标方位角
doublea0=方位角(Ax,Ay,Bx,By);
//计算A到J的坐标方位角
a0-=α;
//计算A到B的边长
doubles=距离(Ax,Ay,Bx,By);
//计算A到J的边长
s=s/Math.Sin(Math.PI-α-β)*Math.Sin(β);
//计算J的坐标
doubleJx=Ax+s*Math.Cos(a0);
doubleJy=Ay+s*Math.Sin(a0);
Console.WriteLine("J点的坐标={0},{1}",Jx,Jy);
}
//将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;
}
//计算方位角,返回弧度值
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)
{
angle+=Math.PI;
}
returnangle;
}
//计算距离
publicstaticdouble距离(doublex1,doubley1,doublex2,doubley2)
{
returnMath.Sqrt((