private void men2_Click(object sender, EventArgs e)
        {
            double alt = 0;

            InputBox.Show("Altitude", "Enter HAE altitude", ref alt);
            UpdateOutput?.Invoke(this, this.Host.FDMenuMapPosition.ToPLLA(alt));
        }
        public override bool Loop()
        {
            GMapOverlay overlay;

            if (Host.FDGMapControl.Overlays.Any(a => a.Id == "dowding"))
            {
                overlay = Host.FDGMapControl.Overlays.First(a => a.Id == "dowding");
            }
            else
            {
                overlay = new GMap.NET.WindowsForms.GMapOverlay("dowding");
                Host.FDGMapControl.Overlays.Add(overlay);
                Host.FDGMapControl.OnMarkerClick += (item, args) =>
                {
                    if (item.Overlay == overlay && item is GMarkerGoogle)
                    {
                        if (target != null)
                        {
                            target.ToolTipMode = MarkerTooltipMode.Never;
                            target.ToolTipText = "";
                        }
                        target             = (GMarkerGoogle)item;
                        target.ToolTipMode = MarkerTooltipMode.Always;
                        target.ToolTipText = "Tracking";
                    }
                };
            }

            FlightData.instance.updateMarkersAsNeeded <VehicleTick, GMarkerGoogle>(MissionPlanner.WebAPIs.Dowding.Vehicles.Values,
                                                                                   overlay, tick =>
            {
                return(tick.Serial ?? tick.Id);
            },
                                                                                   mapMarker =>
            {
                return(((VehicleTick)mapMarker.Tag).Serial ?? ((VehicleTick)mapMarker.Tag).Id);
            },
                                                                                   tick =>
            {
                return(new GMarkerGoogle(new PointLatLng((double)tick.Lat, (double)tick.Lon), GMarkerGoogleType.blue_dot)
                {
                    Tag = tick
                });
            },
                                                                                   (tick, mapMarker) =>
            {
                mapMarker.Position = new PointLatLng((double)tick.Lat, (double)tick.Lon);
                mapMarker.Tag      = tick;

                if (mapMarker == target)
                {
                    UpdateOutput?.Invoke(this,
                                         new PointLatLngAlt((double)tick.Lat, (double)tick.Lon, (double)tick.Hae));
                }

                var time = ((int)(tick.Ts / 1000)).fromUnixTime();

                if (time > DateTime.UtcNow.AddSeconds(-120))
                {
                    mapMarker.IsVisible = true;
                }
                else
                {
                    mapMarker.IsVisible = false;
                }
            });

            return(true);
        }
Beispiel #3
0
        public override bool Loop()
        {
            GMapOverlay overlay;

            if (Host.FDGMapControl.Overlays.Any(a => a.Id == "dowding"))
            {
                overlay = Host.FDGMapControl.Overlays.First(a => a.Id == "dowding");
            }
            else
            {
                overlay = new GMap.NET.WindowsForms.GMapOverlay("dowding");
                Host.FDGMapControl.Overlays.Add(overlay);
                Host.FDGMapControl.OnMarkerClick += (item, args) =>
                {
                    if (item.Overlay == overlay && item is GMarkerGoogle && item.Tag is VehicleTick)
                    {
                        // unselect
                        if (target == item)
                        {
                            target.ToolTipMode = MarkerTooltipMode.Never;
                            target.ToolTipText = "";
                            target             = null;
                            return;
                        }

                        //clear old
                        if (target != null)
                        {
                            target.ToolTipMode = MarkerTooltipMode.Never;
                            target.ToolTipText = "";
                        }
                        target             = (GMarkerGoogle)item;
                        target.ToolTipMode = MarkerTooltipMode.Always;
                        var vt = (VehicleTick)item.Tag;
                        target.ToolTipText = "Tracking\r\nVendor: " + vt.Vendor + "\r\nModel: " + vt.Model + "\r\nSerial: " + vt.Serial;
                    }
                };
            }

            FlightData.instance.updateMarkersAsNeeded <VehicleTick, GMarkerGoogle>(MissionPlanner.WebAPIs.Dowding.Vehicles.Values,
                                                                                   overlay, tick =>
            {
                return(tick.Serial ?? tick.Id);
            },
                                                                                   mapMarker =>
            {
                return(((VehicleTick)mapMarker.Tag).Serial ?? ((VehicleTick)mapMarker.Tag).Id);
            },
                                                                                   tick =>
            {
                return(new GMarkerGoogle(new PointLatLng((double)tick.Lat, (double)tick.Lon), GMarkerGoogleType.blue_dot)
                {
                    Tag = tick
                });
            },
                                                                                   (tick, mapMarker) =>
            {
                mapMarker.Position = new PointLatLng((double)tick.Lat, (double)tick.Lon);
                mapMarker.Tag      = tick;

                if (mapMarker == target)
                {
                    UpdateOutput?.Invoke(this,
                                         new PointLatLngAlt((double)tick.Lat, (double)tick.Lon, (double)tick.Hae));
                }

                // hide if older than 120 seconds
                var time = ((int)(tick.Ts / 1000)).fromUnixTime();

                if (time > DateTime.UtcNow.AddSeconds(-120))
                {
                    mapMarker.IsVisible = true;
                }
                else
                {
                    mapMarker.IsVisible = false;
                }

                // hide if more than 100km from our map center
                if (new PointLatLngAlt(FlightData.instance.gMapControl1.Position).GetDistance(mapMarker.Position) > 1000 * 100)
                {
                    mapMarker.IsVisible = false;
                }
            });

            return(true);
        }