⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adjpro0504.cpp

📁 GPS网平差计算
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  // 4-2 输入本站观测值
		for(int j=obsnum;j<obsnum+a.st[i].obnum;j++) 
		{
	       in>>name; t=0;                    // 输入照准点名,操作过程同上    
           a.L[j].startp=a.st[i].stp;
		   for(k=0;k<n;k++)
		  if(strnicmp(name,a.Pt[k].name,20)==0)
		  {
			   a.L[j].endp=&(a.Pt[k]);
			    t++;
		  }
		  if(t==0) 
		  {strcpy(a.Pt[n].name,name);
				a.L[j].endp=&(a.Pt[n]);
				n++;
		  }
          in>>a.L[j].style;
		  a.L[j].A=a.L[j].A0=-PI;
		  if(a.L[j].style==1)
		  {
			  a.anglenum++;
			  a.st[i].aglnum++;
			  in>>a.L[j].angle;                                    // 输入方向观测值
		      a.L[j].dist0=-PI;
			  a.L[j].dist=-PI;
		  }
		  if(a.L[j].style==2)
		  {   a.distnum++;
			  a.st[i].disnum++;  
			  in>>a.L[j].dist;                                     // 输入距离观测值
			  a.L[j].dist0=a.L[j].dist;
			  a.L[j].angle=-PI;
		  }
		
		  a.L[j].i=j-obsnum;
		  a.L[j].sti=i;
		}              
	   
	   obsnum+=a.st[i].aglnum+a.st[i].disnum;
	   a.obnum+=a.st[i].aglnum+a.st[i].disnum;
	}
     
	 //  文件正确性判断

// 5 固定边长输入
     for(i=obsnum;i<obsnum+a.fixdisn;i++)
	 {
		 in>>name;int t=0;
		 for(int k=0;k<n;k++)
		  if(strnicmp(name,a.Pt[k].name,20)==0)
		  {
			   a.L[i].startp=&(a.Pt[k]);
			    t++;
		  }
		  if(t==0) 
		  {strcpy(a.Pt[n].name,name);
				a.L[i].startp=&(a.Pt[n]);
				n++;
		  }
		  in>>name; t=0;
		 for(k=0;k<n;k++)
		  if(strnicmp(name,a.Pt[k].name,20)==0)
		  {
			   a.L[i].endp=&(a.Pt[k]);
			    t++;
		  }
		  if(t==0) 
		  {strcpy(a.Pt[n].name,name);
				a.L[i].endp=&(a.Pt[n]);
				n++;
		  }
         in>>a.L[i].dist;
		 a.L[i].dist0=a.L[i].dist;                                  //输入距离值
		 a.L[i].A=a.L[i].A0=-PI;
		 a.L[i].style=4;
		 a.L[i].angle=-PI;
		 a.L[i].i=i-obsnum;
	   }
       obsnum+=a.fixdisn;
// 5 固定方位角输入
     for(i=obsnum;i<obsnum+a.fixafn;i++)
	 {
		 in>>name;int t=0;
		 for(int k=0;k<n;k++)
		  if(strnicmp(name,a.Pt[k].name,20)==0)
		  {
			   a.L[i].startp=&(a.Pt[k]);
			    t++;
		  }
		  if(t==0) 
		  {strcpy(a.Pt[n].name,name);
				a.L[i].startp=&(a.Pt[n]);
				n++;
		  }
		  in>>name; t=0;
		 for(k=0;k<n;k++)
		  if(strnicmp(name,a.Pt[k].name,20)==0)
		  {
			   a.L[i].endp=&(a.Pt[k]);
			    t++;
		  }
		  if(t==0) 
		  {strcpy(a.Pt[n].name,name);
				a.L[i].endp=&(a.Pt[n]);
				n++;
		  }
         in>>a.L[i].A;a.L[i].A0=a.L[i].A;
		 a.L[i].style=3;
		 a.L[i].dist=-PI;
		 a.L[i].dist0=-PI;
		 a.L[i].i=i-obsnum;
		 a.L[i].angle=-PI;
	 }
	 obsnum+=a.fixafn;
	 if(n!=a.allpnum) {cout<<fname<<" error: file provide not correct point number !  "<<endl;
	 return 0;}
	 in.close();
	
return 1;                             // 关闭输入流及关联文件
}

//***************************平面网数据屏幕输出***************************************************
void XYnetdis(XYnet &aa)
{

cout<<aa.netname<<"  "<<aa.allpnum<<"  "<<aa.fixpnum<<"  "<<aa.statnum<<"  "
<<aa.obnum<<"  "<<aa.fixdisn<<"  "<<aa.fixafn<<endl;
cout<<aa.mangle<<"   "<<aa.msa<<"   "<<aa.msb<<endl<<endl;
for(int i=0;i<aa.fixpnum;i++)
cout<<aa.Pt[i].name<<"    "<<aa.Pt[i].X<<"    "<<aa.Pt[i].Y<<endl;
cout<<endl;
int n(0);
  for(int j=0;j<aa.statnum;j++)

  {cout<<aa.st[j].stp->name<<"  "<<aa.st[j].aglnum<<"   "<<aa.st[j].disnum<<endl;
	for(i=n;i<n+aa.st[j].aglnum+aa.st[j].disnum;i++)
	{
		cout<<"    "<<aa.L[i].i<<"    "<<aa.L[i].endp->name<<"  "<<aa.L[i].style;
		if(aa.L[i].style==1) cout<<"  "<<aa.L[i].angle<<endl;
		if(aa.L[i].style==2) cout<<"  "<<aa.L[i].dist<<endl;
	}cout<<endl;
   n+=aa.st[j].aglnum+aa.st[j].disnum;
  }

for(i=aa.obnum;i<aa.obnum+aa.fixdisn+aa.fixafn;i++)
{
	cout<<aa.L[i].startp->name<<"  "<<aa.L[i].endp->name<<"  "<<aa.L[i].style<<"  ";
	if(aa.L[i].style==4)cout<<aa.L[i].dist<<endl;
	if(aa.L[i].style==3)cout<<aa.L[i].A<<endl;
}cout<<endl;

}
//*****************************平面网的边结构****************************************************
struct range{
XYP st;                          // 起点
XYP ed;                          // 终点
double A;                        // 计算方位角
double MA;                       // 方位角中误差
double S;                        // 计算边长
double MS;                       // 边长中误差
double sMS;                      // 边长相对精度
double E;                        // 相对误差极大值
double F;                        // 相对误差极小值
double T;                        // 相对误差极大值方位角
};

//*******************************平面控制网平差结果文件输出函数***********************************
//平面控制网平差结果文件输出函数
int XYfileout(XYnet &aa,char *outfile)
{   
	ofstream ou(outfile);
	ou.width(5);
	ou.right;
	ou.precision(11);
// 1网的基本信息输出
	ou<<endl<<"                 平面控制网"<<aa.netname<<"平差计算结果         "<<endl<<endl;  
ou<<"-----------------------------------------------------------------------"<<endl;
ou<<"                          控制网输入数据      "<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;
ou<<" 网  名: "<<aa.netname<<"  总点数: "<<aa.allpnum<<"  控制点数: "
<<aa.fixpnum<<"  测站数: "<<aa.statnum<<"  观测值总数: "<<aa.obnum<<endl
<<" 固定边长数: "<<aa.fixdisn<<"  固定方位角数: "<<aa.fixafn;
ou<<endl<<" 角度测量中误差: "<<aa.mangle<<"s  距离误差加常数: "<<aa.msa
<<"m   距离误差乘常数: "<<aa.msb<<"ppm"<<endl<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;
ou<<"          控制点名         X                   Y                  "<<endl;  
ou<<"-----------------------------------------------------------------------"<<endl;
for(int i=0;i<aa.fixpnum;i++)
   {ou<<"          ";ou.width(5);ou<<aa.Pt[i].name;ou<<"    ";ou.width(13);
    ou<<aa.Pt[i].X;ou<<"       ";ou.width(13);ou<<aa.Pt[i].Y<<endl;
   }ou<<endl;

ou<<"-----------------------------------------------------------------------"<<endl;
ou<<"  测站名  方向观测数  边长观测数    照准点  观测类型        观测值            "<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;

  int n(0);
   for(int j=0;j<aa.statnum;j++)
   {ou.width(6);ou<<aa.st[j].stp->name;ou.width(12);ou<<aa.st[j].aglnum;
   ou.width(12);ou<<aa.st[j].disnum<<endl;
	for(i=n;i<n+aa.st[j].aglnum+aa.st[j].disnum;i++)
    {ou<<"                        "<<"    ";ou.width(12);ou<<aa.L[i].endp->name<<"       ";
	if(aa.L[i].style==1)ou<<"方向"<<"        "<<aa.L[i].angle<<endl;
	if(aa.L[i].style==2)ou<<"边长"<<"        "<<aa.L[i].dist<<endl;
    }ou<<"                        "<<endl;
    n+=aa.st[j].aglnum+aa.st[j].disnum;
   }
   if(aa.fixafn+aa.fixdisn>0){
    ou<<"-----------------------------------------------------------------------"<<endl;
    ou<<"                           固定方位角与边长数据      "<<endl;
    ou<<"-----------------------------------------------------------------------"<<endl;
    ou<<"              起点名    终点名     数据类型      数     据   "<<endl;
    ou<<"-----------------------------------------------------------------------"<<endl;
                   
   for(i=aa.obnum;i<aa.obnum+aa.fixdisn+aa.fixafn;i++)
   { 
	   ou<<"              ";ou.width(6);ou<<aa.L[i].startp->name<<"    ";
	   ou.width(6);ou<<aa.L[i].endp->name;ou.width(12);
	   if(aa.L[i].style==4){ou<<"边  长";ou.width(16);ou<<aa.L[i].dist<<endl;}
	   if(aa.L[i].style==3){ou<<"方位角";ou.width(16);ou<<aa.L[i].A0<<endl;}
   }
ou<<"-----------------------------------------------------------------------"<<endl;
   }
   ou<<endl;

// 2输出网的近似坐标计算结果
   ou<<"-----------------------------------------------------------------------"<<endl;
   ou<<"                      控制网近似坐标计算结果      "<<endl;
   ou<<"-----------------------------------------------------------------------"<<endl;

   ou<<"                 Name            X(m)              Y(m)"<<endl;
   ou<<"-----------------------------------------------------------------------"<<endl;
   for(i=0;i<aa.allpnum;i++)
   {
	ou<<"            ";ou.width(6);ou<<aa.Pt[i].name<<"        ";ou.width(12);
	ou.precision(10);ou<<setf(aa.Pt[i].X0,3)<<"        ";ou.width(12);
	ou.precision(10);ou<<setf(aa.Pt[i].Y0,3)<<endl;
   }
   ou<<"-----------------------------------------------------------------------"<<endl;

 double A[MAX][MAX],AQAT[MAX][MAX];
// 3输出观测值的平差结果
ou<<"--------------------------------------------------------------------------------"<<endl;
if(aa.anglenum>0){
ou<<"                              方向观测值平差结果"<<endl;
ou<<"--------------------------------------------------------------------------------"<<endl;
ou<<"     FROM      TO  TYPE      VALUE(dms)   M(sec)  V(sec)    RESULT(dms)     Ri"<<endl;
ou<<"--------------------------------------------------------------------------------"<<endl;
   
	    for(i=0;i<aa.obnum;i++)
			for(int j=0;j<2*aa.allpnum+aa.statnum;j++)
				AT(aa.aa.A,A,aa.obnum,2*aa.allpnum+aa.statnum);
	  ATPA(A,aa.aa.QXX,AQAT,2*aa.allpnum+aa.statnum,aa.obnum);
//	 cout<<"now,output QLL:"<<endl;
//	 matdis(AQAT,aa.obnum,aa.obnum);
    for(i=0;i<aa.obnum;i++)
		if(aa.L[i].style==1)
		{
		 ou.width(9);ou<<aa.L[i].startp->name;
		 ou.width(8);ou<<aa.L[i].endp->name;
         ou.width(6);ou<<" 方向";
		  ou.width(16);
		 ou<<aa.L[i].angle;
		  ou.width(8);
		 ou<<setf(aa.aa.m0*sqrt(AQAT[i][i])*rou,2);
		 
		 ou.width(9);
		 ou<<setf(aa.aa.V[i][0]*rou,2);
         
		 ou<<" ";
		 ou.width(12);
		 ou<<setf(h_d(d_h(aa.L[i].angle)+aa.aa.V[i][0]),5);
		// ou<<aa.L[i].A0;
		 ou<<endl;
   	}

   ou<<"--------------------------------------------------------------------------------"<<endl;
  }
   if(aa.distnum>0){
   ou<<"--------------------------------------------------------------------------------"<<endl;
   ou<<"                             边长观测值平差结果"<<endl;
   ou<<"--------------------------------------------------------------------------------"<<endl;
   ou<<"     FROM      TO  TYPE        VALUE(m)    M(cm)   V(cm)   RESULT(m)    "<<endl;
   ou<<"--------------------------------------------------------------------------------"<<endl;
      for(i=0;i<aa.obnum;i++)
		if(aa.L[i].style==2)
		{
		 ou.width(9);ou<<aa.L[i].startp->name;
		 ou.width(8);ou<<aa.L[i].endp->name;
         ou.width(6);ou<<"边长";
		  ou.width(16);
		 ou<<aa.L[i].dist;
		  ou.width(8);
		 ou<<setf(aa.aa.m0*sqrt(AQAT[i][i])*100,2);
		 
		 ou.width(9);
		 ou<<setf(aa.aa.V[i][0]*100,2);
         
		 ou<<" ";
		 ou.width(11);
		 ou<<setf(aa.L[i].dist+aa.aa.V[i][0],4);
		 ou<<endl;
		}
     ou<<"--------------------------------------------------------------------------------"<<endl;
   }

// 4输出坐标计算结果与精度
  ou<<"-----------------------------------------------------------------------------------------"<<endl;
  ou<<"                                  平差坐标及其精度"<<endl;
  ou<<"-----------------------------------------------------------------------------------------"<<endl;
  ou<<"   Name            X(m)             Y(m)   MX(cm)  MY(cm) MP(cm) E(cm)  F(cm)     T(d.ms)  "<<endl;
  ou<<"-----------------------------------------------------------------------------------------"<<endl;
   for(i=0;i<aa.fixpnum;i++)
   {ou.right;
    ou.width(8);ou<<aa.Pt[i].name;ou.precision(11);ou.width(17);
	ou<<setf(aa.Pt[i].X,4);ou.precision(11);ou.width(16);ou<<setf(aa.Pt[i].Y,4)<<endl;
   }


   double Mx(0),My(0),Mp(0);
   for(i=aa.fixpnum;i<aa.allpnum;i++)
   {
     ou.right;
     ou.width(8);ou<<aa.Pt[i].name;ou.precision(11);
	 ou.width(17);ou<<setf(aa.Pt[i].X,4);ou.precision(11);
	 ou.width(16);ou<<setf(aa.Pt[i].Y,4);
     ou.precision(4);ou.width(8);ou<<aa.Pt[i].mX*100;
     ou.precision(4);ou.width(7);ou<<aa.Pt[i].mY*100;
     ou.precision(4);ou.width(7);ou<<aa.Pt[i].mp*100;
     ou.precision(4);ou.width(7);ou<<aa.Pt[i].E*100;
     ou.precision(4);ou.width(7);ou<<aa.Pt[i].F*100;
     ou<<" ";
     ou.precision(9);ou.width(11);ou<<setf(aa.Pt[i].T,5);
     ou<<endl;

     Mx+=aa.Pt[i].mX*100/(aa.allpnum-aa.fixpnum);
     My+=aa.Pt[i].mY*100/(aa.allpnum-aa.fixpnum);
     Mp+=aa.Pt[i].mp*100/(aa.allpnum-aa.fixpnum);
   }
  ou.precision(4);
  ou<<"-----------------------------------------------------------------------------------------"<<endl;
  ou<<"                Mx均值:  ";ou.width(5);ou<<Mx;
  ou<<"      My均值:  ";ou.width(5);ou<<My;
  ou<<"      Mp均值:  ";ou.width(5);ou<<Mp<<endl;
  ou<<"-----------------------------------------------------------------------------------------"<<endl<<endl;
// 5最弱点及精度

  ou<<"                                    最弱点及其精度"<<endl;
  ou<<"-----------------------------------------------------------------------------------------"<<endl;
  ou<<"   Name            X(m)             Y(m)   MX(cm)  MY(cm) MP(cm) E(cm)  F(cm)     T(dms) "<<endl; 

  double a(0);
  for(i=aa.fixpnum;i<aa.allpnum;i++)
   if(a<=aa.Pt[i].mp) {a=aa.Pt[i].mp;n=i;} 
   ou.right;
   ou.width(8);ou<<aa.Pt[n].name;ou.precision(11);ou.width(17);
   ou<<setf(aa.Pt[n].X,4);ou.precision(11);ou.width(16);ou<<setf(aa.Pt[n].Y,4);
   ou.precision(4);ou.width(8);ou<<aa.Pt[n].mX*100;
   ou.precision(4);ou.width(7);ou<<aa.Pt[n].mY*100;
   ou.precision(4);ou.width(7);ou<<aa.Pt[n].mp*100;
   ou.precision(4);ou.width(7);ou<<aa.Pt[n].E*100;
   ou.precision(4);ou.width(7);ou<<aa.Pt[n].F*100;
   ou<<" ";
   ou.precision(9);ou.width(10);ou<<setf(aa.Pt[n].T,5);
   ou<<endl;
   ou<<"-----------------------------------------------------------------------------------------"<<endl;

// 6 网点间边长、方位角及其相对精度

   ou<<"                                 网点间边长、方位角及其相对精度"<<endl;
   ou<<"--------------------------------------------------------------------------------------------------"<<endl;
   ou<<"  FROM       TO       A(dms)   MA(sec)     S(m)      MS(cm)    S/MS     E(cm)   F(cm)     T(dms) "<<endl;
   ou<<"--------------------------------------------------------------------------------------------------"<<endl;
  range L[MAX

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -