コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }