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

📄 survey.cpp

📁 能够实现一些常用的地图转换
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		{
			KK = (int)(KK + 1) / 2;
            mm = 1;
		}
        else
		{
			KK = (int)KK / 2;
            mm = 2;
		}
        if((int)fmod((double)jj,(double)2)!=0)
		{
			jj = (int)(jj + 1) / 2;
            nn = 1;
		}
        else
		{
			jj = (int)jj / 2;
            nn = 2;
		}
		if(mm==1&&nn==1)        {stroldtf=stroldtf+"-A";}
		else if(mm==1&&nn==2)   {stroldtf=stroldtf+"-B";}
		else if(mm==2&&nn==1)   {stroldtf=stroldtf+"-C";}
		else if(mm==2&&nn==2)   {stroldtf=stroldtf+"-D";}      
		break;
	}
	SetBLC=BLC;
	return stroldtf;
}

CString CSurvey::GetBLCFormOldMap(CString stroldmap/*利用旧图号计算比例尺*/)
{
    CString StrCBLC;
    int i=0, J=0;
    for( i = 0 ;i<stroldmap.GetLength();i++) 
	{
		if( stroldmap.GetAt(i)==45 )  {J = J + 1;}
	}
	i=stroldmap.GetAt(stroldmap.GetLength()-1);

	switch(J)
	{
	case 1:
		StrCBLC = "1000000";
		break;
	case 2:
		if(i>=65&&i<=122)       {  StrCBLC = "500000"; }
		else if(i==41)  	    {  StrCBLC = "250000"; }
		else if(i>=48&&i<=57)	{  StrCBLC = "100000"; }
		break;
	case 3:
		if(i>=65&&i<=122)	{  StrCBLC = "50000"; }
		else if(i==41)		{  StrCBLC = "10000"; }
		break;
	case 4:
		if(i>=48&&i<=57)    	{  StrCBLC = "25000"; }
		else if(i>=65&&i<=122)	{  StrCBLC = "5000"; }
		break;
	default:
		StrCBLC = ""; 
		break;
	}
	return StrCBLC;
}

CString CSurvey::GetNewtfFormOldtf(CString stroldtf)   //利用旧图号计算新图号
{
	 CString strblc; CString strnewtf;	 CString strgd;	 CString straq;
	 int gjh; int addrow = 0; int addcol = 0; int gjhdm = 0;long len;long len1;
	 char c;
	 int addrow1,addcol1;
	 CString strlk;

	strblc=GetBLCFormOldMap(stroldtf);
	SetBLC=strblc;
	straq=stroldtf.Left(1);
	straq=straq+stroldtf.Mid(2,2);
	strnewtf=straq;
	switch(atol(strblc))
	{
	case 1000000:   //100万
		strnewtf=straq;
		break;
	case 500000:    //50万
        strnewtf = strnewtf + "B";
        switch(stroldtf.GetAt(stroldtf.GetLength()-1))
		{
		case 'A':
            strnewtf = strnewtf + "001001";
			break;
		case 'B':
            strnewtf = strnewtf + "001002";
			break;
		case 'C':
            strnewtf = strnewtf + "002001";
			break;
		case 'D':
            strnewtf = strnewtf + "002002";
			break;
		}		
		break;
	case 250000:    //25万
         strnewtf=strnewtf+"C";
		 gjh=atoi(stroldtf.Mid(6,stroldtf.GetLength()-7));
		 gjhdm=6;
         addrow = (int)gjh / gjhdm + 1;
         addcol = (int)fmod((double)gjh,(double)gjhdm);
         if( addcol == 0) {addrow = addrow - 1; addcol = gjhdm;}
         strgd.Format("%i",addrow);
		 len=strgd.GetLength();
		 if(len==1)  {strgd="00"+strgd;}
		 else if(len==2) {strgd="0"+strgd;}
		 strnewtf=strnewtf+strgd;
		 
		 strgd.Format("%i",addcol);
		 len=strgd.GetLength();
		 if(len==1)  {strgd="00"+strgd;}
		 else if(len==2) {strgd="0"+strgd;}
		 strnewtf=strnewtf+strgd;
		 break;
	case 100000:    //10万
		 strnewtf=strnewtf+"D";
		 gjhdm = 12;
		 gjh=atoi(stroldtf.Right(stroldtf.GetLength()-5));
         addrow = (int)gjh / gjhdm + 1;
         addcol = (int)fmod((double)gjh,(double)gjhdm);
         if( addcol == 0) {addrow = addrow - 1; addcol = gjhdm;}
         strgd.Format("%i",addrow);
		 len=strgd.GetLength();
		 if(len==1)  {strgd="00"+strgd;}
		 else if(len==2) {strgd="0"+strgd;}
		 strnewtf=strnewtf+strgd;

		 strgd.Format("%i",addcol);
		 len=strgd.GetLength();
		 if(len==1)  {strgd="00"+strgd;}
		 else if(len==2) {strgd="0"+strgd;}
		 strnewtf=strnewtf+strgd;

		 break;
	case 50000:     //5万
         strnewtf=strnewtf+"E";
		 gjhdm = 12;
		 len=stroldtf.Find("-",5);
		 gjh=atoi(stroldtf.Mid(5,len-5));
		 strlk=stroldtf.Right(1);
		 //strcmp(&c,stroldtf.Right(1));
		 //c=stroldtf.Right(1);
         addrow = (int)gjh / gjhdm + 1;
         addcol = (int)fmod((double)gjh,(double)gjhdm);
         if( addcol == 0) {addrow = addrow - 1; addcol = gjhdm;}
		 addrow = (addrow - 1) * 2;
		 addcol = (addcol - 1) * 2;
		 if(strlk==_T("A"))	     {addcol++; addrow++;}
		 else if(strlk==_T("B")) {addcol = addcol + 2; addrow = addrow + 1;}
		 else if(strlk==_T("C")) {addcol = addcol + 1; addrow = addrow + 2;}
		 else if(strlk==_T("D")) {addcol = addcol + 2;  addrow = addrow + 2;}
         strgd.Format("%i",addrow);
		 len=strgd.GetLength();
		 if(len==1)  {strgd="00"+strgd;}
		 else if(len==2) {strgd="0"+strgd;}
		 strnewtf=strnewtf+strgd;

		 strgd.Format("%i",addcol);
		 len=strgd.GetLength();
		 if(len==1)  {strgd="00"+strgd;}
		 else if(len==2) {strgd="0"+strgd;}
		 strnewtf=strnewtf+strgd;
		 break;
	case 25000:     //2.5万
         strnewtf=strnewtf+"F";
         gjhdm = 12;
		 len=stroldtf.Find("-",5);
		 gjh=atoi(stroldtf.Mid(5,len-5));
		 c=stroldtf.GetAt(len+1);
         addrow = (int)gjh / gjhdm + 1;
         addcol = (int)fmod((double)gjh,(double)gjhdm);
         if( addcol == 0) {addrow = addrow - 1; addcol = gjhdm;}
		 addrow = (addrow - 1) * 4;
		 addcol = (addcol - 1) * 4;
		 gjh=atoi(stroldtf.Right(1));
		 if(c=='A'&&gjh==1)      {addrow = addrow + 1; addcol = addcol + 1;}
		 else if(c=='A'&&gjh==2) {addrow = addrow + 1; addcol = addcol + 2;}
		 else if(c=='A'&&gjh==3) {addrow = addrow + 2; addcol = addcol + 1;}
		 else if(c=='A'&&gjh==4) {addrow = addrow + 2; addcol = addcol + 2;}
		 else if(c=='B'&&gjh==1) {addrow = addrow + 1; addcol = addcol + 3;}
		 else if(c=='B'&&gjh==2) {addrow = addrow + 1; addcol = addcol + 4;}
		 else if(c=='B'&&gjh==3) {addrow = addrow + 2; addcol = addcol + 3;}
		 else if(c=='B'&&gjh==4) {addrow = addrow + 2; addcol = addcol + 4;}
		 else if(c=='C'&&gjh==1) {addrow = addrow + 3; addcol = addcol + 1;}
		 else if(c=='C'&&gjh==2) {addrow = addrow + 3; addcol = addcol + 2;}
		 else if(c=='C'&&gjh==3) {addrow = addrow + 4; addcol = addcol + 1;}
		 else if(c=='C'&&gjh==4) {addrow = addrow + 4; addcol = addcol + 2;}
		 else if(c=='D'&&gjh==1) {addrow = addrow + 3; addcol = addcol + 3;}
		 else if(c=='D'&&gjh==2) {addrow = addrow + 3; addcol = addcol + 4;}
		 else if(c=='D'&&gjh==3) {addrow = addrow + 4; addcol = addcol + 3;}
		 else if(c=='D'&&gjh==4) {addrow = addrow + 4; addcol = addcol + 4;}
         strgd.Format("%i",addrow);
		 len=strgd.GetLength();
		 if(len==1)  {strgd="00"+strgd;}
		 else if(len==2) {strgd="0"+strgd;}
		 strnewtf=strnewtf+strgd;

		 strgd.Format("%i",addcol);
		 len=strgd.GetLength();
		 if(len==1)  {strgd="00"+strgd;}
		 else if(len==2) {strgd="0"+strgd;}
		 strnewtf=strnewtf+strgd;
  		 break;
	case 10000:     //1万
		 strnewtf=strnewtf+"G";
		 gjhdm = 12;
		 len=stroldtf.Find("-",5);
		 gjh=atoi(stroldtf.Mid(5,len-5));
         addrow = (int)gjh / gjhdm + 1;
         addcol = (int)fmod((double)gjh,(double)gjhdm);
         if( addcol == 0) {addrow = addrow - 1; addcol = gjhdm;}
         addrow = (addrow - 1) * 8;
		 addcol = (addcol - 1) * 8;
		 len=stroldtf.Find("(");
		 len1=stroldtf.Find(")");
		 gjh=atoi(stroldtf.Mid(len+1,len1-len-1));
		 addrow1 = (int)gjh / 8 + 1;
		 addcol1 = (int)fmod((double)gjh,(double)8);
		 if( addcol1 == 0 ) {addrow1 = addrow1 - 1; addcol1 = 8;}

         strgd.Format("%i",addrow + addrow1);
		 len=strgd.GetLength();
		 if(len==1)  {strgd="00"+strgd;}
		 else if(len==2) {strgd="0"+strgd;}
		 strnewtf=strnewtf+strgd;

		 strgd.Format("%i",addcol + addcol1);
		 len=strgd.GetLength();
		 if(len==1)  {strgd="00"+strgd;}
		 else if(len==2) {strgd="0"+strgd;}
		 strnewtf=strnewtf+strgd;
		 break;
	case 5000:      //5千
		 strnewtf=strnewtf+"H";
         gjhdm = 12;
		 len=stroldtf.Find("-",5);
		 gjh=atoi(stroldtf.Mid(5,len-5));
         addrow = (int)gjh / gjhdm + 1;
         addcol = (int)fmod((double)gjh,(double)gjhdm);
         if( addcol == 0) {addrow = addrow - 1; addcol = gjhdm;}
		 addrow = (addrow - 1) * 8; addcol = (addcol - 1) * 8;
		 len=stroldtf.Find("(");
		 len1=stroldtf.Find(")");
		 gjh=atoi(stroldtf.Mid(len+1,len1-len-1));
         addrow1 = (int)gjh / 8 + 1;
         addcol1 = (int)fmod((double)gjh,(double)8);
         if (addcol1 == 0) {addrow1 = addrow1 - 1; addcol1 = 8;}
         addrow = (addrow + addrow1 - 1) * 2; addcol = (addcol + addcol1 - 1) * 2;
		 c=stroldtf.GetAt(stroldtf.GetLength()-1);
		 if(c=='A') {addrow = addrow + 1; addcol = addcol + 1;}
		 if(c=='B') {addrow = addrow + 1; addcol = addcol + 2;}
		 if(c=='C') {addrow = addrow + 2; addcol = addcol + 1;}
		 if(c=='D') {addrow = addrow + 2; addcol = addcol + 2;}

         strgd.Format("%i",addrow);
		 len=strgd.GetLength();
		 if(len==1)       {strgd="00"+strgd;}
		 else if(len==2)  {strgd="0"+strgd;}
		 strnewtf=strnewtf+strgd;

		 strgd.Format("%i",addcol);
		 len=strgd.GetLength();
		 if(len==1)  {strgd="00"+strgd;}
		 else if(len==2) {strgd="0"+strgd;}
		 strnewtf=strnewtf+strgd;
		 break;
	}
	return strnewtf;
}

void CSurvey::SetStandardBLC(int BLC,double* db,double* df)
{
	switch(BLC)
	{
	case 1000000:
        *db = (double)4;  *df = (double)6;
		break;
	case 500000:
        *db = (double)2;  *df = (double)3;
		break;
	case 250000:
        *db = (double)1;  *df = Deg((double)1.3);
		break;
	case 100000:
        *db = Deg((double)0.2);    *df = Deg((double)0.3);
		break;
	case 50000:
        *db = Deg((double)0.1);    *df = Deg((double)0.15);
		break;
	case 25000:
        *db = Deg((double)0.05);   *df = Deg((double)0.073);
		break;
	case 10000:
        *db = Deg((double)0.023);  *df = Deg((double)0.0345);
		break;
	case 5000:
        *db = Deg((double)0.0115); *df = Deg((double)0.01525);
		break;
	}
}

void CSurvey::CalLngLat(CString strnewtf,double* f1,double* b1)  //根据新图号计算经纬度。
{
    CString swa,swb,swc,swd;
	char tmp;
	int wa,wb,wc,wd;
	//swa = strnewtf.Left(1); //UCase(Left(WNewTTh, 1))
	tmp=strnewtf.GetAt(0);
	swb = strnewtf.Mid(1,2);  //Mid(WNewTTh, 2, 2)
	swc = strnewtf.Mid(4,3);  //Mid(WNewTTh, 5, 3)
	swd = strnewtf.Mid(7,3);   //Mid(WNewTTh, 8, 3)
	wa=tmp-64;
	wb = atoi(swb);//Val(WBb1)
	wc = atoi(swc);//Val(WCc1)
	wd = atoi(swd);//Val(WDd1)
	*f1 = (wb - 31) * 6 + (wd - 1) * dthwith;
	*b1 = (wa - 1) * 4 + (4 / dthlengh - wc) * dthlengh;
	return;
}

void CSurvey::SetNewTfCalLL(CString strnewtf,double* Sb,double* Wl,double* Nb,double* El)
{
	double df,db;
	double blb,bll;
	int blc;
	blc=atoi(SetBLC);
	SetStandardBLC(blc,&db,&df);
	dthwith=df;
	dthlengh=db;
	CalLngLat(strnewtf,&blb,&bll);
	*Sb=atof(DMS(blb));
	*Wl=atof(DMS(bll));
	*Nb=atof(DMS(blb + df));
	*El=atof(DMS(bll + db));
}

//利用经纬度计算图号
CString CSurvey::GetThCalLat(double jd,double wd,int sel/*1为50万;2为25万*/)  //50万和25万
{
	CString stroldtf;  CString strgd;
	int m=0; int fs=0;	int ik=0;int ix,iy;	int J;
	double x1,x2,y1,y2;
	m=sel;
	fs=2*m;
	x1=4; y1=6;
	x2=(int)wd/4; x2=4*x2;
	y2=(int)jd/6; y2=6*y2;
	ik=(int)wd/4;
	stroldtf.Format("%c-%i",65+ik,31+(int)jd/6);
	x1=x1/fs;
	ix=(int)((wd-x2) / x1 +1);
	x2=x2+(ix-1)*x1;
    y1=y1/fs;
	iy=(int)((jd-y2) / y1 + 1);
	y2 = y2 + (iy - 1) * y1;
    J = fs*(fs-ix)+iy;
    if(m==2)
	{
		strgd.Format("%i",J);
		stroldtf=stroldtf+"-("+strgd+")";
	}
	else
	{
		strgd.Format("%c",64+J);
		stroldtf=stroldtf+"-"+strgd;
	}
	return stroldtf;
}

//利用经纬度计算图号
CString CSurvey::GetThCalLatEF(double jd,double wd,int sel/*4为5万;5为2.5万*/)  //5万和2.5万
{
	int ix=0,iy=0,J=0;
	CString stroldtf,strgd;
	int m=sel - 2;
	int fs[] = {0,12,2,2};
	double x1=0,x2=0,y1=0,y2=0;
	x1 = 4;  y1 = 6;
	x2 = (int)wd/4; x2 = 4*x2;
    y2 = (int)jd/6; y2 = 6*y2;
    int ik = (int)wd/4;
	stroldtf.Format("%c-%i",65+ik,31+(int)(jd/6));
    
	for(int k=1;k<=m;k++)
	{
		x1 = x1/fs[k];
		ix=(int)((wd-x2)/x1+1);
		x2=x2+(ix-1)*x1;

		y1 = y1/fs[k];
		iy = (int)((jd-y2)/y1 + 1);
		y2 = y2 + (iy-1)*y1;

		J=fs[k]*(fs[k]-ix) + iy;
		if(k==2)
		{
			strgd.Format("%c",64+J);
			stroldtf=stroldtf+"-"+strgd;
		}
		else
		{
			strgd.Format("%i",J);
			stroldtf=stroldtf+"-"+strgd;
		}
	}
    return stroldtf;
}

//利用经纬度计算图号
CString CSurvey::GetThCalLatADGH(double jd,double wd,int sel/*0 100w,3 10w,6 1w,7 5千*/)  //100万、10万、1万、5千
{
	int ix=0,iy=0,J=0;
	CString stroldtf,strgd;
	int fs[]={0,12,8,2,3};
	int m = sel;
	if(m>5)
	{		m=m-4;}
	else if(m>0)
	{       m=m-2;}
	double x1=0,x2=0,y1=0,y2=0;
	x1=4;  y1=6;
    x2 = (int)wd/4;  x2 = 4*x2;
    y2 = (int)jd/6;  y2 = 6*y2;
    int ik = (int)wd/4;
	stroldtf.Format("%c-%i",65+ik,31+(int)jd/6);
	for(int k = 1;k<=m;k++)
	{
		x1=x1/fs[k];
		ix=(int)((wd-x2)/x1 + 1);
		x2= x2 + (ix - 1)*x1;

		y1=y1/fs[k];
		iy=(int)((jd-y2)/y1 + 1);
		y2 = y2+(iy-1)*y1;

		J=fs[k]*(fs[k]-ix) + iy;
		if(k == 2)
		{
			strgd.Format("%i",J);
			stroldtf=stroldtf+"-("+strgd+")";
		}
		else if( k == 3)
		{
			strgd.Format("%c",96+J);
			stroldtf=stroldtf+"-"+strgd;
		}
		else
		{
			strgd.Format("%i",J);
			stroldtf=stroldtf+"-"+strgd;
		}
	}
    return stroldtf;
}

//  1  2  3
//  4  0  5
//  6  7  8       //根据图号计算八邻图号'返回旧图号'
BOOL CSurvey::GeteightThao(CString strtf/*根据新旧图号计算八邻图号*/)
{
	double Sb=0,Wl=0;
	double Nb=0,El=0;
	int sel=0;
	CString strport;
	CString m_newmap,m_oldmap;
	CString stroldtf,strnewtf;
	CString m_caltf;
	m_caltf=strtf;
	if(m_caltf.IsEmpty()) {return FALSE;}
	long lhf=m_caltf.Find("-");
	m_caltf.MakeUpper();
	if(lhf>0)
	{
		if(m_caltf.GetLength()>=3)
		{
			m_newmap=GetNewtfFormOldtf(m_caltf);
			m_oldmap=m_caltf;
			SetNewTfCalLL(m_newmap,&Sb,&Wl,&Nb,&El);
		}
	}
	else
	{

⌨️ 快捷键说明

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