|
MeteoTools::GetDataOfPoint
BOOL GetDataOfPoint(int lon,int
lat, BMSDATA_SET* set)
Return Value
Nonzero if successful; otherwise 0.
Parameters
lon
longitude in minutes
lat
latitude in minutes
set
A pointer of a
BMSDATA_SET structure that receive the data set.
Remarks
Get an meteo data set of a geographical
point.
It calculated all values, that between the grid would be.
Example
//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];
BMSDATA_SET klickSet;
if(!GetDataOfPoint((int)(lon),(int)lat,&klickSet)) return;
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=(int)lat/60;
x=(int)lon/60;
lon=lon-((float)x*60.f);
lat=lat-((float)y*60.f);
LoadString(5000,lab);
str.Format("\n%s %2d°%06.3f%c / %3d°%06.3f%c\n\n",lab,y,lat,c1,x,lon,c2);
LoadString(5001,lab);
sprintf(buf,"%s %.1f hPa\n",lab,(float)(klickSet.prmsl+9000)/10.f);
str+=buf;
LoadString(5002,lab);
sprintf(buf,"%s %.1f °C\n",lab,(float)klickSet.temp/10.f); str+=buf;
if(klickSet.wind)
{
LoadString(5003,lab);
BYTE z=(BYTE)(((float)klickSet.wind/2.5f+.5f));
sprintf(buf,"%s %d = %.1f m/s = %d knots\n",lab
,beaufort[z] //precalculated field of beaufort values
,(float)klickSet.wind/10.f //calculate m/s
,knots[z]); //precalculated field of knots values
str+=buf;
}
if(klickSet.wdir<3600)
{
LoadString(5004,lab);
sprintf(buf,"%s %.0f°\n",lab,(float)klickSet.wdir/10.f); str+=buf;
}
if(klickSet.rh)
{
LoadString(5005,lab);
sprintf(buf,"%s %d %%\n",lab,(int)klickSet.rh); str+=buf;
}
if(klickSet.btcdc>0 && klickSet.btcdc<120)
{
LoadString(5006,lab);
sprintf(buf,"%s %d %%\n",lab,(int)klickSet.btcdc); str+=buf;
}
if(klickSet.acpt)
{
LoadString(5009,lab);
sprintf(buf,"%s %.1f mm/h\n",lab,(float)klickSet.acpt/10.f);
str+=buf;
}
if(klickSet.htsgw||klickSet.wvdir)
{
LoadString(5007,lab);
sprintf(buf,"%s %.2f m\n",lab,(float)klickSet.htsgw/10.f); str+=buf;
LoadString(5008,lab);
sprintf(buf,"%s %.0f°\n",lab,(float)klickSet.wvdir/10.f); str+=buf;
}
//now let is appear
//MeteoKlickDlg dlg(str.GetBuffer(0), this);
//dlg.DoModal();
}
See Also GetSynopDataOfPoint
|