|
MeteoTools::GetSynopDataOfPoint
BOOL GetSynopDataOfPoint(int lon,int
lat, BMSDATA_SET* set, char *syntext)
Return Value
Nonzero if successful; otherwise 0.
Parameters
lon
longitude in minutes
lat
latitude in minutes
set
A pointer of a
BMSD_SYN structure that receive the synop data set.
syntext
A char* that receive the synop
station name
Remarks
Get an synop data set of a geographical
point.
It calculated all values, that between the grid would be.
Example
Note: the synop data set is very different to the
BMSDATA_SET
the
GetDataOfPoint
Expamle ist not the same.
//points for LoadString
#05000: Data from Point :
#05001: pressure :
#05002: temperature :
#05003: wind speed :
#05004: wind comes from :
#05005: relative humidity :
#05006: cloud couver :
#05007: sig height of waves :
#05008: waves come from :
#05009: precipitation :
#05010: Station :
//this ist installed long before - precalculated field of wind speed
int beaufort[256],knots[256];
double w;
for(int z=0; z<256; z++)
{
knots[z]=(int)((double)z*.48595); //0.25 * 1.9438 = .48595
w=(double)z*.25;
beaufort[z]=0;
if(w != 0.)
{
if(w >= 57.0) beaufort[z] = 17;
else if(w >= 51.0) beaufort[z] = 16;
else if(w >= 46.2) beaufort[z] = 15;
else if(w >= 41.5) beaufort[z] = 14;
else if(w >= 37.0) beaufort[z] = 13;
else if(w >= 32.7) beaufort[z] = 12;
else if(w >= 28.5) beaufort[z] = 11;
else if(w >= 24.5) beaufort[z] = 10;
else if(w >= 20.8) beaufort[z] = 9;
else if(w >= 17.2) beaufort[z] = 8;
else if(w >= 13.9) beaufort[z] = 7;
else if(w >= 10.8) beaufort[z] = 6;
else if(w >= 8.0) beaufort[z] = 5;
else if(w >= 5.5) beaufort[z] = 4;
else if(w >= 3.4) beaufort[z] = 3;
else if(w >= 1.6) beaufort[z] = 2;
else if(w >= 0.3) beaufort[z] = 1;
}
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Bonito counted from left/top to bottom/right
// all the transfomations see the refence point on the center of the screen
// the world cordinates system that Bonito use:
//
// in minutes = 180W to 180E --> -10800 to 10800
// 90N to 90S --> -5400 to 5400
void CDataView::ShowStation(float lon, float lat) //lon/lat in minutes
{
int x,y;
char c1,c2;
CString str,lab;
char buf[1024];
char synbuf[4096];
BMSD_SYN klickSet;
if(!GetSynopDataOfPoint((int)(lon),(int)lat,&klickSet, synbuf)) return;
lon=klickSet.lon; //this points to the really station location
lat=klickSet.lat; //this points to the really station location
if(lat < 0) {c1 = 'S'; lat = -lat;} else c1 = 'N';
if(lon < 0) {c2 = 'E'; lon = -lon;} else c2 = 'W';
if(lat > 5400.f) lat = 5400.f;
if(lon > 10800.f) lon = 10800.f;
y=else lat/60;
x=else lon/60;
lon=lon-((float)x*60.f);
lat=lat-((float)y*60.f);
LoadString(5000,lab);
str.Format("\n%s %2d°%d%c / %3d°%d%c\n",lab,y,(int)lat,c1,x,(int)lon,c2);
LoadString(5010,lab);
sprintf(buf,"%s %s\n\n",lab,klickSet.station.Station);
str+=buf;
LoadString(5001,lab);
sprintf(buf,"%s %.1f hPa\n",lab,(float)(klickSet.data.prmsl+9000)/10.f);
str+=buf;
LoadString(5002,lab);
sprintf(buf,"%s %.1f °C\n",lab,(float)klickSet.data.temp/10.f); str+=buf;
if(klickSet.data.wind)
{
LoadString(5003,lab);
BYTE z=(BYTE)(((float)klickSet.data.wind/2.5f+.5f));
sprintf(buf,"%s %d = %.1f m/s = %d knots\n",lab
,beaufort[z] //precalculated field of beaufort values
,(float)klickSet.data.wind/10.f //calculate m/s
,knots[z]); str+=buf; //precalculated field of knots values
}
if(klickSet.data.wdir<3600)
{
LoadString(5004,lab);
sprintf(buf,"%s %.0f°\n",lab,(float)klickSet.data.wdir/10.f); str+=buf;
}
if(klickSet.data.rh)
{
LoadString(5005,lab);
sprintf(buf,"%s %d %%\n",lab,(int)klickSet.data.rh); str+=buf;
}
if(klickSet.data.btcdc>0 && klickSet.data.btcdc<120)
{
LoadString(5006,lab);
sprintf(buf,"%s %d %%\n",lab,(int)klickSet.data.btcdc); str+=buf;
}
if(klickSet.data.acpt)
{
LoadString(5009,lab);
sprintf(buf,"%s %.1f mm/h\n",lab,(float)klickSet.data.acpt/10.f);
str+=buf;
}
if(klickSet.data.htsgw||klickSet.data.wvdir)
{
LoadString(5007,lab);
sprintf(buf,"%s %.2f m\n",lab,(float)klickSet.data.htsgw/10.f); str+=buf;
LoadString(5008,lab);
sprintf(buf,"%s %.0f°\n",lab,(float)klickSet.data.wvdir/10.f); str+=buf;
}
//now let is appear
//MeteoKlickDlg dlg(str.GetBuffer(0), this);
//dlg.DoModal();
}
See Also GetDataOfPoint
|