//#include "func2.h" #include "func.h" void disp_help() { cout << "shc2xyz - v0.1 calculated spherical harmonic coefficients to table data" << endl << "Author: zhangyi.cugwuhan@gmail.com" << endl << endl << "usage: shc2xyz -t -r///[/] -i/ -d -f/// [-p] [-s/] [-g/] [-n] [-c,,,] [-z[+d,,]] [-h] > out-file" << endl << "-t\tinput spherical harmonic coefficients, four columns are needed at least" << endl << "-r\tcalculation range" << endl << "-i\tcalculation intervals" << endl << "-d\tcalculation types, \n\tt for topography (default)\n\td for gravity disturbance\n\tg for gravity anomaly and\n\tp for geo-potential\n\tr for radial gravity gradient" << endl << "-s\treference system" << endl << "-p\tinterpolating locations indicated by a input file, every line of the file has a longitudinal and a latitudinal value" << endl << "-g\tGM and R parameters for gravitational data's calculation" << endl << "-n\tnormalized sum of associated Legendre functions\n\tm for mathematic normalization which equal 1\n\tg for geodetic normalization which equal 4*pi (default)" << endl << "-f\tstart and end orders and degrees used for calculation" << endl << "-c\tselect data columns of the input table data. the default is 0,1,2,3" << endl << "-z\tprovide a input file for observations' altitudes. use +d to select input data columns, the default is 0,1,2" << endl << "-h\tshow this info" << endl; } int main(int argc, char* argv[]) { char infilename[1024] = "NULL"; char interfilename[1024] = "NULL"; char range[1024] = "NULL"; char interval[1024] = "NULL"; char type[1024] = "t"; char referSystem[1024] = "NULL"; char coffPara[1024] = "NULL"; char columns[1024] = "0,1,2,3"; char gravPara[1024] = "NULL"; char norType[1024] = "g"; char altiFile[1024] = "NULL"; opterr = 0; //内置参数 若不为0则会在发生遭遇错误时输出一条信息到屏幕 int curr; /*循环拾取参数 最后一个参数为-1 需要变量的参数后跟一个冒号 可有可无参数跟两个冒号*/ while((curr = getopt(argc,argv,"ht:r:i:s:f:c:d:g:n:p:z:")) != -1) { /*匹配命令*/ switch (curr) { case 'h': //显示帮助信息 disp_help(); break; case 't': if (1!=sscanf(optarg,"%s",infilename)) { cout << "error ==> wrong format of " << optarg << endl; } break; case 'r': if (1!=sscanf(optarg,"%s",range)) { cout << "error ==> wrong format of " << optarg << endl; } break; case 'i': if (1!=sscanf(optarg,"%s",interval)) { cout << "error ==> wrong format of " << optarg << endl; } break; case 'd': if (1!=sscanf(optarg,"%s",type)) { cout << "error ==> wrong format of " << optarg << endl; } break; case 'p': if (1!=sscanf(optarg,"%s",interfilename)) { cout << "error ==> wrong format of " << optarg << endl; } break; case 's': if (1!=sscanf(optarg,"%s",referSystem)) { cout << "error ==> wrong format of " << optarg << endl; } break; case 'g': if (1!=sscanf(optarg,"%s",gravPara)) { cout << "error ==> wrong format of " << optarg << endl; } break; case 'n': if (1!=sscanf(optarg,"%s",norType)) { cout << "error ==> wrong format of " << optarg << endl; } break; case 'f': if (1!=sscanf(optarg,"%s",coffPara)) { cout << "error ==> wrong format of " << optarg << endl; } break; case 'c': if (1!=sscanf(optarg,"%s",columns)) { cout << "error ==> wrong format of " << optarg << endl; } break; case 'z': if (1!=sscanf(optarg,"%s",altiFile)) { cout << "error ==> wrong format of " << optarg << endl; } break; case '?': //处理未定义或错误参数 if (optopt == 't' || optopt == 'r' || optopt == 'i' || optopt == 's' || optopt == 'f' || optopt == 'c' || optopt == 'p' || optopt == 'z') { fprintf (stderr, "Option -%c requires an argument.\n", optopt); return -1; } else if (isprint(optopt)) { fprintf (stderr, "Unknown option `-%c'.\n", optopt); return -1; } else { fprintf (stderr,"Unknown option character `\\x%x'.\n",optopt); return -1; } break; default: abort(); } } sph2xyz sx; //读入球谐系数文件 if(sx.readSHC(infilename,coffPara,columns)) return 0; //初始化观测点位置 if(sx.initObs(range,interval,referSystem)) return 0; //重定位观测点高程 if(sx.relocateAltitude(altiFile)) return 0; //初始化矩阵 sx.initMatrix(type,gravPara,norType,altiFile); //计算 if (!strcmp(altiFile,"NULL")) { sx.calSolution(); } else sx.calSolution2(type); //输出 sx.outObs(interfilename); return 0; }