diff --git a/src/FlightMap/MapItems/VehicleMapItem.qml b/src/FlightMap/MapItems/VehicleMapItem.qml index b914ebfc42a1afb7d325b85267d2d723559fb1fb..b4c4d432a7fe1c71cf51fe74bd04114411a94443 100644 --- a/src/FlightMap/MapItems/VehicleMapItem.qml +++ b/src/FlightMap/MapItems/VehicleMapItem.qml @@ -57,6 +57,7 @@ MapQuickItem { } QGCMapLabel { + id: vehicleLabel anchors.top: parent.bottom anchors.horizontalCenter: parent.horizontalCenter map: _map @@ -66,10 +67,21 @@ MapQuickItem { property string vehicleLabelText: visible ? (_adsbVehicle ? - callsign + " " + QGroundControl.metersToAppSettingsDistanceUnits(altitude).toFixed(0) + " " + QGroundControl.appSettingsDistanceUnitsString : + QGroundControl.metersToAppSettingsDistanceUnits(altitude).toFixed(0) + " " + QGroundControl.appSettingsDistanceUnitsString : (_multiVehicle ? qsTr("Vehicle %1").arg(vehicle.id) : "")) : "" } + + QGCMapLabel { + anchors.top: vehicleLabel.bottom + anchors.horizontalCenter: parent.horizontalCenter + map: _map + text: vehicleLabelText + font.pointSize: ScreenTools.smallFontPointSize + visible: _adsbVehicle ? !isNaN(altitude) : _multiVehicle + + property string vehicleLabelText: visible && _adsbVehicle ? callsign : "" + } } } diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 5581d4438f7cd32c2333905b11f372ebfad44f94..450629425e428ff4a2ab73c501f8ed15a040d2f4 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -2631,12 +2631,20 @@ bool Vehicle::autoDisarm(void) void Vehicle::_handleADSBVehicle(const mavlink_message_t& message) { mavlink_adsb_vehicle_t adsbVehicle; + static const int maxTimeSinceLastSeen = 15; mavlink_msg_adsb_vehicle_decode(&message, &adsbVehicle); if (adsbVehicle.flags | ADSB_FLAGS_VALID_COORDS) { if (_adsbICAOMap.contains(adsbVehicle.ICAO_address)) { - _adsbICAOMap[adsbVehicle.ICAO_address]->update(adsbVehicle); - } else { + if (adsbVehicle.tslc > maxTimeSinceLastSeen) { + ADSBVehicle* vehicle = _adsbICAOMap[adsbVehicle.ICAO_address]; + _adsbVehicles.removeOne(vehicle); + _adsbICAOMap.remove(adsbVehicle.ICAO_address); + vehicle->deleteLater(); + } else { + _adsbICAOMap[adsbVehicle.ICAO_address]->update(adsbVehicle); + } + } else if (adsbVehicle.tslc <= maxTimeSinceLastSeen) { ADSBVehicle* vehicle = new ADSBVehicle(adsbVehicle, this); _adsbICAOMap[adsbVehicle.ICAO_address] = vehicle; _adsbVehicles.append(vehicle); diff --git a/src/comm/MockLink.cc b/src/comm/MockLink.cc index c9628beee1a31ca7b5b476f7316af221530d7544..1e0092aa66ac008cce8b50f5f567062cd9278372 100644 --- a/src/comm/MockLink.cc +++ b/src/comm/MockLink.cc @@ -1278,8 +1278,8 @@ void MockLink::_sendADSBVehicles(void) _mavlinkChannel, &responseMsg, 12345, // ICAO address - (_vehicleLatitude + 0.001) * qPow(10.0, 7.0), - (_vehicleLongitude + 0.001) * qPow(10.0, 7.0), + (_vehicleLatitude + 0.001) * 1e7, + (_vehicleLongitude + 0.001) * 1e7, ADSB_ALTITUDE_TYPE_GEOMETRIC, 100 * 1000, // Altitude in millimeters 10 * 100, // Heading in centidegress