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

📄 convert.cpp

📁 坐标转换程序,可以将空间直角坐标转化为大地坐标
💻 CPP
📖 第 1 页 / 共 3 页
字号:
     fread(&j,sizeof(int),1,in);
     m_Grid5.SetRows(j);

	 for (i=0;i<j-1;i++)
	 {
      m_Grid5.SetRow(i+1);
	  for (k=1;k<=7;k++)
	  {
           if (k==1) fread(buf,20,1,in);
	       else  { fread(&xx,sizeof(double),1,in);
	             if (xx!=0)     
				 {
					 if ((k<=4)||(k==7))
					   sprintf(buf,"%.3f",xx);
					   else 
					   sprintf(buf,"%.8f",xx);
				 }
			     else  strcpy(buf,"");
		   }
	       m_Grid5.SetCol(k);   m_Grid5.SetText(buf);
	  }
	 }


     fclose(in);
  }
}

void CConvert::WriteData()
{
  int i,j,k;
  CString str;
  double xx;
  FILE *in;
  in =fopen ("data","w+");
  
  //m_Grid1
  j=m_Grid1.GetRows();
  fwrite(&j,sizeof(int),1,in);
  for (i=0;i<j-1;i++)
  {
    m_Grid1.SetRow(i+1);
	for (k=1;k<=5;k++)
	{
       m_Grid1.SetCol(k);   str=m_Grid1.GetText();
	   xx=atof(str);
	   if (k==1) fwrite(str,20,1,in);
	         else  fwrite(&xx,sizeof(double),1,in);
	}
  }

 //m_Grid2
  j=m_Grid2.GetRows();
  fwrite(&j,sizeof(int),1,in);
  for (i=0;i<j-1;i++)
  {
    m_Grid2.SetRow(i+1);
	for (k=1;k<=5;k++)
	{
       m_Grid2.SetCol(k);   str=m_Grid2.GetText();
	   xx=atof(str);
	   if (k==1) fwrite(str,20,1,in);
	         else  fwrite(&xx,sizeof(double),1,in);
	}
  }

 //m_Grid3
  j=m_Grid3.GetRows();
  fwrite(&j,sizeof(int),1,in);
  for (i=0;i<j-1;i++)
  {
    m_Grid3.SetRow(i+1);
	for (k=1;k<=5;k++)
	{
       m_Grid3.SetCol(k);   str=m_Grid3.GetText();
	   xx=atof(str);
	   if (k==1) fwrite(str,20,1,in);
	         else  fwrite(&xx,sizeof(double),1,in);
	}
  }

 //m_Grid4
  j=m_Grid4.GetRows();
  fwrite(&j,sizeof(int),1,in);
  for (i=0;i<j-1;i++)
  {
    m_Grid4.SetRow(i+1);
	for (k=1;k<=7;k++)
	{
       m_Grid4.SetCol(k);   str=m_Grid4.GetText();
	   xx=atof(str);
	   if (k==1) fwrite(str,20,1,in);
	         else  fwrite(&xx,sizeof(double),1,in);
	}
  }

 //m_Grid5
  j=m_Grid5.GetRows();
  fwrite(&j,sizeof(int),1,in);
  for (i=0;i<j-1;i++)
  {
    m_Grid5.SetRow(i+1);
	for (k=1;k<=7;k++)
	{
       m_Grid5.SetCol(k);   str=m_Grid5.GetText();
	   xx=atof(str);
	   if (k==1) fwrite(str,20,1,in);
	         else  fwrite(&xx,sizeof(double),1,in);
	}
  }


  fclose(in);
}


void CConvert::Changejs()
{
  CString str;
  double L0,L1;
//  double yyy,yyy1;
  double x1,y1,z1,x2,y2;
  double b1,l1,h1;//,b2,l2;
  int    i,j;
  double MM;
  
  if (GyBl.WorkData.Mode==2)
	  MM=0.9996;
      else
	  MM=1;
  switch (k_mode)
  {
     case 1:

		  L0=CallL0(0,0);

          j=m_Grid1.GetRows();
          for (i=0;i<j-1;i++)
		  {
            m_Grid1.SetRow(i+1);
            m_Grid1.SetCol(2);   str=m_Grid1.GetText();  x1=atof(str);
            m_Grid1.SetCol(3);   str=m_Grid1.GetText();  y1=atof(str);

			GyBl.Zbxt_work= &GyBl.WorkData.Zbxt;
 	            // 长半径   扁率  中央纬度  经度        Y 正家  X 增加   比例	  投影高
            Converting.vSetSystem(GyBl.Zbxt_work->Ra,GyBl.Zbxt_work->Bl,0,L0,
				   GyBl.Zbxt_work->Xp,GyBl.Zbxt_work->Yp,MM,GyBl.Zbxt_work->Tyg);
            
            Converting.XYBL(x1,y1,&b1,&l1);
			L1=CallL0(l1,1);
			GyBl.Zbxt_work= &GyBl.WorkData.New_Zbxt;
 	            // 长半径   扁率  中央纬度  经度        Y 正家  X 增加   比例	  投影高
            Converting.vSetSystem(GyBl.Zbxt_work->Ra,GyBl.Zbxt_work->Bl,0,L1,
				   GyBl.Zbxt_work->Xp,GyBl.Zbxt_work->Yp,MM,GyBl.Zbxt_work->Tyg);
 		
			Converting.BLXY(b1,l1,&x2,&y2);

            m_Grid1.SetCol(4);   str.Format("%.3f",x2);m_Grid1.SetText(str); 
            m_Grid1.SetCol(5);   str.Format("%.3f",y2);m_Grid1.SetText(str); 
		  }
		    break;

     case 2:

          j=m_Grid2.GetRows();
          for (i=0;i<j-1;i++)
		  {
            m_Grid2.SetRow(i+1);
            m_Grid2.SetCol(2);   str=m_Grid2.GetText();  b1=Deg(atof(str));
            m_Grid2.SetCol(3);   str=m_Grid2.GetText();  l1=Deg(atof(str));

			L1=CallL0(l1,0);//转换为幅度
			GyBl.Zbxt_work= &GyBl.WorkData.Zbxt;
 	            // 长半径   扁率  中央纬度  经度        Y 正家  X 增加   比例	  投影高
            Converting.vSetSystem(GyBl.Zbxt_work->Ra,GyBl.Zbxt_work->Bl,0,L1,
				   GyBl.Zbxt_work->Xp,GyBl.Zbxt_work->Yp,MM,GyBl.Zbxt_work->Tyg);
 		
			Converting.BLXY(b1*PI/180,l1*PI/180,&x2,&y2);

            m_Grid2.SetCol(4);   str.Format("%.3f",x2);m_Grid2.SetText(str); 
            m_Grid2.SetCol(5);   str.Format("%.3f",y2);m_Grid2.SetText(str); 
		  }
		    break;

	 case 3:
 		    L0=CallL0(0,0);
            j=m_Grid3.GetRows();
            for (i=0;i<j-1;i++)
			{
               m_Grid3.SetRow(i+1);
               m_Grid3.SetCol(2);   str=m_Grid3.GetText();  x1=atof(str);
               m_Grid3.SetCol(3);   str=m_Grid3.GetText();  y1=atof(str);

			GyBl.Zbxt_work= &GyBl.WorkData.Zbxt;
 	            // 长半径   扁率  中央纬度  经度        Y 正家  X 增加   比例	  投影高
            Converting.vSetSystem(GyBl.Zbxt_work->Ra,GyBl.Zbxt_work->Bl,0,L0,
				   GyBl.Zbxt_work->Xp,GyBl.Zbxt_work->Yp,MM,GyBl.Zbxt_work->Tyg);
            
            Converting.XYBL(x1,y1,&b1,&l1);

            m_Grid3.SetCol(4);   str.Format("%.8f",Dfm(b1*180/PI));m_Grid3.SetText(str); 
            m_Grid3.SetCol(5);   str.Format("%.8f",Dfm(l1*180/PI));m_Grid3.SetText(str); 
		  }
		    break;

	 case 4:
 		    L0=CallL0(0,0);
            j=m_Grid4.GetRows();
            for (i=0;i<j-1;i++)
			{
               m_Grid4.SetRow(i+1);
               m_Grid4.SetCol(2);   str=m_Grid4.GetText();  b1=atof(str);
               m_Grid4.SetCol(3);   str=m_Grid4.GetText();  l1=atof(str);
               m_Grid4.SetCol(4);   str=m_Grid4.GetText();  h1=atof(str);

			GyBl.Zbxt_work= &GyBl.WorkData.Zbxt;
 	            // 长半径   扁率  中央纬度  经度        Y 正家  X 增加   比例	  投影高
            Converting.vSetSystem(GyBl.Zbxt_work->Ra,GyBl.Zbxt_work->Bl,0,L0,
				   GyBl.Zbxt_work->Xp,GyBl.Zbxt_work->Yp,MM,GyBl.Zbxt_work->Tyg);
            
           Converting.BLHXYZ(Deg(b1)*PI/180,Deg(l1)*PI/180,h1,&x1,&y1,&z1);

            m_Grid4.SetCol(5);   str.Format("%.3f",x1);m_Grid4.SetText(str); 
            m_Grid4.SetCol(6);   str.Format("%.3f",y1);m_Grid4.SetText(str); 
            m_Grid4.SetCol(7);   str.Format("%.3f",z1);m_Grid4.SetText(str); 

		  }
		    break;


	 case 5:
 		    L0=CallL0(0,0);
            j=m_Grid5.GetRows();
            for (i=0;i<j-1;i++)
			{
               m_Grid5.SetRow(i+1);
               m_Grid5.SetCol(2);   str=m_Grid5.GetText();  x1=atof(str);
               m_Grid5.SetCol(3);   str=m_Grid5.GetText();  y1=atof(str);
               m_Grid5.SetCol(4);   str=m_Grid5.GetText();  z1=atof(str);

			GyBl.Zbxt_work= &GyBl.WorkData.Zbxt;
 	            // 长半径   扁率  中央纬度  经度        Y 正家  X 增加   比例	  投影高
            Converting.vSetSystem(GyBl.Zbxt_work->Ra,GyBl.Zbxt_work->Bl,0,L0,
				   GyBl.Zbxt_work->Xp,GyBl.Zbxt_work->Yp,MM,GyBl.Zbxt_work->Tyg);
            
            Converting.XYZBLH(x1,y1,z1,&b1,&l1,&h1);

            m_Grid5.SetCol(5);   str.Format("%.8f",Dfm(b1*180/PI));m_Grid5.SetText(str); 
            m_Grid5.SetCol(6);   str.Format("%.8f",Dfm(l1*180/PI));m_Grid5.SetText(str); 
            m_Grid5.SetCol(7);   str.Format("%.3f",h1);            m_Grid5.SetText(str); 
		  }
		    break;


  }
}

void CConvert::Onchange() 
{
  Changejs();
}


void CConvert::OnInput() 
{
//  int i,j,k;
  char  buf[255],*po;
//  double xx;

	CFileDialog dlgFile(TRUE, "*", NULL, OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,
	                "导入数据 (*.*)|*.*||", NULL);
	if (  dlgFile.DoModal() != IDOK ) return  ;

//    RET=main(dlgFile.GetPathName());


  FILE *in;
  switch (k_mode)
  {
  case 1:
	   break;
  case 2:
	    m_Grid2.SetRows(1);
	    in=fopen(dlgFile.GetPathName(),"r+");
        if (in==NULL) break;
        while (!feof(in))
		{
         if (fgets(buf,254,in)==NULL) break;
         if (strlen(buf)>10)
		 {
            m_Grid2.SetRows(m_Grid2.GetRows()+1);
            po=strtok(buf," ");if (po==NULL) break;
            m_Grid2.SetRow(m_Grid2.GetRows()-1);
            m_Grid2.SetCol(1);     m_Grid2.SetText(po);         
            po=strtok(NULL," ");if (po==NULL) break;
            m_Grid2.SetCol(2);     m_Grid2.SetText(po);         
            po=strtok(NULL," ");if (po==NULL) break;
            m_Grid2.SetCol(3);     m_Grid2.SetText(po);         
		 }
        }
		fclose(in);
	   break;
  case 5:
	    m_Grid5.SetRows(1);
	    in=fopen(dlgFile.GetPathName(),"r+");
        if (in==NULL) break;
        while (!feof(in))
		{
         if (fgets(buf,254,in)==NULL) break;
         if (strlen(buf)>10)
		 {
            m_Grid5.SetRows(m_Grid5.GetRows()+1);
            po=strtok(buf," ");if (po==NULL) break;
            m_Grid5.SetRow(m_Grid5.GetRows()-1);
            m_Grid5.SetCol(1);     m_Grid5.SetText(po);         
            po=strtok(NULL," ");if (po==NULL) break;
            m_Grid5.SetCol(2);     m_Grid5.SetText(po);         
            po=strtok(NULL," ");if (po==NULL) break;
            m_Grid5.SetCol(3);     m_Grid5.SetText(po);         
            po=strtok(NULL," ");if (po==NULL) break;
            m_Grid5.SetCol(4);     m_Grid5.SetText(po);         
		 }
        }
		fclose(in);
	   break;

  }
}

void CConvert::OnOutput() 
{
  double b1,l1,x,y,h,z;
  int i,j;
//  char  buf[255],*po;
//  double xx;
  char FileName[100];
  CString str;
  FILE *out;
  switch (k_mode)
  {
  case 1:
		strcpy(FileName,"换算结果.1");
		out=fopen(FileName,"w+");
        if (out==NULL) break;
          j=m_Grid1.GetRows();
          for (i=0;i<j-1;i++)
		  {
            m_Grid1.SetRow(i+1);
            m_Grid1.SetCol(2);   str=m_Grid1.GetText();  b1=atof(str);
            m_Grid1.SetCol(3);   str=m_Grid1.GetText();  l1=atof(str);

            m_Grid1.SetCol(4);   str=m_Grid1.GetText();  x=atof(str);
            m_Grid1.SetCol(5);   str=m_Grid1.GetText();  y=atof(str);

            m_Grid1.SetCol(1);   str=m_Grid1.GetText();  
            fprintf(out,"%8s  %16.3f %16.3f %16.3f %16.3f\n",str,b1,l1,x,y);  
		  }
		fclose(out);
	   break;
  case 2:
		strcpy(FileName,"换算结果.2");
		out=fopen(FileName,"w+");
        if (out==NULL) break;
          j=m_Grid2.GetRows();
          for (i=0;i<j-1;i++)
		  {
            m_Grid2.SetRow(i+1);
            m_Grid2.SetCol(2);   str=m_Grid2.GetText();  b1=atof(str);
            m_Grid2.SetCol(3);   str=m_Grid2.GetText();  l1=atof(str);

            m_Grid2.SetCol(4);   str=m_Grid2.GetText();  x=atof(str);
            m_Grid2.SetCol(5);   str=m_Grid2.GetText();  y=atof(str);

            m_Grid2.SetCol(1);   str=m_Grid2.GetText();  

            fprintf(out,"%8s  %16.8f %16.8f %16.3f %16.3f\n",str,b1,l1,x,y);  
		  }
		fclose(out);
	   break;
    case 3:
		strcpy(FileName,"换算结果.3");
		out=fopen(FileName,"w+");
        if (out==NULL) break;
          j=m_Grid3.GetRows();
          for (i=0;i<j-1;i++)
		  {
            m_Grid3.SetRow(i+1);
            m_Grid3.SetCol(2);   str=m_Grid3.GetText();  b1=atof(str);
            m_Grid3.SetCol(3);   str=m_Grid3.GetText();  l1=atof(str);

            m_Grid3.SetCol(4);   str=m_Grid3.GetText();  x=atof(str);
            m_Grid3.SetCol(5);   str=m_Grid3.GetText();  y=atof(str);

            m_Grid3.SetCol(1);   str=m_Grid3.GetText();  

            fprintf(out,"%8s  %16.3f %16.3f %16.8f %16.8f\n",str,b1,l1,x,y);  
		  }
		fclose(out);
	   break;

    case 4:
		strcpy(FileName,"换算结果.4");
		out=fopen(FileName,"w+");
        if (out==NULL) break;
          j=m_Grid4.GetRows();
          for (i=0;i<j-1;i++)
		  {
            m_Grid4.SetRow(i+1);
            m_Grid4.SetCol(2);   str=m_Grid4.GetText();  b1=atof(str);
            m_Grid4.SetCol(3);   str=m_Grid4.GetText();  l1=atof(str);
            m_Grid4.SetCol(4);   str=m_Grid4.GetText();  h=atof(str);

            m_Grid4.SetCol(5);   str=m_Grid4.GetText();  x=atof(str);
            m_Grid4.SetCol(6);   str=m_Grid4.GetText();  y=atof(str);
            m_Grid4.SetCol(7);   str=m_Grid4.GetText();  z=atof(str);

            m_Grid4.SetCol(1);   str=m_Grid4.GetText();  

            fprintf(out,"%8s  %16.8f %16.8f %16.3f %16.3f %16.3f %16.3f\n",str,b1,l1,h,x,y,z);  
		  }
		fclose(out);
	   break;
    case 5:
		strcpy(FileName,"换算结果.5");
		out=fopen(FileName,"w+");
        if (out==NULL) break;
          j=m_Grid5.GetRows();
          for (i=0;i<j-1;i++)
		  {
            m_Grid5.SetRow(i+1);
            m_Grid5.SetCol(2);   str=m_Grid5.GetText();  b1=atof(str);
            m_Grid5.SetCol(3);   str=m_Grid5.GetText();  l1=atof(str);
            m_Grid5.SetCol(4);   str=m_Grid5.GetText();  h=atof(str);

            m_Grid5.SetCol(5);   str=m_Grid5.GetText();  x=atof(str);
            m_Grid5.SetCol(6);   str=m_Grid5.GetText();  y=atof(str);
            m_Grid5.SetCol(7);   str=m_Grid5.GetText();  z=atof(str);

            m_Grid5.SetCol(1);   str=m_Grid5.GetText();  

           fprintf(out,"%8s  %16.3f %16.3f %16.3f %16.8f %16.8f %16.3f\n",str,b1,l1,h,x,y,z);  
		  }
		fclose(out);
	   break;


  }
 str.Format("输出文件 %s",FileName);
 AfxMessageBox(str);
}

⌨️ 快捷键说明

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