//char *MapNo:图幅号
//int lon_deg:经度-度
//lon_min:经度-分
//lon_sec:经度-秒
//lat_deg:纬度-度
//lat_min:纬度-分
//lat_sec:纬度-秒
//long lscale:比例尺
bool Trans(char *MapNo,int lon_deg,lon_min,lon_sec,lat_deg,lat_min,lat_sec,long lscale)
{int ScaleID;
char buf[10];
char S[] = "ABCDEFGHIJKLMNOPQRSTUV"; // 1:1000000地形图图幅所在纬度带字符码
long Scale[] = {1000000,500000,250000,100000,50000,25000,10000,5000}; // 图幅比例尺
double df[] = {14400,7200,3600,1200,600,300,150,75}; // 图幅纬差,单位秒
double dr[] = {21600,10800,5400,1800,900,450,225,112.5}; // 图幅经差单位秒
long r=lon_deg*3600+lon_min*60+lon_sec; // 经度, 单位秒
long f=lat_deg*3600+lat_min*60+lat_sec; // 纬度单位秒
for(ScaleID=0;ScaleID<8;ScaleID++){
if(Scale[ScaleID]==lscale){
break;
}
}
if(ScaleID==8){
return false;
}
int a = f/(4*3600);
int b = r/(6*3600)+31;
int c = (int)(4*3600/df[ScaleID])-(int)((f%(4*3600))/df[ScaleID]);
int d = (int)((r%(6*3600))/dr[ScaleID])+1;
MapNo[0] = S[a];
strcpy(MapNo+1,itoa(b,buf,10));
if(ScaleID==0){
return true;
}
MapNo[3] = S[ScaleID];
itoa(c,buf,10);
if(c<10){
MapNo[4]=MapNo[5]='0';
strcpy(MapNo+6,buf);
}else if(c<100) {
MapNo[4]='0';
strcpy(MapNo+5,buf);}
else if(c<1000){
strcpy(MapNo+4,buf);
}else{
return false;
}
itoa(d,buf,10);
if(d<10){
MapNo[7]=MapNo[8]='0';
strcpy(MapNo+9,buf);
}else if(d<100) {
MapNo[7]='0';
strcpy(MapNo+8,buf);
}else if(d<1000){
strcpy(MapNo+7,buf);
}else{
return false;
}
MapNo[10] = '"0';
return true;
}