Mapper
plot_stations.c
Go to the documentation of this file.
1 
2 #include "prototypes.h"
3 
4 
5 void plot_stations(Drawable pix,int type,int h,int display_flag)
6 
7 {
8 extern int find_station_flag;
9 extern struct pdata pdata[10];
10 extern struct dval dval;
11 extern int npoint[2],zoom;
12 extern GC gc;
13 extern unsigned long qmap[16];
14 extern Widget drawing_area;
15 extern Display *display;
16 extern Font font[10];
17 extern XFontStruct *info_font[10];
18 extern struct station station[1500];
19 extern int max_stations;
20 extern int dflag[10];
21 extern int qflag[10];
22 extern long amap[16];
23 extern int pcpn_time,pcpn_day;
24 extern int pcpn_time_step;
25 int i,xc,yc,text_width,length,m;
26 int x1,y1,xadd,yadd,MY=10;
27 float xrat,yrat,mult,dmult,cmult;
28 long xmin,xmax,ymin,ymax;
29 signed long xcen,ycen,lint1,lint2;
30 Dimension width,height;
31 Arg args[10];
32 signed long XSIZE,YSIZE;
33 extern struct display_set display_set[4];
34 long r,s;
35 float conv=.0174;
36 float lat,lon;
37 char tbuf[100];
38 int yheight;
39 struct tm *gm;
40 int time_pos;
41 time_t ltime;
42 char ast[300];
43 
44 for(i=0;i<255;i++)
45  ast[i]=i;
46  ast[255]=0;
47 
48 if(pcpn_time_step==0)
49  time_pos=pcpn_time;
50 
51 else
52  time_pos=4;
53 
54 XSetFont(display,gc,font[4]);
55 
56 yheight=info_font[4]->ascent;
57  XDrawString(display,pix,gc,0,50,ast,255);
58 if(type==0)
59  return;
60 
61 XtSetArg(args[0],XtNwidth,&width);
62 XtSetArg(args[1],XtNheight,&height);
63 XtGetValues(drawing_area,args,2);
64 
65 XSIZE=(long)width*10L;
66 YSIZE=(long)height*10L;
67 
68 xrat=(float)XSIZE/(float)12800;
69 yrat=(float)YSIZE/(float)9600;
70 
71 if(xrat < yrat)
72  mult=xrat;
73 
74 else
75  mult=yrat;
76 
84 
85 lint1=(long)npoint[0]*(long)MY;
86 lint2=(long)npoint[1]*(long)MY;
87 
89 
90 for(i=0;i<max_stations;i++) {
91 
92  lat=station[i].lat;
93  lon=station[i].lon;
94 
95  r=dval.a * cos(lat*conv)/(1+sin(lat*conv))
96  * cos((lon-dval.lo-90)*conv) + dval.xo +.5;
97 
98  s=dval.a * cos(lat*conv)/(1+sin(lat*conv))
99  * sin((lon-dval.lo-90)*conv) + dval.yo + .5;
100 
101  if(zoom==1) {
102 
103  x1=(xmin+(float)r * cmult)/MY;
104  y1=(ymin+(float)s * cmult)/MY;
105 
106  }
107 
108  else {
109 
110  x1=(((xmin+(float)r*cmult)-lint1)*zoom+xcen)/MY;
111  y1=(((ymin+(float)s*cmult)-lint2)*zoom+ycen)/MY;
112 
113  }
114 
115  XSetForeground(display,gc,qmap[15]);
116 
117  if(strncmp(&station[i].parm[3],"RP",2)==0 && dflag[1] != 1)
118  continue;
119 
120  if(strncmp(&station[i].parm[3],"RM",2)==0 && dflag[2] != 1)
121  continue;
122 
123  if(strncmp(&station[i].parm[3],"RR",2)==0 && dflag[3] != 1)
124  continue;
125 
126  if(strncmp(&station[i].parm[3],"RG",2)==0 && dflag[4] != 1)
127  continue;
128 
129  if(strncmp(&station[i].parm[3],"RZ",2)==0 && dflag[5] != 1)
130  continue;
131 
132 /* locate station in data stream */
133 
134 
135  if(type==4 && pdata[pcpn_day].stn[i].frain[time_pos].data == -1)
136  continue;
137 
138  XDrawLine(display,pix,gc,x1+1,y1+1,x1+1,y1-1);
139  XDrawLine(display,pix,gc,x1+1,y1-1,x1-1,y1-1);
140  XDrawLine(display,pix,gc,x1-1,y1-1,x1-1,y1+1);
141  XDrawLine(display,pix,gc,x1-1,y1+1,x1+1,y1-1);
142 
143  if(type==1)
144  strcpy(tbuf,station[i].hb5);
145 
146  else if(type==2) {
147 
148  strcpy(tbuf,&station[i].parm[3]);
149  tbuf[2]=0;
150 
151  }
152 
153  else if(type==3)
154  strcpy(tbuf,station[i].name);
155 
156  else if(type==4) {
157 
158  if(pdata[pcpn_day].used[time_pos]==0)
159  continue;
160 
161  if(pdata[pcpn_day].stn[i].frain[time_pos].data == -2)
162  continue;
163 
164  for(m=0;m<5;m++) {
165 
166  if((m==pdata[pcpn_day].stn[i].frain[time_pos].qual &&
167  qflag[m]==1) ||
168  (m==(pdata[pcpn_day].stn[i].frain[time_pos].qual-100) &&
169  qflag[m]==1) )
170  break;
171 
172  }
173 
174  if(m==5)
175  continue;
176 
177  sprintf(tbuf,"%5.2f",pdata[pcpn_day].stn[i].frain[time_pos].data);
178  XSetForeground(display,gc,amap[m]);
179 
180  }
181 
182  length=strlen(tbuf);
183  text_width=XTextWidth(info_font[4],tbuf,length);
184 
185  xadd=station[i].xadd;
186  yadd=station[i].yadd;
187 
188  if(xadd < 0)
189  xc=x1 - text_width;
190 
191  else
192  xc=x1+3;
193 
194  if(yadd < 0)
195  yc=y1;
196 
197  else
198  yc=y1+yheight;
199 
200  XDrawString(display,pix,gc,xc,yc,tbuf,length);
201  if(i==find_station_flag) {
202 
203  find_station_flag=-1;
204 
205  XDrawLine(display,pix,gc,xc,yc,xc+text_width,yc);
206 
207  }
208 
209  }
210 
211 if(type==4) {
212 
213  if(pcpn_time < 2)
214  ltime=pdata[pcpn_day].data_time - 24L*3600L;
215 
216  else
217  ltime=pdata[pcpn_day].data_time;
218 
219  gm=gmtime(&ltime);
220 
221  sprintf(tbuf,"%02d-%02d-%02d",gm->tm_mon+1,gm->tm_mday,gm->tm_year);
222 
223  if(pcpn_time_step==0) {
224 
225  if(pcpn_time==3)
226  strcat(tbuf," 06z-12z");
227  else if(pcpn_time==2)
228  strcat(tbuf," 00z-06z");
229  else if(pcpn_time==1)
230  strcat(tbuf," 18z-00z");
231  else if(pcpn_time==0)
232  strcat(tbuf," 12z-18z");
233  }
234 
235  else
236  strcat(tbuf," ending at 12z");
237 
238  XSetForeground(display,gc,qmap[15]);
239  XSetBackground(display,gc,0);
240 
241  if(pdata[pcpn_day].used[time_pos]==3)
242  strcat(tbuf," Modified - Saved");
243 
244  else if(pdata[pcpn_day].used[time_pos]==2)
245  strcat(tbuf," Modified - Not Saved");
246 
247  else if(pdata[pcpn_day].used[time_pos]==1)
248  strcat(tbuf," Not Modified");
249 
250  else
251  strcat(tbuf," No Data");
252 
253  XDrawString(display,pix,gc,30,ymax/10-30,tbuf,strlen(tbuf));
254 
255 
256  }
257 
258 return;
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 
323 
char name[35][30]
Definition: borshef.c:10
static int i
XFontStruct * info_font[10]
Definition: mapper.c:195
Display * display
Definition: mapper.c:159
Font font[10]
Definition: mapper.c:161
char qual[10]
Definition: subdisplay.c:33
float mult
Definition: edit_stations.c:6
sprintf(fbuf,"/usr/mapper/nexrad/ngrid.%02d-%02d-%02d-%02d", year, month, day, hour)
double lat
Definition: mapp2h.h:41
double lon
Definition: mapp2h.h:41
int pcpn_time
Definition: mapper.c:83
int pcpn_time_step
Definition: mapper.c:75
int max_stations
Definition: mapper.c:64
int dflag[10]
Definition: mapper.c:106
unsigned long qmap[16]
Definition: mapper.c:116
int pcpn_day
Definition: mapper.c:83
unsigned long amap[16]
Definition: mapper.c:117
int display_flag
Definition: mapper.c:100
float xrat
long xmax
float yrat
long ymax
long lint1
GC gc
Definition: mapper.c:163
float cmult
signed long xcen
Dimension height
signed long ycen
Dimension width
int yheight
long lint2
Arg args[10]
long xmin
unsigned long XSIZE
int MY
int zoom
float dmult
Widget drawing_area
Definition: mapper.c:185
int npoint[2]
Definition: mapper.c:105
long ymin
unsigned long YSIZE
void plot_stations(Drawable pix, int type, int h, int display_flag)
Definition: plot_stations.c:5
float dmult[4]
Definition: misc.h:613
long xmin[4]
Definition: misc.h:607
long xmax[4]
Definition: misc.h:609
long ymax[4]
Definition: misc.h:610
long ymin[4]
Definition: misc.h:608
long ycen[4]
Definition: misc.h:612
long xcen[4]
Definition: misc.h:611
Definition: misc.h:470
double lo
Definition: misc.h:475
double a
Definition: misc.h:472
double yo
Definition: misc.h:474
double xo
Definition: misc.h:473
Definition: misc.h:280
time_t data_time
Definition: misc.h:282
Definition: misc.h:296
float lat
Definition: misc.h:303
float lon
Definition: misc.h:304
int yadd
Definition: misc.h:310
int xadd
Definition: misc.h:309
Definition: misc.h:264