#include #include #define MPF (0.3048) #define RAD (3.141592654/180.0) #define NREAD 200 #define NOB 100 #define NCOORD 1000 #define NBENCH 40 #define FLAGCHAR 8 char str[120], lastob[FLAGCHAR]="", tempfl[FLAGCHAR]=""; struct readstruc { char flag[FLAGCHAR]; float azim; float vert; float slope; float rx; float ry; float rz; } ; struct coordstruc { char flag[FLAGCHAR]; float x; float y; float z; float dx; float dy; float dz; } bench[NBENCH], coord[NCOORD]; struct obstruc { char ob[FLAGCHAR]; float x0; float y0; float z0; float azim0; int nread; struct readstruc read[NREAD]; } obs[NOB]; main() { int iob, tob, iread, ibench, icoord, ncoord, coflg, nbench, nob; float azmin, azsec, vertmin, vertsec, horiz, temp; float sx, sx2, sy, sy2, sxy, r, m, b; float westx, westy; ncoord = nbench = nob = 0; for (iob=0; iob= NOB) { fprintf(stderr, "surv: max. no. OBs = %d exceeded, ignoring further data\n", NOB); break; } sscanf(str+0, "%s", lastob); nob++; iob++; iread = 0; } else if (obs[iob].nread >= NREAD) { fprintf(stderr, "surv: max. no. flags per OB = %d exceeded for OB = %s, skipping rest of OB\n", NREAD, lastob); continue; } sscanf(str, "%s %s %f %f %f %f %f %f %f", obs[iob].ob, obs[iob].read[iread].flag, &obs[iob].read[iread].azim, &azmin, &azsec, &obs[iob].read[iread].vert, &vertmin, &vertsec, &obs[iob].read[iread].slope); if (obs[iob].read[iread].slope != 0.0) { azmin += azsec/60.0; obs[iob].read[iread].azim += azmin/60.0; vertmin += vertsec/60.0; obs[iob].read[iread].vert += vertmin/60.0; obs[iob].read[iread].slope *= MPF; horiz = obs[iob].read[iread].slope * sin(RAD*(double)(obs[iob].read[iread].vert)); obs[iob].read[iread].rx = horiz * sin(RAD*(double)(obs[iob].read[iread].azim)); obs[iob].read[iread].ry = horiz * cos(RAD*(double)(obs[iob].read[iread].azim)); obs[iob].read[iread].rz = obs[iob].read[iread].slope * cos(RAD*(double)(obs[iob].read[iread].vert)); } else { obs[iob].read[iread].azim = 0.0; obs[iob].read[iread].vert = 0.0; obs[iob].read[iread].rx = 0.0; obs[iob].read[iread].ry = 0.0; obs[iob].read[iread].rz = 0.0; } obs[iob].nread++; iread++; } } /* for (iob=0; iob 0; tob--) connect(iob, tob-1); for (tob=iob; tob < nob-1; tob++) connect(iob, tob+1); } ncoord = 0; for (iob=0; iob= NCOORD) { fprintf(stderr, "surv: ncoord > max=%d, ignoring further data\n", NCOORD); break; } strcpy(coord[ncoord].flag, obs[iob].read[iread].flag); coord[ncoord].x = obs[iob].read[iread].rx + obs[iob].x0; coord[ncoord].y = obs[iob].read[iread].ry + obs[iob].y0; coord[ncoord].z = obs[iob].read[iread].rz + obs[iob].z0; coord[ncoord].dx = 0.0; coord[ncoord].dy = 0.0; coord[ncoord].dz = 0.0; ncoord++; } else { temp = obs[iob].read[iread].rx + obs[iob].x0 - coord[icoord].x; temp = temp<0 ? -temp : temp; if (coord[icoord].dx < temp) coord[icoord].dx = temp; temp = obs[iob].read[iread].ry + obs[iob].y0 - coord[icoord].y; temp = temp<0 ? -temp : temp; if (coord[icoord].dy < temp) coord[icoord].dy = temp; temp = obs[iob].read[iread].rz + obs[iob].z0 - coord[icoord].z; temp = temp<0 ? -temp : temp; if (coord[icoord].dz < temp) coord[icoord].dz = temp; } } printf("Resolved Station Coordinates, meters\n"); printf(" UTM-E (x) UTM-N (y) Elev-z dx dy dz Station\n"); printf("------------------------------------------------------\n"); for (iob=0; iob 1) { } */ return(nlap); }