예제 #1
0
//------------------------------------------------------------------------------
// dsElevation() -- format#1: convert string to elevation (to nearest foot) 
//------------------------------------------------------------------------------
float Record::dsElevation(const char* const p)
{
   if (p == 0) return 0.0f;
   if (*p == '\0') return 0.0f;

   if (*p == '-')
      return static_cast<float>(-dsAtofn(p+1, 4));
   else
      return static_cast<float>(dsAtofn(p, 5));
}
예제 #2
0
//------------------------------------------------------------------------------
// dsMagVariance() --  convert string to magnetic variation           
//------------------------------------------------------------------------------
float Record::dsMagVariance(const char* const p)
{
   double mv = 0.0;
   if (p != 0) {
      double d = dsAtofn(p+1, 3);
      double m = dsAtofn(p+4, 2);
      double f = dsAtofn(p+6, 1);
      double v = d + (m + f / 10.0f) / 60.0f;
      mv = ( (*p == 'E') ? v : -v );
   }
   return static_cast<float>(mv);
}
예제 #3
0
//------------------------------------------------------------------------------
// dsLongitude() --  convert string to longitude                      
//------------------------------------------------------------------------------
double Record::dsLongitude(const char* const p)
{
   double lon = 0.0;
   if (p != 0) {
      char   h = *p;
      double d = dsAtofn(p+1, 3);
      double m = dsAtofn(p+4, 2);
      double s = dsAtofn(p+6, 2);
      double f = dsAtofn(p+8, 2);
      double v = d + m / 60.0 + (s + f / 100.0) / 3600.0;
      lon = (h == 'E' ? v : -v);
   }
   return lon;
}
예제 #4
0
//------------------------------------------------------------------------------
// dsLatitude() -- convert string to latitude                          
//------------------------------------------------------------------------------
double Record::dsLatitude(const char* const p)
{
   double lat = 0.0f;
   if (p != 0) {
      char   h = *p;
      double d = dsAtofn(p+1, 2);
      double m = dsAtofn(p+3, 2);
      double s = dsAtofn(p+5, 2);
      double f = dsAtofn(p+7, 2);
      double v = d + m / 60.0 + (s + f / 100.0) / 3600.0;
      lat = (h == 'N' ? v : -v);
   }
   return lat;
}
예제 #5
0
// range: returns the value of the Range field.
inline float Navaid::range() const
{
   double rng = 0.0;
   const char* p = makePointer(NA_RANGE_POS);
   if (*p != 'U') {
      rng = dsAtofn(p, NA_RANGE_LEN);
   }
   return static_cast<float>(rng);
}
예제 #6
0
//------------------------------------------------------------------------------
// dsMagHeading() -- magnetic heading                                  
//------------------------------------------------------------------------------
float Record::dsMagHeading(const char* const p)
{
   char ct;
   double mh = 0.0;
   if (p != 0) {
      mh = dsAtofn(p,3);    // units
      ct = *(p+3);          // tenths
      if (ct != '/') mh += static_cast<float>(ct - '0')/10.0f;
   }
   return static_cast<float>(mh);
}
예제 #7
0
//------------------------------------------------------------------------------
// dsSlaveVariance() -- convert string to slave magnetic variation     
//------------------------------------------------------------------------------
float Record::dsSlaveVariance(const char* const p)
{
   double sv = 0.0;
   if (p != 0) {
      if (*p != ' ') {
         double v = dsAtofn(p+1, 3);
         sv = ( (*p == 'E') ? v : -v );
      }
   }
   return static_cast<float>(sv);
}
예제 #8
0
//------------------------------------------------------------------------------
// dsElevation1() -- format#2: convert string to elevation (to tenths  
// of feet)                                                            
//------------------------------------------------------------------------------
float Record::dsElevation1(const char* const p)
{
   double e, et;
   char ct;

   if (p == 0) return 0.0f;
   if (*p == '\0') return 0.0f;

   e = 0.0;
   if (*p == '-') e = dsAtofn(p+1, 4);
   else e = dsAtofn(p, 5);

   et = 0.0;
   ct = *(p+5);
   if (ct != ' ') et = ct - '0';

   if (*p == '-')
      return static_cast<float>(-(e + et/10.0));
   else 
      return static_cast<float>(e + et/10.0);
}
예제 #9
0
// power: returns the value of the Power field.
inline float Navaid::power() const
{
   const char* p = makePointer(NA_POWER_POS);
   double w = dsAtofn(p, NA_POWER_LEN);

   if (w != 0.0)
      return static_cast<float>(w);

   if (*p == 'U')
      return 2000.0f;

   return 50.0f;
}