/* kleinmcl.c reads klein '.dat' files and makes the '.mcl' file to run 'makecol.c' */ #include #include "getfile.c" #include #define DP100M 0.0009009 #define DEG_RAD 0.01745329251 /* converts degrees to radians */ #define DEG_M 111120 /* converts degrees to meters -- 60 nmiles */ #define FILE_HEADER 5120 #define HEADER 32 #define DATA 404 #define TRAILER 4 #define NUMPTS 25 #define MAXHDR 100 #define PIXSIZE 0.5 int NumAvg=5,NumHdg=3; /* + or - points */ union intflo { long lnum; float fnum; }; struct r_header { double lat,lon,time; unsigned char mo,da,yr,hr,min,sec,tsec; int pass_num,line_num,course,prp,corr_alt,uncorr_alt,rec_size; }Hdr[MAXHDR]; unsigned char Buffer[1024],DBuff[1024]; struct br_header { double lat,lon; char mo,da,yr,hr,min,sec,tsec,status; }B; struct b_header { double maxlat,minlat,maxlon,minlon; double pixsize; long row,col,file_hdr,line_hdr,line_data,line_tlr; }C; FILE *FpHdr; double MaxLat,MinLat,MaxLon,MinLon,Row,Col; main(argc,argv) int argc; char *argv[]; { int i,i1,j,k; int numfiles; int firstfile=0; char ans; do { printf("\n\n 1 -- make lat lon ASCI file\n"); printf(" 2 -- make header files\n"); ans=getch(); if(ans=='1') { numfiles=load_names("kln*.dat"); sort_name(numfiles); for(i=firstfile;i0.0) dist=sqrt(dist); px=-dy/dist; py= dx/dist; heading=atan2(dx,dy); if(heading<0.0) heading+=360.0*DEG_RAD; /*printf( "%9.6lf %10.6lf %9.6lf %10.6lf %4.2lf %4.2lf %4.2lf %5.1lf %5.2lf %5.2lf\n", dat[i%NUMPTS].lat,dat[i%NUMPTS].lon, *dlat/dnum,*dlon/dnum,dy,dx,dist,heading/DEG_RAD,px,py);*/ B.lat=*dlat/dnum; B.lon=*dlon/dnum; B.mo=dat[(i)%NUMPTS].mo; B.da=dat[(i)%NUMPTS].da; B.yr=dat[(i)%NUMPTS].yr; B.hr=dat[(i)%NUMPTS].hr; B.min=dat[(i)%NUMPTS].min; B.sec=dat[(i)%NUMPTS].sec; B.tsec=dat[(i)%NUMPTS].tsec; /* fwrite((char *)&B,sizeof(struct br_header),1,FpHdr);*/ if(B.lat>MaxLat)MaxLat=B.lat; if(B.lon>MaxLon)MaxLon=B.lon; if(B.lat0) { if(getch()==27) { fclose(fpout); fpout=fopen(string,"wt"); exit(0); } } fread((char *)dbuff,sizeof(char),HEADER,fp); fread((char *)DBuff,sizeof(char),DATA+TRAILER,fp); decode_hdr(dbuff,&Hdr[0]); if(i==0) { lat1=Hdr[0].lat; lon1=Hdr[0].lon; fprintf(fpout,"%5d %10.6lf %11.6lf %2d %2d %2d %02d %02d %02d %1d\n", i+1,Hdr[0].lat,Hdr[0].lon,Hdr[0].mo, Hdr[0].da,Hdr[0].yr,Hdr[0].hr,Hdr[0].min, Hdr[0].sec,Hdr[0].tsec); } else { k=0; dist=(Hdr[0].lat-lat1)*(Hdr[0].lat-lat1)+ (Hdr[0].lon-lon1)*(Hdr[0].lon-lon1); if(dist>1.0) { for(k=1;k=MAXHDR-1) { printf("Too many bad points\n\n"); return(-1); } printf("Fixing %d bad points\n",k); printf("from %10.6f %11.6f to %10.6lf %11.6lf\n", lat1,lon1,Hdr[k].lat,Hdr[k].lon); fk=k+1; dlat=(Hdr[k].lat-lat1)/fk; dlon=(Hdr[k].lon-lon1)/fk; for(j=0;j0.0) dist=sqrt(dist); distsum+=dist; distnum+=1.0; if(dist>distmax) distmax=dist; if(distMaxLat)MaxLat=B.lat; if(B.lon>MaxLon)MaxLon=B.lon; if(B.latMaxLat)MaxLat=B.lat; if(B.lon>MaxLon)MaxLon=B.lon; if(B.lat0.0) dist=sqrt(dist); px=-dy/dist; py= dx/dist; heading=atan2(dx,dy); if(heading<0.0) heading+=360*DEG_RAD; /*printf( "%9.6f %10.6f %9.6lf %10.6lf %4.2lf %4.2lf %4.2lf %5.1lf %5.2lf %5.2lf\n", dat[i%NUMPTS].lat,dat[i%NUMPTS].lon, *dlat/dnum,*dlon/dnum,dy,dx,dist,heading/DEG_RAD,px,py);*/ B.lat=*dlat/dnum; B.lon=*dlon/dnum; B.mo=dat[(i)%NUMPTS].mo; B.da=dat[(i)%NUMPTS].da; B.yr=dat[(i)%NUMPTS].yr; B.hr=dat[(i)%NUMPTS].hr; B.min=dat[(i)%NUMPTS].min; B.sec=dat[(i)%NUMPTS].sec; B.tsec=dat[(i)%NUMPTS].tsec; fwrite((char *)&B,sizeof(struct br_header),1,FpHdr); if(B.lat>MaxLat)MaxLat=B.lat; if(B.lon>MaxLon)MaxLon=B.lon; if(B.latpass_num=dbuff[1]*256+dbuff[0]; dat->line_num=dbuff[3]*256+dbuff[2]; dat->course=dbuff[5]*256+dbuff[4]; dat->prp=dbuff[7]*256+dbuff[6]; dat->lat=lat; dat->lon=lon; dat->time=time; dat->yr=yr; dat->mo=mo; dat->da=da; dat->hr=hr; dat->min=min; dat->sec=sec; dat->tsec=tsec; } /************************************************************************** ** ** ** ************************************************************************* */ int dec2nec(a,n) long *a; int n; { long *w2; short i,j,z[2],y; w2=(long *)z; for(i=0;i