
// lookup some unit ids
ENUM idUnitsFeet = pTrafficInfo->QueryUnitEnum("FEET");
ENUM idUnitsBool = pTrafficInfo->QueryUnitEnum("BOOL");
ENUM idUnitsDegrees = pTrafficInfo->QueryUnitEnum("DEGREES");
ENUM idUnitsKnots = pTrafficInfo->QueryUnitEnum("KNOTS");
ENUM idUnitsFPM = pTrafficInfo->QueryUnitEnum("FEET PER MINUTE");
5. Query for a list of the 100 aircraft nearest to the user within 10 nautical miles.
// query for the 100 nearest aircraft within 10 nautical miles of the user
const FLOAT64 C_QUERY_RADIUS_METERS = 10.0 * 1852.0; // in meters
const int C_MAX_NUM_AIRCRAFT = 100;
UINT32 aAircraftIds[C_MAX_NUM_AIRCRAFT];
UINT32 nAircraft = pTrafficInfo->QueryAircraftNearUser(C_QUERY_RADIUS_METERS,
C_MAX_NUM_AIRCRAFT, aAircraftIds);
6. Query each aircraft for the required variables. The query above will always
include the user aircraft. To skip the user aircraft, query for the value of the "IS
USER SIM" variable and ignore any aircraft with a non-zero value in the loop
below.
// query properties of each aircraft
for (UINT32 i = 0; i < nAircraft; i++)
{
UINT32 uAircraftId = aAircraftIds[i];
// get latitude in degrees
FLOAT64 dLatDeg = 0;
if (!pTrafficInfo->AircraftVarGetFloat(uAircraftId, idVarLatitude,
idUnitsDegrees, &dLatDeg))
continue;
// get longitude in degrees
FLOAT64 dLonDeg = 0;
if (!pTrafficInfo->AircraftVarGetFloat(uAircraftId, idVarLongitude,
idUnitsDegrees, &dLonDeg))
continue;
// get true heading in degrees
FLOAT64 dHdgDeg = 0;
if (!pTrafficInfo->AircraftVarGetFloat(uAircraftId, idVarTrueHeading,
idUnitsDegrees, &dHdgDeg))
continue;
// handle multiplayer aircraft differently from non-multiplayer aircraft
FLOAT64 dAltFeet = 0;
FLOAT64 dGroundSpeedKnots = 0;
FLOAT64 dVerticalSpeedFPM = 0;
STRINGZ szTailNumber[16] = "";
PCSTRINGZ pszTailNumber = szTailNumber;
if (!pTrafficInfo->IsMultiplayerActive())
{
// non-multiplayer
// get engine combustion state
FLOAT64 dCombustion = 0;
if (!pTrafficInfo->AircraftVarGetFloat(uAircraftId, idVarCombustion,
idUnitsBool, &dCombustion, 1))
continue;
// skip aircraft whose engines aren't running
if (dCombustion == 0)
continue;
// get indicated altitude
if (!pTrafficInfo->AircraftVarGetFloat(uAircraftId, idVarIndicatedAltitude,
idUnitsFeet, &dAltFeet))
continue;