📄 survey.cpp
字号:
{
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 + -