Ejemplo n.º 1
0
void CSgctpUtil::dumpGPX( const CData& _roData )
{
  double __fdValue1, __fdValue2;
  if( !CData::isDefined( __fdValue1 = _roData.getLatitude() )
      || !CData::isDefined( __fdValue2 = _roData.getLongitude() ) )
    return;
  *poOutputStream << "<trkpt lat=\"" << (boost::format("%.7f")%__fdValue1).str()
                  << "\" lon=\"" << (boost::format("%.7f")%__fdValue2).str() << "\">" << endl;
  if( CData::isDefined( __fdValue1 = _roData.getElevation() ) )
    *poOutputStream << "<ele>" << (boost::format("%.1f")%__fdValue1).str() << "</ele>" << endl;
  if( CData::isDefined( __fdValue1 = _roData.getTime() ) )
  {
    if( fdEpochReference >= 0 )
      __fdValue1 = CData::toEpoch( __fdValue1, fdEpochReference );
    char __pcIso8601[24];
    CData::toIso8601( __pcIso8601, __fdValue1 );
    *poOutputStream << "<time>" << __pcIso8601 << "</time>" << endl;
  }
  if( bExtendedContent )
  {
    if( CData::isDefined( __fdValue1 = _roData.getLongitudeError() )
        && CData::isDefined( __fdValue2 = _roData.getLatitudeError() ) )
    {
      double __fdDopX = __fdValue1 / H_UERE;
      double __fdDopY = __fdValue2 / H_UERE;
      double __fdDopH = sqrt( __fdDopX*__fdDopX + __fdDopY*__fdDopY );
      *poOutputStream << "<hdop>" << (boost::format("%.1f")%__fdDopH).str() << "</hdop>" << endl;
      double __fdDopZ = 0;
      if( CData::isDefined( __fdValue1 = _roData.getElevationError() ) )
      {
        __fdDopZ = __fdValue1 / V_UERE;
        *poOutputStream << "<vdop>" << (boost::format("%.1f")%__fdDopZ).str() << "</vdop>" << endl;
      }
      double __fdDopP = sqrt( __fdDopX*__fdDopX
                              + __fdDopY*__fdDopY
                              + __fdDopZ*__fdDopZ );
      *poOutputStream << "<pdop>" << (boost::format("%.1f")%__fdDopP).str() << "</pdop>" << endl;
    }
  }
  *poOutputStream << "</trkpt>" << endl;
}