28 double metersAltitude,
const std::string &callsign,
29 bool &o_isWater)
const
32 XPLMWorldToLocal(degreesLatitude, degreesLongitude, metersAltitude, &x, &y, &z);
34 XPLMProbeInfo_t probe;
35 probe.structSize =
sizeof(probe);
37 XPLMProbeTerrainXYZ(m_ref,
static_cast<float>(x),
static_cast<float>(y),
static_cast<float>(z), &probe);
38 if (result != xplm_ProbeHitTerrain)
40 if (m_logMessageCount < 100)
44 if (result == xplm_ProbeError)
46 error =
"probe error";
48 else if (result == xplm_ProbeMissed)
50 error =
"probe missed";
54 error =
"unknown probe result";
56 WARNING_LOG(callsign +
" " + error +
" at " + std::to_string(degreesLatitude) +
", " +
57 std::to_string(degreesLongitude) +
", " + std::to_string(metersAltitude));
61 return { { std::numeric_limits<double>::quiet_NaN(), degreesLatitude, degreesLongitude } };
63 XPLMLocalToWorld(probe.locationX, probe.locationY, probe.locationZ, °reesLatitude, °reesLongitude,
66 if (probe.is_wet && m_logMessageCount < 100)
69 DEBUG_LOG(callsign +
" probe hit water at " + std::to_string(degreesLatitude) +
", " +
70 std::to_string(degreesLongitude) +
", " + std::to_string(metersAltitude));
72 if (std::isnan(metersAltitude) && m_logMessageCount < 100)
75 DEBUG_LOG(callsign +
" probe returned NaN at " + std::to_string(degreesLatitude) +
", " +
76 std::to_string(degreesLongitude) +
", " + std::to_string(metersAltitude));
78 o_isWater = probe.is_wet;
79 return { { metersAltitude, degreesLatitude, degreesLongitude } };
std::array< double, 3 > getElevation(double degreesLatitude, double degreesLongitude, double metersAltitude) const
Get the elevation in meters at the given point in OpenGL space.