Example #1
0
        public ResponderIcon AddResponder(ResponderModel responder)
        {
            var responderIcon = new ResponderIcon(responder);

            ResponderList.Add(responderIcon);
            return(responderIcon);
        }
        private void OnResponderRouteCompleted(Route <ResponderModel> route)
        {
            ResponderModel responder = route.Element;

            if (responder.Status == ResponseStatus.Available)
            {
                int currentPredefinedRouteIndex;
                _responderRoutes.TryGetValue(responder.Id, out currentPredefinedRouteIndex);

                int nextPredefinedRouteIndex = _predefinedRoutes.Count > currentPredefinedRouteIndex + 1
                    ? currentPredefinedRouteIndex + 1
                    : 0;

                var defaultRoute = _predefinedRoutes.ElementAt(nextPredefinedRouteIndex);
                AssignRouteToResponder(responder, defaultRoute);
            }
            else if (responder.Status == ResponseStatus.EnRoute)
            {
                // state as busy
                responder.Status = ResponseStatus.Busy;
                if (responder.IsPriority)
                {
                }
            }
        }
        protected override void AddResponderToMap(ResponderModel responder)
        {
            var responderIcon = new ResponderIcon(responder);

            _mapItems.Items.Add(responderIcon);
            SetMapIconPosition(responderIcon, responder.GeoLocation, new Point(0.5, 0.5));
        }
        private async void AssignRouteToResponder(ResponderModel responder, RouteModel defaultRoute)
        {
            if (defaultRoute.RoutePoints.Any())
            {
                var routeInstance = new Route <ResponderModel>(defaultRoute.RoutePoints.ToArray());
                routeInstance.Element = responder;

                // calculate route from the actual point to the route start point
                Geoposition responderPosition = PushpinManager.GetResponderPosition(responder);
                IEnumerable <Geoposition> routeToStartPosition = await RouteManager.CalculateRoute(responderPosition, routeInstance.RoutePositions.First());

                if (!routeToStartPosition.Any())
                {
                    // if routes api dont return any points, route directly to the position.
                    routeToStartPosition = new [] { responderPosition, routeInstance.RoutePositions.First() };
                }
                routeInstance.AddRouteToStartPoint(routeToStartPosition);
                _routeUpdater.AddRoute(routeInstance);

                var routeIndex = _predefinedRoutes.IndexOf(defaultRoute);
                _responderRoutes[responder.Id] = routeIndex;
            }
            else
            {
                System.Diagnostics.Debug.WriteLine("FullRoute has zero elements, route could not be started");
            }
        }
Example #5
0
        public async Task <ResponderRequestModel> CreateResponderForPriorityIncident(object sender, IncidentEventArgs e)
        {
            var request  = new ResponderRequestModel(DepartmentType.Ambulance);
            var incident = e.Incident;

            if (incident != null)
            {
                var responderModel = new ResponderModel
                {
                    Id = 8,
                    ResponderDepartment = DepartmentType.Ambulance,
                    Status    = ResponseStatus.Available,
                    Longitude = Configuration.AmbulanceLongitude,
                    Latitude  = Configuration.AmbulanceLatitude,
                    RouteId   = 2
                };
                var responderIcon = new ResponderIcon(responderModel);
                request.RespondToRequest(responderIcon);

                responderIcon.Responder.Request  = request;
                responderIcon.Responder.Incident = incident;
                responderIcon.RouteIndex         = 0;
                responderIcon.OnPatrolRoute      = false;
                await UpdateResponderStatus(responderIcon, ResponseStatus.EnRoute);

                ResponderList.Add(responderIcon);
            }
            return(request);
        }
        public override Geoposition GetResponderPosition(ResponderModel responder)
        {
            Marker marker = GetMarkerForResponder(responder);

            return(marker != null
                ? CoordinateConverter.ConvertToAbstraction(marker.Position)
                : default(Geoposition));
        }
 public ResponderViewModel(ResponderModel model)
 {
     Id = model.Id;
     ResponderDepartment = model.ResponderDepartment.ToString();
     ResponderCode       = model.ResponderCode;
     Status      = model.Status.ToString();
     StatusColor = model.StatusColor;
 }
        private async Task RequestAmbulanceOnIncident()
        {
            // locate attending incident (can differ from selected)
            IncidentModel currentIncident = FormsMap.Incidents?.FirstOrDefault(i => i.Id == CurrentUserStatus.AttendingIncidentId);

            if (currentIncident.IsHighPriority)
            {
                // search or create ambulance responder
                var ambulance = new ResponderModel
                {
                    Id = 8,
                    ResponderDepartment = DepartmentType.Ambulance,
                    Status     = ResponseStatus.EnRoute,
                    Longitude  = Settings.AmbulanceLongitude,
                    Latitude   = Settings.AmbulanceLatitude,
                    IsPriority = true
                };

                // add responder to map
                this.PushpinManager.RemoveResponder(ambulance);
                this.PushpinManager.AddResponders(new List <ResponderModel>()
                {
                    ambulance
                });

                var fromPosition = new Geoposition()
                {
                    Latitude  = ambulance.Latitude,
                    Longitude = ambulance.Longitude
                };

                var toPosition = new Geoposition()
                {
                    Latitude  = currentIncident.Latitude,
                    Longitude = currentIncident.Longitude
                };

                // create route from ambulance to incident
                var routeAmbulance = await this.RouteManager.CalculateRoute(fromPosition, toPosition);

                if (!routeAmbulance.Any())
                {
                    // map route service fails
                    routeAmbulance = new[] { fromPosition, toPosition };
                }

                // start route movement
                var route = new Route <ResponderModel>(routeAmbulance.ToArray());
                route.Element = ambulance;
                route.AddStartPoint(new Geoposition()
                {
                    Latitude  = ambulance.Latitude,
                    Longitude = ambulance.Longitude
                });
                route.Init();
                _routeUpdater.AddRoute(route);
            }
        }
        public override void RemoveResponder(ResponderModel responder)
        {
            var responderIcon = _mapItems.Items.OfType <ResponderIcon>().FirstOrDefault(icon => icon.Responder.Id == responder.Id);

            if (responderIcon != null)
            {
                _mapItems?.Items?.Remove(responderIcon);
            }
        }
Example #10
0
        public ResponderAnnotationView(IMKAnnotation annotation, ResponderModel responder)
            : base(annotation, CustomReuseIdentifier)
        {
            if (responder != null)
            {
                responder.PropertyChanged += UpdateColor;
            }

            Responder = responder;
        }
Example #11
0
        public override void RemoveResponder(ResponderModel responder)
        {
            var responderAnnotation = _nativeMap.Annotations.OfType <ResponderAnnotation>()
                                      .FirstOrDefault(r => r.Responder.Id == responder.Id);

            if (responderAnnotation != null)
            {
                _nativeMap.RemoveAnnotation(responderAnnotation);
            }
        }
        public override Models.Geoposition GetResponderPosition(ResponderModel responder)
        {
            var itemsControl = _nativeMap.Children.OfType <MapItemsControl>()
                               .FirstOrDefault();

            var responderIcon = itemsControl?.Items.OfType <ResponderIcon>()
                                .Where(icon => icon.Responder.Id == responder.Id)
                                .FirstOrDefault();

            return(GetIconPosition(responderIcon));
        }
Example #13
0
        public ResponderIcon(ResponderModel responder)
        {
            InitializeComponent();
            Responder = responder;
            if (responder.ResponderDepartment == DepartmentType.Responder)
            {
                ResponderImage.Visibility = Windows.UI.Xaml.Visibility.Visible;
            }

            StatusColor.Fill   = Responder.StatusColor;
            ResponderType.Text = Responder.ResponderCode;
        }
Example #14
0
        protected override void AddResponderToMap(ResponderModel responder)
        {
            var annotation = new ResponderAnnotation(new
                                                     CLLocationCoordinate2D
            {
                Latitude  = responder.Latitude,
                Longitude = responder.Longitude
            },
                                                     responder);

            _nativeMap.AddAnnotation(annotation);
        }
Example #15
0
        public override Geoposition GetResponderPosition(ResponderModel responder)
        {
            var responderAnnotation = _nativeMap.Annotations.OfType <ResponderAnnotation>()
                                      .Where(r => r.Responder.Id == responder.Id)
                                      .FirstOrDefault();

            if (responderAnnotation == null)
            {
                System.Diagnostics.Debug.WriteLine("Responder annotation not found!");
                return(default(Geoposition));
            }

            return(CoordinateConverter.ConvertToAbstraction(responderAnnotation.Coordinate));
        }
        public override void RemoveResponder(ResponderModel responder)
        {
            responder.PropertyChanged -= updateColor;

            if (_responderPushpinMappings.ContainsKey(responder.Id))
            {
                Marker marker = GetMarkerForResponder(responder);
                _responderPushpinMappings.Remove(responder.Id);

                if (marker != null)
                {
                    marker.Remove();
                }
            }
        }
        protected override void AddResponderToMap(ResponderModel responder)
        {
            responder.PropertyChanged += updateColor;

            var responderIcon = new ResponderIcon(responder);


            var markerOptions = responderIcon.MarkerOptions;

            markerOptions.SetPosition(new LatLng(responder.Latitude, responder.Longitude));

            Marker marker = _nativeMap.AddMarker(responderIcon.MarkerOptions);

            _responderPushpinMappings.Add(responder.Id, marker);
        }
        public ResponderIcon(ResponderModel responder)
            : base()
        {
            Responder = responder;

            _inflater          = LayoutInflater.From(Xamarin.Forms.Forms.Context);
            _responderIconView = _inflater.Inflate(Resource.Layout.responder_icon_content, null);

            var responderType = _responderIconView.FindViewById <TextView>(Resource.Id.responder_type);

            responderType.Text = Responder.ResponderCode;
            GradientDrawable drawable = (GradientDrawable)responderType.Background;

            drawable.SetColor(Responder.StatusColor.ToAndroid());

            MarkerOptions.SetTitle(Responder.ResponderCode);
            MarkerOptions.SetSnippet(Responder.Incident?.Address);

            Bitmap icon = _responderIconView.AsBitmap(Xamarin.Forms.Forms.Context, 60, 60);

            MarkerOptions.SetIcon(BitmapDescriptorFactory.FromBitmap(icon));
        }
        public ResponderIcon(ResponderModel responder)
        {
            InitializeComponent();


            if (responder != null)
            {
                responder.PropertyChanged += UpdateStatus;
            }

            Responder = responder;

            if (responder.ResponderDepartment == DepartmentType.Responder)
            {
                ResponderImage.Visibility = Windows.UI.Xaml.Visibility.Visible;
            }

            var color = Responder.StatusColor.ToMediaColor();

            StatusColor.Fill = new SolidColorBrush(color);

            ResponderType.Text = Responder.ResponderCode;
        }
 public abstract void RemoveResponder(ResponderModel responder);
 public Marker GetMarkerForResponder(ResponderModel responder)
 {
     return(_responderPushpinMappings.ContainsKey(responder.Id)
             ? _responderPushpinMappings[responder.Id]
             : null);
 }
 public void LoadResponderData(ResponderModel responder)
 {
     NameLabel.Text = responder.ResponderCode;
 }
 public ResponderAnnotation(CLLocationCoordinate2D coordinate, ResponderModel responder)
     : base(coordinate)
 {
     Responder = responder;
 }
 public abstract Geoposition GetResponderPosition(ResponderModel responder);
 protected abstract void AddResponderToMap(ResponderModel responder);