#include #include #include #include #include "isea.h" #include "hex.h" void die(char *s) { fprintf(stderr, "%s\n", s); exit(EXIT_FAILURE); } static int verbose = 0; static int precision = 10; int main(int ac, char *av[]) { struct isea_dgg dgg; struct isea_geo in; struct isea_pt out, coord; int tri,calctri; int graticule = 0; int quad = 0; char line[1024]; char *rest, *nl; isea_grid_init(&dgg); dgg.output = ISEA_PLANE; dgg.radius = 0.8301572857837594396028083; options(ac, av, &dgg); if (0) { printf("isea lat = %lf, lon = %lf, az = %lf\n", dgg.o_lat * 180.0 / M_PI, dgg.o_lon * 180.0 / M_PI, dgg.o_az * 180.0 / M_PI); } while (fgets(line, sizeof line, stdin)) { if (line[0] == '#') { continue; } if (!strncmp(line, "ENDPOLY", 7)) { printf("%s", line); continue; } in.lon = strtod(line, &rest); in.lat = strtod(rest, &rest); nl = strchr(rest, '\n'); if (nl) *nl = 0; in.lon *= M_PI / 180.0; in.lat *= M_PI / 180.0; out = isea_forward(&dgg, &in); tri = dgg.triangle; quad = ((tri - 1) % 5) + ((tri - 1) / 10) * 5 + 1; coord = out; if (dgg.output == ISEA_PLANE) { calctri = isea_xy_triangle(&coord, dgg.output == ISEA_PLANE ? dgg.radius : 1.0); if (tri != calctri) { fprintf(stderr, "got %d (%f, %f), expected %d\n", calctri, out.x, out.y, tri); } } in.lon *= 180.0 / M_PI; in.lat *= 180.0 / M_PI; switch (dgg.output) { case ISEA_PLANE: printf("%d %.*f %.*f%s\n", tri, precision, out.x, precision, out.y, rest); break; case ISEA_PROJTRI: printf("%d %.*f %.*f%s\n", tri-1, precision, out.x, precision, out.y, rest); break; case ISEA_VERTEX2DD: printf("%d %d %.*f %.*f%s\n", quad, tri-1, precision, out.x, precision, out.y, rest); break; case ISEA_Q2DD: /* Same as above, we just don't print as much */ printf("%d %.*f %.*f%s\n", quad, precision, out.x, precision, out.y, rest); break; case ISEA_Q2DI: printf("%d %.0lf %.0lf%s\n", dgg.quad, coord.x, coord.y, rest); break; case ISEA_SEQNUM: quad = isea_ptdi(&dgg, tri, &out, &coord); printf("%d%s\n", isea_disn(&dgg, quad, &coord), rest); break; } fflush(stdout); } if (graticule) { } exit(EXIT_SUCCESS); }