private FlightApproval GetClosesetApproval(GPSPoint ThisPosition) { Double MinDistance = -1; FlightApproval flightApproval = null; foreach (FlightApproval Approval in FlightApprovals) { Double ThisDistance = Approval.GetDistanceTo(ThisPosition); if (MinDistance < 0 || MinDistance < ThisDistance) { flightApproval = Approval; } } return(flightApproval); }
public async Task <bool> GenerateAlerts() { bool _InBoundary = true; bool _InSoftBoundary = true; bool _IsInAltitudeLimit = true; GPSPoint ThisPosition = new GPSPoint((float)_FlightMapData.Latitude, (float)_FlightMapData.Longitude); FlightApproval Approval = GetApproval(ThisPosition); if (Approval != null) { _Approval = Approval; _DroneFlight.ApprovalID = _Approval.ApprovalId; _InBoundary = _Approval.IsInBoundary(ThisPosition); _InSoftBoundary = Approval.IsInSoftBoundary(ThisPosition); _IsInAltitudeLimit = Approval.IsInAltitudeLimit((Decimal)_FlightMapData.Altitude); } else { _Approval = GetClosesetApproval(ThisPosition); _InBoundary = false; _InSoftBoundary = false; //If approval found on close by, take that //if not, maximum to 40 meter _IsInAltitudeLimit = _Approval != null? _Approval.IsInAltitudeLimit((Decimal)_FlightMapData.Altitude) : (_FlightMapData.Altitude <= 40M); } if (!_InSoftBoundary && !IsAlertedSoftBoundary) { //Outside the Soft Boundary, Generate alert var ThisAlert = new Alert(_ExtDroneFlight); ThisAlert.Generate("Boundary", "Critical"); await ThisAlert.Save(); IsAlertedSoftBoundary = true; } else if (_InSoftBoundary) { IsAlertedSoftBoundary = false; } if (!_InBoundary && !IsAlertedBoundary) { //Outside the Boundary, generate alert var ThisAlert = new Alert(_ExtDroneFlight); ThisAlert.Generate("Boundary", "High"); await ThisAlert.Save(); IsAlertedBoundary = true; } else if (_InBoundary) { IsAlertedBoundary = false; } if (!_IsInAltitudeLimit && !IsAlertedAltitudeLimit) { //Generate Alert for Altitude breach var ThisAlert = new Alert(_ExtDroneFlight); ThisAlert.Generate("Altitude", "Critical"); await ThisAlert.Save(); IsAlertedAltitudeLimit = true; } else if (_IsInAltitudeLimit) { IsAlertedAltitudeLimit = false; } //Save the current status _DroneFlight.ApprovalID = _Approval == null ? 0 : _Approval.ApprovalId; _DroneFlight.IsFlightOutside = IsAlertedBoundary; _DroneFlight.IsFlightSoftFence = IsAlertedSoftBoundary ? 1 : 0; _DroneFlight.HigherLimit = IsAlertedAltitudeLimit ? 1 : 0; _FlightMapData.IsOutSide = !_InBoundary; _FlightMapData.IsSoftFence = (_InSoftBoundary ? 0 : 1); return(true); }