Daily_QC
plot_tstations.c
Go to the documentation of this file.
1 
2 #include "prototypes_new.h"
3 
4 
5 void plot_tstations(Drawable pix,int type,int h,int display_flag)
6 
7 {
8 extern struct station tstation[1000];
9 extern int elevation_filter_value;
10 extern struct ts ts[20];
11 extern int tsmax;
12 extern int find_station_flag;
13 extern struct tdata tdata[10];
14 extern struct dval dval;
15 extern int npoint[2],zoom;
16 extern GC gc;
17 extern unsigned long qmap[16];
18 extern Widget drawing_area;
19 extern Display *display;
20 extern Font font[10];
21 extern XFontStruct *info_font[10];
22 extern int max_tstations;
23 extern long amap[16];
24 extern int pcpn_time,pcpn_day;
25 extern int pcpn_time_step;
26 int typemax=9;
27 extern int dflag[10];
28 extern int qflag[10];
29 char *typename[10];
30 int i,xc,yc,text_width,length,m;
31 int x1,y1,xadd,yadd,MY=10;
32 float xrat,yrat,mult,dmult,cmult;
33 long xmin,xmax,ymin,ymax;
34 signed long xcen,ycen,lint1,lint2;
35 Dimension width,height;
36 Arg args[10];
37 signed long XSIZE,YSIZE;
38 extern struct display_set display_set[4];
39 long r,s;
40 float conv=.0174;
41 float lat,lon;
42 char tbuf[100],mbuf[100];
43 int yheight;
44 int time_pos;
45 extern int funct[];
46 int mm;
47 
48 typename[0]="Verified";
49 typename[1]="Screened";
50 typename[2]="Time Distributed";
51 typename[3]="Manual";
52 typename[4]="Questionable";
53 typename[5]="Partial";
54 typename[6]="Calculated";
55 typename[7]="Bad";
56 typename[8]="Missing";
57 
58 if(pcpn_time_step==1)
59  time_pos=4;
60 
61 else if(pcpn_time_step==2)
62  time_pos=5;
63 
64 else
65 
66  time_pos=pcpn_time;
67 
68 XSetFont(display,gc,font[4]);
69 
70 yheight=info_font[4]->ascent;
71 
72 if(type==0)
73  return;
74 
75 XtSetArg(args[0],XtNwidth,&width);
76 XtSetArg(args[1],XtNheight,&height);
77 XtGetValues(drawing_area,args,2);
78 
79 XSIZE=(long)width*10L;
80 YSIZE=(long)height*10L;
81 
82 xrat=(float)XSIZE/(float)12800;
83 yrat=(float)YSIZE/(float)9600;
84 
85 if(xrat < yrat)
86  mult=xrat;
87 
88 else
89  mult=yrat;
90 
98 
99 lint1=(long)npoint[0]*(long)MY;
100 lint2=(long)npoint[1]*(long)MY;
101 
102 cmult=mult*dmult;
103 
104 for(i=0;i<max_tstations;i++) {
105 
106  lat=tstation[i].lat;
107  lon=tstation[i].lon;
108 
109  r=dval.a * cos(lat*conv)/(1+sin(lat*conv))
110  * cos((lon-dval.lo-90)*conv) + dval.xo +.5;
111 
112  s=dval.a * cos(lat*conv)/(1+sin(lat*conv))
113  * sin((lon-dval.lo-90)*conv) + dval.yo + .5;
114 
115  if(zoom==1) {
116 
117  x1=(xmin+(float)r * cmult)/MY;
118  y1=(ymin+(float)s * cmult)/MY;
119 
120  }
121 
122  else {
123 
124  x1=(((xmin+(float)r*cmult)-lint1)*zoom+xcen)/MY;
125  y1=(((ymin+(float)s*cmult)-lint2)*zoom+ycen)/MY;
126 
127  }
128 
129  XSetForeground(display,gc,qmap[15]);
130 
131  if(tstation[i].elev > 0 && tstation[i].elev < elevation_filter_value)
132  continue;
133 
134  for(m=0;m<tsmax;m++) {
135 
136  if(strncmp(&tstation[i].parm[3],ts[m].abr,2)==0 && dflag[m+1] == 1)
137  break;
138 
139  }
140 
141  if(m==tsmax)
142  continue;
143 
144  for(m=0;m<9;m++) {
145 
146  if(m==tdata[pcpn_day].stn[i].tlevel2[time_pos].qual &&
147  qflag[m]==1)
148  break;
149 
150  }
151 
152  if(m==9 && (type==4 || type==5))
153  continue;
154 
155 /* locate station in data stream */
156 
157  if((type==4 || type==5)
158  && tdata[pcpn_day].stn[i].tlevel2[time_pos].data == -99)
159  continue;
160 
161  XDrawLine(display,pix,gc,x1+1,y1+1,x1+1,y1-1);
162  XDrawLine(display,pix,gc,x1+1,y1-1,x1-1,y1-1);
163  XDrawLine(display,pix,gc,x1-1,y1-1,x1-1,y1+1);
164  XDrawLine(display,pix,gc,x1-1,y1+1,x1+1,y1-1);
165 
166  if(type==1)
167  strcpy(tbuf,tstation[i].hb5);
168 
169  else if(type==2) {
170 
171  strcpy(tbuf,&tstation[i].parm[4]);
172  tbuf[1]=0;
173 
174  }
175 
176  else if(type==3)
177  strcpy(tbuf,tstation[i].name);
178 
179  else if(type==4) {
180 
181  if(tdata[pcpn_day].used[time_pos]==0)
182  continue;
183 
184  sprintf(mbuf,"%d",tdata[pcpn_day].stn[i].tlevel2[time_pos].data);
185 
186  strcpy(tbuf,mbuf);
187 
188  }
189 
190  else if(type==5) {
191 
192  if(tstation[i].tip==0)
193  continue;
194 
195  strcpy(tbuf,tstation[i].hb5);
196 
197  }
198 
199  m=tdata[pcpn_day].stn[i].tlevel2[time_pos].qual;
200 
201  XSetForeground(display,gc,amap[m]);
202  length=strlen(tbuf);
203  text_width=XTextWidth(info_font[4],tbuf,length);
204 
205  xadd=tstation[i].xadd;
206  yadd=tstation[i].yadd;
207 
208  if(xadd < 0)
209  xc=x1 - text_width;
210 
211  else
212  xc=x1+3;
213 
214  if(yadd < 0)
215  yc=y1;
216 
217  else
218  yc=y1+yheight;
219 
220  XDrawString(display,pix,gc,xc,yc,tbuf,length);
221 
222  if(i==find_station_flag) {
223 
225 
226  XDrawLine(display,pix,gc,xc,yc,xc+text_width,yc);
227 
228  }
229 
230  }
231 
232 XSetFont(display,gc,font[4]);
233 
234 yheight=info_font[4]->ascent;
235 
236 i=0;
237 for(m=0;m<typemax;m++) {
238 
239  if(m==5 || m==6)
240  continue;
241 
242  i++;
243 
244  XSetForeground(display,gc,amap[funct[m]]);
245 
246  XDrawLine(display,pix,gc,15,ymin/10+(i+1)*yheight-
247  yheight/2,35,ymin/10+(i+1)*yheight-yheight/2);
248 
249  XSetForeground(display,gc,qmap[15]);
250  XDrawString(display,pix,gc,35,ymin/10+(i+1)*yheight,
251  typename[m],strlen(typename[m]));
252 
253  }
254 
255 
256 return;
257 
258 }
259 
260 
261 
262 
263 
264 
265 
266 
267 
268 
269 
270 
271 
272 
273 
274 
275 
276 
277 
278 
279 
280 
281 
282 
283 
284 
285 
286 
287 
288 
289 
290 
291 
292 
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308 
309 
310 
311 
312 
313 
314 
315 
316 
317 
318 
319 
320 
321 
322 
struct station tstation[1000]
Definition: daily_qc.c:197
int max_tstations
Definition: daily_qc.c:46
char s
Definition: build_list.c:122
int pcpn_time
Definition: daily_qc.c:248
XFontStruct * info_font[10]
Definition: daily_qc.c:230
int pcpn_time_step
Definition: daily_qc.c:238
int elevation_filter_value
Definition: daily_qc.c:120
int dflag[10]
Definition: daily_qc.c:293
int find_station_flag
Definition: daily_qc.c:165
unsigned long qmap[16]
Definition: daily_qc.c:225
int pcpn_day
Definition: daily_qc.c:248
GC gc
Definition: daily_qc.c:224
Display * display
Definition: daily_qc.c:228
Font font[10]
Definition: daily_qc.c:231
char type[5]
Definition: daily_qc.c:98
int qflag[10]
Definition: daily_qc.c:293
unsigned long amap[16]
Definition: daily_qc.c:226
int zoom
Definition: daily_qc.c:289
int tsmax
Definition: daily_qc.c:87
Widget drawing_area
Definition: daily_qc.c:214
int npoint[2]
Definition: daily_qc.c:289
int funct[]
Definition: daily_qc.c:158
int display_flag
Definition: daily_qc.c:268
char qual[10]
Definition: display_data.c:29
void plot_tstations(Drawable pix, int type, int h, int display_flag)
Definition: plot_tstations.c:5
float dmult[4]
Definition: misc.h:540
long xmin[4]
Definition: misc.h:534
long xmax[4]
Definition: misc.h:536
long ymax[4]
Definition: misc.h:537
long ymin[4]
Definition: misc.h:535
long ycen[4]
Definition: misc.h:539
long xcen[4]
Definition: misc.h:538
Definition: misc.h:397
double lo
Definition: misc.h:402
double a
Definition: misc.h:399
double yo
Definition: misc.h:401
double xo
Definition: misc.h:400
Definition: misc.h:232
float lat
Definition: misc.h:239
float lon
Definition: misc.h:240
int yadd
Definition: misc.h:246
int xadd
Definition: misc.h:245
Definition: misc.h:200
struct ttn stn[1000]
Definition: misc_new.h:452
char qual
Definition: misc_new.h:401
Definition: misc_new.h:35
struct tlevel * tlevel2
Definition: misc_new.h:411