常用测绘C#程序设计.docx
《常用测绘C#程序设计.docx》由会员分享,可在线阅读,更多相关《常用测绘C#程序设计.docx(22页珍藏版)》请在冰点文库上搜索。
常用测绘C#程序设计
常用测绘C#程序设计(源代码)(总13页)
常用测量程序设计
(1)用全站仪在A点观测了B点斜边和垂直角,求A到B的高差。
(提示:
,D--斜边,
--垂直角,
--仪器高,
--反光镜高,
--大气折光系数)
usingSystem;
using;
namespaceConsoleApplication1
{
classApplication
staticvoidMain(string[]args)
("请输入斜边=");
doubleD=());
("请输入垂直角[]=");
doublea=DEG()));
("请输入仪器高=");
doublei=());
("请输入反光镜高=");
doublev=());
doubleh=D*(a)+(1-*D/*D/*(a)*(a)/+i-v;
("高差为{0}",h);
}
MainMain
Maindd(DEG(str)));
else
break;
}while(true);
i=1;
foreach(doubleain导线转角集合)
a0+=a+;
if(a0>2*
a0-=2*;
elseif(a0<
a0+=2*;
("第{0}条边的方位角为{1}",i++,DMS(a0));
("请输入第{0}条边长值=",i++);
导线边长集合.Add(()));
ount;j++)
a0+=导线转角集合[j]+;
if(a0>2*a0-=2*;
x0=x0+导线边长集合[j]*(a0);
y0=y0+导线边长集合[j]*(a0);
("P{0}点的坐标是:
{1},{2}",j+2,x0,y0);
Maindd(str));
("请输入第{0}段高差=",i++);
路线段高差集合.Add()));
w+=路线段高差集合[j];
总长度+=路线段长度集合[j];
w=w-(Hb-Ha);ount;j++)
H+=路线段高差集合[j]+v*路线段长度集合[j];
("P{0}点的高程是:
{1}",j+1,H);
("最后一点就是B点!
");
(7)在如图所示的前方交会中,ABJ三点按逆时针方向排列,已知AB两点的坐标和两个交会角度,求J点的坐标。
("请输入A点的x坐标=");
doubleAx=());
("请输入A点的y坐标=");
doubleAy=());
("请输入B点的x坐标=");
doubleBx=());
("请输入B点的y坐标=");
doubleBy=());
("请输入α的角度值=");
doubleα=DEG()));
("请输入β的角度值=");
doubleβ=DEG()));
("请输入第{0}点的y坐标=",i++);
多边形Y坐标集.Add(()));
ount;
for(intj=0;j{area+=多边形X坐标集[j]*多边形Y坐标集[j+1]-多边形X坐标集[j+1]*多边形Y坐标集[j];}MainEG()));差(D,α,仪器高,反光镜高,out水平距离);水平距离平方集合.Add(水平距离*水平距离);高差集合.Add(h);水平距离平方和+=水平距离*水平距离;高差和+=h;}while(true);ount;j++){H+=高差集合[j]+单位长度改正数*水平距离平方集合[j];("第{0}点的高程H={1}",j+2,H);}("最后一个点的高程应该与B点的高程相同!");}}class导线{Main位角(MX,MY,AX,AY);List坐标增量X集合=newList();List坐标增量Y集合=newList();inti=1;double坐标增量X和=0;double坐标增量Y和=0;double坐标增量X绝对值和=0;double坐标增量Y绝对值和=0;double水平距离和=0;do{("请输入{0}点到{1}点的水平距离S<直接回车结束输入>=",i,i+1);stringstr=();if(str=="")break;doubleS=(str);("请输入{0}点的水平角<左角为正,右角为负>=",i);doubleβ=导线.DEG()));i++;标(0,0,β,S,α0,outdx,outdy);坐标增量X集合.Add(dx);坐标增量Y集合.Add(dy);坐标增量X和+=dx;;坐标增量Y和+=dy;;坐标增量X绝对值和+=(dx);坐标增量Y绝对值和+=(dy);水平距离和+=S;}while(true);ount;j++){X+=坐标增量X集合[j]+X坐标单位长度改正数*(坐标增量X集合[j]);Y+=坐标增量Y集合[j]+Y坐标单位长度改正数*(坐标增量Y集合[j]);("第{0}点的X坐标={1},Y坐标={2}",j+2,X,Y);}("最后一个点的坐标应该与B点的坐标相同!");}}class导线{Main位角(MX,MY,AX,AY);List坐标增量X集合=newList();List坐标增量Y集合=newList();List高差集合=newList();List水平距离平方集合=newList();inti=1;double坐标增量X和=0;double坐标增量Y和=0;double坐标增量X绝对值和=0;double坐标增量Y绝对值和=0;double水平距离和=0;double高差和=0;double水平距离平方和=0;do{("请输入{0}点到{1}点的斜距D<直接回车结束输入>=",i,i+1);stringstr=();if(str=="")break;doubleD=(str);("请输入{0}点的水平角<左角为正,右角为负>=",i);doubleβ=导线.DEG()));("请输入{0}点到{1}点的垂直角=",i,i+1);doubleα=导线.DEG()));差(D,α,仪器高,反光镜高,out水平距离);水平距离平方集合.Add(水平距离*水平距离);高差集合.Add(h);水平距离平方和+=水平距离*水平距离;高差和+=h;标(0,0,β,水平距离,α0,outdx,outdy);坐标增量X集合.Add(dx);坐标增量Y集合.Add(dy);坐标增量X和+=dx;;坐标增量Y和+=dy;;坐标增量X绝对值和+=(dx);坐标增量Y绝对值和+=(dy);水平距离和+=水平距离;}while(true);ount;j++){H+=高差集合[j]+单位长度改正数*水平距离平方集合[j];X+=坐标增量X集合[j]+X坐标单位长度改正数*(坐标增量X集合[j]);Y+=坐标增量Y集合[j]+Y坐标单位长度改正数*(坐标增量Y集合[j]);("第{0}点的X坐标={1},Y坐标={2},高程H={3}",j+2,X,Y,H);}("最后一个点的坐标和高程应该与B点的坐标和高程相同!");}}class导线{Main位角(MX,MY,AX,AY);位角(BX,BY,NX,NY);List坐标增量X集合=newList();List坐标增量Y集合=newList();List高差集合=newList();List水平距离平方集合=newList();List方位角集合=newList();inti=1;double坐标增量X和=0;double坐标增量Y和=0;double坐标增量X绝对值和=0;double坐标增量Y绝对值和=0;double水平距离和=0;double高差和=0;double水平距离平方和=0;doubleα=α0;do{("请输入{0}点到{1}点的斜距D<直接回车结束输入>=",i,i+1);stringstr=();if(str=="")break;doubleD=(str);("请输入{0}点的水平角<左角为正,右角为负>=",i);doubleβ=导线.DEG()));("请输入{0}点到{1}点的垂直角=",i,i+1);double垂直角=导线.DEG()));差(D,垂直角,仪器高,反光镜高,out水平距离);水平距离平方集合.Add(水平距离*水平距离);高差集合.Add(h);水平距离平方和+=水平距离*水平距离;高差和+=h;标(0,0,β,水平距离,α,outdx,outdy);方位角集合.Add(α);坐标增量X集合.Add(dx);坐标增量Y集合.Add(dy);坐标增量X和+=dx;;坐标增量Y和+=dy;;坐标增量X绝对值和+=(dx);坐标增量Y绝对值和+=(dy);水平距离和+=水平距离;}while(true);("请输入最后一个连接角<左角为正,右角为负>=");doubleβn=导线.DEG()));位角(方位角集合[方位角集合.Count-1],βn);ount+1);lear();坐标增量Y集合.Clear();坐标增量X和=0;坐标增量Y和=0;坐标增量X绝对值和=0;坐标增量Y绝对值和=0;for(intj=0;j<方位角集合.Count;j++){方位角集合[j]+=方位角改正数*(j+1);dd(dx);坐标增量Y集合.Add(dy);坐标增量X和+=dx;;坐标增量Y和+=dy;;坐标增量X绝对值和+=(dx);坐标增量Y绝对值和+=(dy);}ount;j++){H+=高差集合[j]+单位长度改正数*水平距离平方集合[j];X+=坐标增量X集合[j]+X坐标单位长度改正数*(坐标增量X集合[j]);Y+=坐标增量Y集合[j]+Y坐标单位长度改正数*(坐标增量Y集合[j]);("第{0}点的X坐标={1},Y坐标={2},高程H={3}",j+2,X,Y,H);}("最后一个点的坐标和高程应该与B点的坐标和高程相同!");}}class导线{MainEG()));("请输入B点到N点的坐标方位角=");doubleα1=导线.DEG()));List方位角集合=newList();inti=1;doubleα=α0;do{("请输入{0}点的水平角[直接回车结束输入]<左角为正,右角为负>=",i);stringstr=();if(str=="")break;doubleβ=导线.DEG(str));i++;α=导线.方位角(α,β);方位角集合.Add(α);}while(true);ount-1]-α1;double方位角改正数=-方位角闭合差/方位角集合.Count;ount;j++){方位角集合[j]+=方位角改正数*(j+1);("{0}点到{1}点的坐标方位角={2}",j,j+2,导线.DMS(方位角集合[j]));}("最后一个坐标方位角应该与B点到N的坐标方位角相同!");}}class导线{Main位角(MX,MY,AX,AY);位角(BX,BY,NX,NY);List坐标增量X集合=newList();List坐标增量Y集合=newList();List水平距离平方集合=newList();List方位角集合=newList();inti=1;double坐标增量X和=0;double坐标增量Y和=0;double坐标增量X绝对值和=0;double坐标增量Y绝对值和=0;double水平距离和=0;double水平距离平方和=0;doubleα=α0;do{("请输入{0}点到{1}点的平距S<直接回车结束输入>=",i,i+1);stringstr=();if(str=="")break;doubleS=(str);("请输入{0}点的水平角<左角为正,右角为负>=",i);doubleβ=导线.DEG()));i++;水平距离平方集合.Add(S*S);水平距离平方和+=S*S;标(0,0,β,S,α,outdx,outdy);方位角集合.Add(α);坐标增量X集合.Add(dx);坐标增量Y集合.Add(dy);坐标增量X和+=dx;;坐标增量Y和+=dy;;坐标增量X绝对值和+=(dx);坐标增量Y绝对值和+=(dy);}while(true);("请输入最后一个连接角<左角为正,右角为负>=");doubleβn=导线.DEG()));位角(方位角集合[方位角集合.Count-1],βn);ount+1);lear();坐标增量Y集合.Clear();坐标增量X和=0;坐标增量Y和=0;坐标增量X绝对值和=0;坐标增量Y绝对值和=0;for(intj=0;j<方位角集合.Count;j++){方位角集合[j]+=方位角改正数*(j+1);dd(dx);坐标增量Y集合.Add(dy);坐标增量X和+=dx;;坐标增量Y和+=dy;;坐标增量X绝对值和+=(dx);坐标增量Y绝对值和+=(dy);}ount;j++){X+=坐标增量X集合[j]+X坐标单位长度改正数*(坐标增量X集合[j]);Y+=坐标增量Y集合[j]+Y坐标单位长度改正数*(坐标增量Y集合[j]);("第{0}点的X坐标={1},Y坐标={2}",j+2,X,Y);}("最后一个点的坐标应该与B点的坐标相同!");}}class导线{//将转为弧度staticpublicdoubleDEG(doubleang){intfuhao=(int)(ang/(ang));ang=(ang);intd=(int)ang;intm=((int)(ang*100))-d*100;doubles=ang*10000-m*100-d*10000;return((d+m/+s/*fuhao)/*;}//计算方位角,返回弧度值publicstaticdouble方位角(doublex1,doubley1,doublex2,doubley2){doubledeltaX=x2-x1;doubledeltaY=y2-y1;doubleangle=*;if(deltaX)>{angle=(deltaY,deltaX);}if(angle<0){angle+=;}if(deltaY<{angle+=;}returnangle;}//计算坐标,返回已知点到计算点的方位角publicstaticdouble坐标(doublex0,doubley0,double左角,double水平距离,double已知方位角,outdoublex,outdoubley){double方位角=已知方位角+左角+;//将方位角调整到0到2π之间if(方位角>=*2)方位角-=*2;if(方位角<方位角+=*2;x=x0+水平距离*(方位角);y=y0+水平距离*(方位角);return方位角;}//根据后视边的方位角与左角,计算前进边的方位角publicstaticdouble方位角(double后视边方位角,double左角){double方位角=后视边方位角+左角+;//将方位角调整到0到2π之间if(方位角>=*2)方位角-=*2;if(方位角<方位角+=*2;return方位角;}}}
area+=多边形X坐标集[j]*多边形Y坐标集[j+1]-多边形X坐标集[j+1]*多边形Y坐标集[j];
MainEG()));差(D,α,仪器高,反光镜高,out水平距离);
水平距离平方集合.Add(水平距离*水平距离);
高差集合.Add(h);
水平距离平方和+=水平距离*水平距离;
高差和+=h;
H+=高差集合[j]+单位长度改正数*水平距离平方集合[j];
("第{0}点的高程H={1}",j+2,H);
("最后一个点的高程应该与B点的高程相同!
class导线
Main位角(MX,MY,AX,AY);
List坐标增量X集合=newList();
List坐标增量Y集合=newList();
inti=1;
double坐标增量X和=0;
double坐标增量Y和=0;
double坐标增量X绝对值和=0;
double坐标增量Y绝对值和=0;
double水平距离和=0;
do
("请输入{0}点到{1}点的水平距离S<直接回车结束输入>=",i,i+1);
stringstr=();
if(str=="")break;
doubleS=(str);
("请输入{0}点的水平角<左角为正,右角为负>=",i);
doubleβ=导线.DEG()));
i++;
标(0,0,β,S,α0,outdx,outdy);
坐标增量X集合.Add(dx);
坐标增量Y集合.Add(dy);
坐标增量X和+=dx;;
坐标增量Y和+=dy;;
坐标增量X绝对值和+=(dx);
坐标增量Y绝对值和+=(dy);
水平距离和+=S;
X+=坐标增量X集合[j]+X坐标单位长度改正数*(坐标增量X集合[j]);
Y+=坐标增量Y集合[j]+Y坐标单位长度改正数*(坐标增量Y集合[j]);
("第{0}点的X坐标={1},Y坐标={2}",j+2,X,Y);
("最后一个点的坐标应该与B点的坐标相同!
List高差集合=newList();
List水平距离平方集合=newList();
double高差和=0;
double水平距离平方和=0;
("请输入{0}点到{1}点的斜距D<直接回车结束输入>=",i,i+1);
doubleD=(str);
("请输入{0}点到{1}点的垂直角=",i,i+1);
doubleα=导线.DEG()));差(D,α,仪器高,反光镜高,out水平距离);
标(0,0,β,水平距离,α0,outdx,outdy);
水平距离和+=水平距离;
("第{0}点的X坐标={1},Y坐标={2},高程H={3}",j+2,X,Y,H);
("最后一个点的坐标和高程应该与B点的坐标和高程相同!
位角(BX,BY,NX,NY);
List方位角集合=newList();
doubleα=α0;
double垂直角=导线.DEG()));差(D,垂直角,仪器高,反光镜高,out水平距离);
标(0,0,β,水平距离,α,outdx,outdy);
方位角集合.Add(α);
("请输入最后一个连接角<左角为正,右角为负>=");
doubleβn=导线.DEG()));
位角(方位角集合[方位角集合.Count-1],βn);
ount+1);
lear();
坐标增量Y集合.Clear();
坐标增量X和=0;
坐标增量Y和=0;
坐标增量X绝对值和=0;
坐标增量Y绝对值和=0;
for(intj=0;j<方位角集合.Count;j++)
方位角集合[j]+=方位角改正数*(j+1);
dd(dx);
MainEG()));
("请输入B点到N点的坐标方位角=");
doubleα1=导线.DEG()));
("请输入{0}点的水平角[直接回车结束输入]<左角为正,右角为负>=",i);
doubleβ=导线.DEG(str));
α=导线.方位角(α,β);
ount-1]-α1;
double方位角改正数=-方位角闭合差/方位角集合.Count;
("{0}点到{1}点的坐标方位角={2}",j,j+2,导线.DMS(方位角集合[j]));
("最后一个坐标方位角应该与B点到N的坐标方位角相同!
("请输入{0}点到{1}点的平距S<直接回车结束输入>=",i,i+1);
水平距离平方集合.Add(S*S);
水平距离平方和+=S*S;
标(0,0,β,S,α,outdx,outdy);
//将转为弧度
staticpublicdoubleDEG(doubleang)
intfuhao=(int)(ang/(ang));
ang=(ang);
intd=(int)ang;
intm=((int)(ang*100))-d*100;
doubles=ang*10000-m*100-d*10000;
return((d+m/+s/*fuhao)/*;
//计算方位角,返回弧度值
publicstaticdouble方位角(doublex1,doubley1,doublex2,doubley2)
doubledeltaX=x2-x1;
doubledeltaY=y2-y1;
doubleangle=*;
if(deltaX)>
angle=(deltaY,deltaX);
if(angle<0)
angle+=;
if(deltaY<
returnangle;
//计算坐标,返回已知点到计算点的方位角
publicstaticdouble坐标(doublex0,doubley0,double左角,double水平距离,double已知方位角,outdoublex,outdoubley)
double方位角=已知方位角+左角+;
//将方位角调整到0到2π之间
if(方位角>=*2)方位角-=*2;
if(方位角<方位角+=*2;
x=x0+水平距离*(方位角);
y=y0+水平距离*(方位角);
return方位角;
//根据后视边的方位角与左角,计算前进边的方位角
publicstaticdouble方位角(double后视边方位角,double左角)
double方位角=后视边方位角+左角+;
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2