#include #include #include void opnpinc(int argc, char *argv[]); int premsg(char *str); void gparma(char *str, int lnam, char *nam); int prompt(char *str); void gparmd2(char *str, double *dv1, double *dv2); void clspin(); int sgeoid(char *model); int hgeoid(double flat, double flon, double *hh); int main(int argc, char *argv[]) { int ido, kdo; double latd, latf, latm, lond, lonf, lonm, gi, gk, hg; char model[21], cns, cew; opnpinc(argc, argv); premsg("\nCalc. Geoid height\n"); premsg("Select Geoid model: "); premsg(" 0:NGA (within 20-50N, 120-150E)"); premsg(" or others [Enter NAME]"); gparma(" (NGA-world 10'x15' mesh may be selected by '.') ==> ", 20, model); if (strcmp(model,"0") == 0) strcpy(model, "NGA"); premsg(""); if (sgeoid(model) < 0) exit(1); premsg(" Enter Latitude and Longitude in WGS coord.\n\n"); while (1) { latd = 99999.; latf = 0.; lond = 0.; lonf = 0.; prompt(" Latitude ? [deg. min.]\n"); gparmd2(" < Hit RETURN to Quit > ==> ", &latd,&latf); if (latd == 99999.) { fputc('\n',stderr); break; } gparmd2(" Longitude ? [deg. min.] ==> ", &lond,&lonf); gi = latd*60.+latf; gk = lond*60.+lonf; if (gi < 0.) { cns = 'S'; gi = -gi; } else cns = 'N'; if (gk < 0.) { cew = 'W'; gk = -gk; } else cew = 'E'; ido = (int)(gi/60.); latm = gi - ido*60.; kdo = (int)(gk/60.); lonm = gk - kdo*60.; printf(" %3d: %6.3f\' %c %3d: %6.3f\' %c WGS :", ido, latm, cns, kdo, lonm, cew); if (hgeoid(latf, lonf, &hg) < 0) { printf(" unknown\n"); } else { printf(" hgeoid = %6.3f m\n\n", hg); } } clspin(); return(0); }