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

📄 gybl.cpp

📁 坐标转换程序,可以将空间直角坐标转化为大地坐标
💻 CPP
字号:
// GyBl.cpp: implementation of the CGyBl class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "坐标转换.h"
#include "GyBl.h"
//#include "Basline.h"
#include "zbxtsz.h"
#include <afxpriv.h>

 
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGyBl::CGyBl()
{
  Zbxt_head=NULL;
  WorkData.Mode=1;
  int i;
  for (i=0;i<9;i++)  WorkData.Ys[i]=0;
                     WorkData.Ys[1]=WorkData.Ys[4]=WorkData.Ys[6]=1;

  strcpy(WorkData.Zbxt.XtName,"WGS-1984坐标系");
  strcpy(WorkData.Zbxt.Xtmode,"系统保留");
  WorkData.Zbxt.Ra=63781;
  WorkData.Zbxt.Bl=298.257223563;
  WorkData.Zbxt.Bl_num=9;
  strcpy(WorkData.New_Zbxt.XtName,"WGS-1984坐标系");
  strcpy(WorkData.New_Zbxt.Xtmode,"系统保留");
  WorkData.New_Zbxt.Ra=63781;
  WorkData.New_Zbxt.Bl=298.257223563;
  WorkData.New_Zbxt.Bl_num=9;
}

CGyBl::~CGyBl()
{

}

void CGyBl::DfmStr(double aa)
{
   double du,fen,miao;

   aa=aa*180/PI;
   du=floor(aa);
   fen=floor((aa-du)*60);
   miao=((aa-du)*60-fen)*60;
    if (miao>=60) { fen++;miao=0;
                    if (fen>=60)
                     { fen=0;du++;}
                   }
//   d=du+fen/100+miao/10000;
//   d=d*nn;
  str.Format("%3.0f:%02.0f:%08.5f",du,fen,miao);
}

BOOL CGyBl::zbxt()
{
    CZbxtSz  dlg;
	dlg.DoModal();
	return TRUE;
}

BOOL CGyBl::ReadZbxt()
{   
    FILE *in;
    char   path[255],pathname[255],*po;
   	strcpy(pathname,"zbxt.cfg");

	in=fopen(pathname,"r+");
	if (in==NULL) 
	{
 	 in=fopen(pathname,"w+");
     if (in==NULL) { AfxMessageBox("系统路径错误,请重新安装");return FALSE;}
     fprintf(in,"%s","WGS-1984坐标系\n系统保留\n6378137\n298.257223563 9\n");
     fprintf(in,"%s","国家1954北京坐标系\n系统保留\n6378245\n298.30 2\n");
     fprintf(in,"%s","国家1980西安坐标系\n系统保留\n6378140\n298.257 3\n");
	}
	fclose(in);
    
	in=fopen(pathname,"r+");
    if (in==NULL) return FALSE;
    while (!feof(in))
	{
      if (fgets(path,254,in)==NULL) break;
  	  str=path;	 str.TrimLeft();  str.TrimRight();
	  NewZbxt();
      strcpy(Zbxt_work->XtName,str);  //系统名称

      if (fgets(path,254,in)==NULL) break;
  	  str=path;	 str.TrimLeft();  str.TrimRight();
      strcpy(Zbxt_work->Xtmode,str);  //系统方式

      if (fgets(path,254,in)==NULL) break;
      Zbxt_work->Ra=atof(path);
      if (fgets(path,254,in)==NULL) break;
      po=strtok(path," "); Zbxt_work->Bl=atof(po);
      po=strtok(NULL," "); Zbxt_work->Bl_num=atoi(po);
	  Zbxt_work->Zyzwx=Zbxt_work->Tyg=Zbxt_work->Xp=0;
	  Zbxt_work->Yp=500000;
      if (strcmp(Zbxt_work->Xtmode,"系统保留")!=0)
	  {
       if (fgets(path,254,in)==NULL) break;
       Zbxt_work->Zyzwx=atof(path);
       if (fgets(path,254,in)==NULL) break;
       Zbxt_work->Tyg=atof(path);
       if (fgets(path,254,in)==NULL) break;
       Zbxt_work->Xp=atof(path);
       if (fgets(path,254,in)==NULL) break;
       Zbxt_work->Yp=atof(path);
	  }
	}
	fclose(in);
    

 	return TRUE;
}

BOOL CGyBl::SaveZbxt()
{
	FILE *in;
    char   pathname[255];
   	strcpy(pathname,"zbxt.cfg");
 	 in=fopen(pathname,"w+");
     if (in==NULL) return FALSE;

	 Zbxt_work=Zbxt_head;
     while (Zbxt_work!=NULL)
	 {
      fprintf(in,"%s\n%s\n",Zbxt_work->XtName,Zbxt_work->Xtmode);
      fprintf(in,"%.0f\n",Zbxt_work->Ra);
      fprintf(in,"%.9f %d\n",Zbxt_work->Bl,Zbxt_work->Bl_num);
      if (strcmp(Zbxt_work->Xtmode,"系统保留")!=0)
	  {
       fprintf(in,"%.f\n",Zbxt_work->Zyzwx);
       fprintf(in,"%.f\n",Zbxt_work->Tyg);
       fprintf(in,"%.f\n",Zbxt_work->Xp);
       fprintf(in,"%.f\n",Zbxt_work->Yp);
	  }

    Zbxt_work=Zbxt_work->next;
   }
	 fclose(in);
	return TRUE;
}

BOOL CGyBl::DeleteZbxt()
{
   while (Zbxt_head!=NULL)
   {
      Zbxt_work=Zbxt_head->next; 
      delete Zbxt_head;
      Zbxt_head=Zbxt_work;
   }
   Zbxt_head=NULL;
   return TRUE;
}

BOOL CGyBl::NewZbxt()
{
  Zbxt_work=new _ZBXT;
  if (Zbxt_work==NULL) return FALSE;
  Zbxt_work->next=NULL;
  if (Zbxt_head==NULL)  Zbxt_head=Zbxt_work;
    else 
	{   Zbxt_tail=Zbxt_head;
	    while (Zbxt_tail->next!=NULL) Zbxt_tail=Zbxt_tail->next;
		Zbxt_tail->next=Zbxt_work;
	}
  return TRUE;
}



double CGyBl::deg(double a2)
{
   double  d;
   double  du,fen,miao;
   double  nn;
   if (a2<0) { nn=-1;a2=-a2;} else nn=1;
   du=floor(a2);   fen=floor((a2-du)*100);
   miao=((a2-du)*100-fen)*100;
   if (miao>=60) { fen++;miao=0;
		    if (fen>=60)   { fen=0;du++;}
		   }
   d=du+fen/60+miao/3600;
   d=d*nn;
   return(d);
}

double CGyBl::dfm(double a2)
{
   double  d;
   double  du,fen,miao;
   double  nn;
   if (a2<0) { nn=-1;a2=-a2;} else nn=1;
   du=floor(a2);
   fen=floor((a2-du)*60);
   miao=((a2-du)*60-fen)*60;
    if (miao>=60) { fen++;miao=0;
		    if (fen>=60)  { fen=0;du++;}
		   }
   d=du+fen/100+miao/10000;
   d=d*nn;
   return(d);
}

double CGyBl::calL0(double l)
{

/*
 double d0,l0;
 d0=l*180.0/PI;
 double xxx;
 l0=0;
 //中央子午线计算
 if (strcmp(WorkSpaceData.Zbxt.Xtmode,"自定义坐标系统")==0)
 {
    l0=WorkSpaceData.Zbxt.Zyzwx;
	l0=deg(l0);
	xxx=WorkSpaceData.Zbxt.Yp;
 }
 else
 {  xxx=500000.000;
    { int tt;
	  // 3度 6度计算
	  if (WorkSpaceData.Fdd==0)
      		 l0= (int)floor((d0+1.5)/3)*3;
        else
		{
		     tt=(int)floor((d0+6)/6);
		     l0=6*tt-3;
        }			
    }
 }
 l0=l0 *PI/180;
// vSetSystem(WorkSpaceData.Zbxt.Ra,1/WorkSpaceData.Zbxt.Bl,0,l0,0,xxx,1);

 return l0;
 */
	return 0;
}


⌨️ 快捷键说明

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