Esempio n. 1
0
        /// <summary>
        /// used to add a marker to the map display
        /// </summary>
        /// <param name="tag"></param>
        /// <param name="lng"></param>
        /// <param name="lat"></param>
        /// <param name="alt"></param>
        /// <param name="color"></param>
        private void addpolygonmarker(string tag, double lng, double lat, double?alt, Color?color, double wpradius, MAVLink.MAV_MISSION_TYPE type = MAVLink.MAV_MISSION_TYPE.MISSION, Color?fillcolor = null)
        {
            try
            {
                PointLatLng point = new PointLatLng(lat, lng);
                GMapMarker  m     = null;
                if (type == MAVLink.MAV_MISSION_TYPE.MISSION)
                {
                    m = new GMapMarkerWP(point, tag);
                    if (alt.HasValue)
                    {
                        m.ToolTipMode = MarkerTooltipMode.OnMouseOver;
                        m.ToolTipText = "Alt: " + alt.Value.ToString("0");
                    }
                    m.Tag = tag;
                }
                else if (type == MAVLink.MAV_MISSION_TYPE.FENCE)
                {
                    m     = new GMarkerGoogle(point, GMarkerGoogleType.blue_dot);
                    m.Tag = tag;
                }
                else if (type == MAVLink.MAV_MISSION_TYPE.RALLY)
                {
                    m = new GMapMarkerRallyPt(point);
                    if (alt.HasValue)
                    {
                        m.ToolTipMode = MarkerTooltipMode.OnMouseOver;
                        m.ToolTipText = "Alt: " + alt.Value.ToString("0");
                    }
                    m.Tag = tag;
                }

                //MissionPlanner.GMapMarkerRectWPRad mBorders = new MissionPlanner.GMapMarkerRectWPRad(point, (int)float.Parse(TXT_WPRad.Text), MainMap);
                GMapMarkerRect mBorders = new GMapMarkerRect(point);
                {
                    mBorders.InnerMarker = m;
                    mBorders.Tag         = tag;
                    mBorders.wprad       = (int)wpradius;
                    if (color.HasValue)
                    {
                        mBorders.Color = color.Value;
                    }
                    if (fillcolor.HasValue)
                    {
                        mBorders.FillColor = fillcolor.Value;
                    }
                }

                overlay.Markers.Add(m);
                overlay.Markers.Add(mBorders);
            }
            catch (Exception)
            {
            }
        }
Esempio n. 2
0
 public void addpolygonmarker_dis(double lat, double lng, Color?color)  //测距添加的航点
 {
     try
     {
         PointLatLng  point = new PointLatLng(lat, lng);
         GMapMarkerWP m     = new GMapMarkerWP(point, "");
         m.ToolTipMode = MarkerTooltipMode.OnMouseOver;
         markersOverlay_sec.Markers.Add(m);//添加标志
     }
     catch (Exception) { }
 }
Esempio n. 3
0
 /// <summary>
 /// 在地图上添加一个航点标志
 /// </summary>
 /// <param name="tag"></param>
 /// <param name="lng"></param>
 /// <param name="lat"></param>
 /// <param name="alt"></param>
 public void addpolygonmarker_sec(string tag, double lat, double lng, double alt, Color?color)
 {
     try
     {
         PointLatLng  point = new PointLatLng(lat, lng);
         GMapMarkerWP m     = new GMapMarkerWP(point, tag);
         //GMapMarkerRect m = new GMapMarkerRect(point,tag);
         m.ToolTipMode = MarkerTooltipMode.OnMouseOver;
         m.ToolTipText = "Alt: " + alt.ToString("0");
         m.Tag         = tag;
         markersOverlay_sec.Markers.Add(m);//添加标志
     }
     catch (Exception) { }
 }
Esempio n. 4
0
        /// <summary>
        /// used to add a marker to the map display
        /// </summary>
        /// <param name="tag"></param>
        /// <param name="lng"></param>
        /// <param name="lat"></param>
        /// <param name="alt"></param>
        /// <param name="color"></param>
        private void addpolygonmarker(string tag, double lng, double lat, double alt, Color?color, double wpradius)
        {
            try
            {
                PointLatLng  point = new PointLatLng(lat, lng);
                GMapMarkerWP m     = new GMapMarkerWP(point, tag);
                m.ToolTipMode = MarkerTooltipMode.OnMouseOver;
                m.ToolTipText = "Alt: " + alt.ToString("0");
                m.Tag         = tag;

                int wpno = -1;
                if (int.TryParse(tag, out wpno))
                {
                    // preselect groupmarker
                    //if (groupmarkers.Contains(wpno))
                    //m.selected = true;
                }

                //MissionPlanner.GMapMarkerRectWPRad mBorders = new MissionPlanner.GMapMarkerRectWPRad(point, (int)float.Parse(TXT_WPRad.Text), MainMap);
                GMapMarkerRect mBorders = new GMapMarkerRect(point);
                {
                    mBorders.InnerMarker = m;
                    mBorders.Tag         = tag;
                    mBorders.wprad       = (int)wpradius;
                    if (color.HasValue)
                    {
                        mBorders.Color = color.Value;
                    }
                }

                overlay.Markers.Add(m);
                overlay.Markers.Add(mBorders);
            }
            catch (Exception)
            {
            }
        }
        // Do Work
        private void domainUpDown1_ValueChanged(object sender, EventArgs e)
        {
            // if (CMB_camera.Text != "")
            doCalc();

            // new grid system test

            grid = Grid1.CreateGrid(list, CurrentState.fromDistDisplayUnit((double)TBAR_zoom.Value), (double)Distance, (double)Spacing, (double)Angle, double.Parse(TXT_turn_radius.Text), (Grid1.StartPosition)Enum.Parse(typeof(Grid1.StartPosition), "Home"), false);

            List<PointLatLng> list2 = new List<PointLatLng>();

            grid.ForEach(x => { list2.Add(x); });

            MainMap.HoldInvalidation = true;

            routesOverlay.Routes.Clear();
            routesOverlay.Polygons.Clear();
            routesOverlay.Markers.Clear();

            if (grid.Count == 0)
            {
                return;
            }

            if (CHK_boundary.Checked)
            {
                blue.redrawPolygonSurvey(new List<PointLatLng>(list));
            }
            else
            {
                blue.overlay.Clear();
            }


            int strips = 0;
            int images = 0;
            int a = 1;
            PointLatLngAlt prevpoint = grid[0];
            float routetotal = 0;
            List<PointLatLng> segment = new List<PointLatLng>();

            foreach (var item in grid)
            {
                if (item.Tag == "M")
                {
                    images++;

                    if (CHK_internals.Checked)
                    {
                        routesOverlay.Markers.Add(new GMarkerGoogle(item, GMarkerGoogleType.yellow) { ToolTipText = a.ToString(), ToolTipMode = MarkerTooltipMode.OnMouseOver });
                        a++;

                        segment.Add(prevpoint);
                        segment.Add(item);
                        prevpoint = item;
                    }
                    try
                    {
                        if (fovH != "")
                        {
                            double fovh = double.Parse(fovH);
                            double fovv = double.Parse(fovV);

                            double startangle = 0;

                            if (RadioLandspace.Checked)
                            {
                                startangle = 90;
                            }

                            float sensorwidth = float.Parse(TXT_senswidth.Text);
                            float sensorheight = float.Parse(TXT_sensheight.Text);

                            double angle1 = startangle - (Math.Atan(sensorwidth / sensorheight) * rad2deg);
                            double dist1 = Math.Sqrt(Math.Pow(fovh / 2.0, 2) + Math.Pow(fovv / 2.0, 2));

                            double bearing = (double)Angle;// (prevpoint.GetBearing(item) + 360.0) % 360;

                            List<PointLatLng> footprint = new List<PointLatLng>();

                            footprint.Add(item.newpos(bearing + angle1, dist1));
                            footprint.Add(item.newpos(bearing + 180 - angle1, dist1));
                            footprint.Add(item.newpos(bearing + 180 + angle1, dist1));
                            footprint.Add(item.newpos(bearing - angle1, dist1));

                            GMapPolygon poly = new GMapPolygon(footprint, a.ToString());
                            poly.Stroke = new Pen(Color.FromArgb(250 - ((a * 5) % 240), 250 - ((a * 3) % 240), 250 - ((a * 9) % 240)), 1);
                            poly.Fill = new SolidBrush(Color.FromArgb(40, Color.Purple));
                            if (CHK_footprints.Checked)
                                routesOverlay.Polygons.Add(poly);
                        }
                    }
                    catch { }
                }
                else
                {
                    strips++;
                    if (CHK_markers.Checked)
                    {
                        var marker = new GMapMarkerWP(item, a.ToString()) { ToolTipText = a.ToString(), ToolTipMode = MarkerTooltipMode.OnMouseOver };
                        routesOverlay.Markers.Add(marker);
                    }

                    segment.Add(prevpoint);
                    segment.Add(item);
                    prevpoint = item;
                    a++;
                }
                GMapRoute seg = new GMapRoute(segment, "segment" + a.ToString());
                seg.Stroke = new Pen(Color.Yellow, 4);
                seg.Stroke.DashStyle = System.Drawing.Drawing2D.DashStyle.Custom;
                //seg.IsVisible = false;
                seg.IsHitTestVisible = true;
                if (CHK_grid1.Checked)
                    routesOverlay.Routes.Add(seg);
                routetotal = routetotal + (float)seg.Distance;
                segment.Clear();
            }

            /*      Old way of drawing route, incase something breaks using segments
            GMapRoute wproute = new GMapRoute(list2, "GridRoute");
            wproute.Stroke = new Pen(Color.Yellow, 4);
            if (chk_grid.Checked)
                routesOverlay.Routes.Add(wproute);
            */

            // Update Stats 
            if (DistUnits == "Feet")
            {
                // Area
                float area = (float)calcpolygonarea(list) * 10.7639f; // Calculate the area in square feet
                lbl_area.Text = area.ToString("#") + " ft^2";
                if (area < 21780f)
                {
                    lbl_area.Text = area.ToString("#") + " ft^2";
                }
                else
                {
                    area = area / 43560f;
                    if (area < 640f)
                    {
                        lbl_area.Text = area.ToString("0.##") + " acres";
                    }
                    else
                    {
                        area = area / 640f;
                        lbl_area.Text = area.ToString("0.##") + " miles^2";
                    }
                }

                // Distance
                float distance = routetotal * 3280.84f; // Calculate the distance in feet
                if (distance < 5280f)
                {
                    lbl_distance.Text = distance.ToString("#") + " ft";
                }
                else
                {
                    distance = distance / 5280f;
                    lbl_distance.Text = distance.ToString("0.##") + " miles";
                }

                lbl_spacing.Text = (Spacing * 3.2808399m).ToString("#") + " ft";
                lbl_altitude.Text = (TBAR_zoom.Value * 3.2808399m).ToString("#") + " ft";
                lbl_distbetweenlines.Text = (Distance * 3.2808399m).ToString("0.##") + " ft";
                lbl_footprint.Text = feet_fovH + " x " + feet_fovV + " ft";
            }
            else
            {
                // Meters
                lbl_area.Text = calcpolygonarea(list).ToString("#") + " m^2";
                lbl_distance.Text = routetotal.ToString("0.##") + " km";
                lbl_spacing.Text = Spacing.ToString("#") + " m";
                lbl_altitude.Text = TBAR_zoom.Value.ToString();
                lbl_distbetweenlines.Text = Distance.ToString("0.##") + " m";
                lbl_footprint.Text = fovH + " x " + fovV + " m";
            }

            double flyspeedms = CurrentState.fromSpeedDisplayUnit((double)NUM_UpDownFlySpeed.Value);

            lbl_pictures.Text = images.ToString();
            lbl_strips.Text = ((int)(strips / 2)).ToString();
            double seconds = ((routetotal * 1000.0) / ((flyspeedms) * 0.8));
            // reduce flying speed by 20 %
            lbl_flighttime.Text = secondsToNice(seconds);
            seconds = ((routetotal * 1000.0) / (flyspeedms));
            lbl_photoevery.Text = secondsToNice(((double)Spacing / flyspeedms));

            MainMap.HoldInvalidation = false;
            if (!isMouseDown)
                MainMap.ZoomAndCenterMarkers("routes");
            CalcHeadingHold();
        }
Esempio n. 6
0
        private void domainUpDown1_ValueChanged(object sender, EventArgs e)
        {
            if (loading)
            {
                return;
            }

            if (CMB_camera.Text != "")
            {
                doCalc();
            }

            // new grid system test

            grid = Grid.CreateGrid(list, CurrentState.fromDistDisplayUnit((double)NUM_altitude.Value),
                                   (double)NUM_Distance, (double)NUM_spacing, (double)NUM_angle.Value,
                                   (double)NUM_overshoot, (double)NUM_overshoot2,
                                   (Grid.StartPosition)Enum.Parse(typeof(Grid.StartPosition), CMB_startfrom.Text), false,
                                   (float)NUM_Lane_Dist, (float)NUM_leadin);

            map.HoldInvalidation = true;

            routesOverlay.Routes.Clear();
            routesOverlay.Polygons.Clear();
            routesOverlay.Markers.Clear();

            GMapMarkerOverlap.Clear();

            if (grid.Count == 0)
            {
                return;
            }

            if (chk_crossgrid.Checked)
            {
                // add crossover
                Grid.StartPointLatLngAlt = grid[grid.Count - 1];

                grid.AddRange(Grid.CreateGrid(list, CurrentState.fromDistDisplayUnit((double)NUM_altitude.Value),
                                              (double)NUM_Distance, (double)NUM_spacing, (double)NUM_angle.Value + 90.0,
                                              (double)NUM_overshoot, (double)NUM_overshoot2,
                                              Grid.StartPosition.Point, false,
                                              (float)NUM_Lane_Dist, (float)NUM_leadin));
            }

            //if (CHK_boundary.Checked)
            AddDrawPolygon();

            int                strips             = 0;
            int                images             = 0;
            int                a                  = 1;
            PointLatLngAlt     prevpoint          = grid[0];
            float              routetotal         = 0;
            List <PointLatLng> segment            = new List <PointLatLng>();
            double             maxgroundelevation = double.MinValue;
            double             mingroundelevation = double.MaxValue;
            double             startalt           = plugin.Host.cs.HomeAlt;

            foreach (var item in grid)
            {
                double currentalt = srtm.getAltitude(item.Lat, item.Lng).alt;
                mingroundelevation = Math.Min(mingroundelevation, currentalt);
                maxgroundelevation = Math.Max(maxgroundelevation, currentalt);

                if (item.Tag == "M")
                {
                    images++;

                    //if (CHK_internals.Checked)   MP中未直接打勾的就先暂时认为是不用选中
                    //{
                    //    routesOverlay.Markers.Add(new GMarkerGoogle(item, GMarkerGoogleType.green) { ToolTipText = a.ToString(), ToolTipMode = MarkerTooltipMode.OnMouseOver });
                    //    a++;

                    //    segment.Add(prevpoint);
                    //    segment.Add(item);
                    //    prevpoint = item;
                    //}
                    try
                    {
                        if (TXT_fovH != "")
                        {
                            if (CHK_footprints.Checked)
                            {
                                double fovh = double.Parse(TXT_fovH);
                                double fovv = double.Parse(TXT_fovV);

                                getFOV(item.Alt + startalt - currentalt, ref fovh, ref fovv);

                                double startangle = 0;

                                //if (!CHK_camdirection.Checked)   MP中直接打勾的视为必选项
                                //{
                                startangle = 90;
                                //}

                                double angle1 = startangle - (Math.Sin((fovh / 2.0) / (fovv / 2.0)) * rad2deg);
                                double dist1  = Math.Sqrt(Math.Pow(fovh / 2.0, 2) + Math.Pow(fovv / 2.0, 2));

                                double bearing = (double)NUM_angle.Value;

                                //if (CHK_copter_headinghold.Checked)
                                //{
                                //    bearing = Convert.ToInt32(TXT_headinghold);
                                //}

                                double fovha = 0;
                                double fovva = 0;
                                getFOVangle(ref fovha, ref fovva);
                                var itemcopy = new PointLatLngAlt(item);
                                itemcopy.Alt += startalt;
                                var temp = ImageProjection.calc(itemcopy, 0, 0, bearing + startangle, fovha, fovva);

                                List <PointLatLng> footprint = new List <PointLatLng>();
                                footprint.Add(temp[0]);
                                footprint.Add(temp[1]);
                                footprint.Add(temp[2]);
                                footprint.Add(temp[3]);

                                GMapPolygon poly = new GMapPolygon(footprint, a.ToString());
                                poly.Stroke =
                                    new Pen(Color.FromArgb(250 - ((a * 5) % 240), 250 - ((a * 3) % 240), 250 - ((a * 9) % 240)), 1);
                                poly.Fill = new SolidBrush(Color.Transparent);

                                GMapMarkerOverlap.Add(poly);

                                routesOverlay.Polygons.Add(poly);
                                a++;
                            }
                        }
                    }
                    catch { }
                }
                else
                {
                    if (item.Tag != "SM" && item.Tag != "ME")
                    {
                        strips++;
                    }

                    if (CHK_markers.Checked)
                    {
                        var marker = new GMapMarkerWP(item, a.ToString())
                        {
                            ToolTipText = a.ToString(), ToolTipMode = MarkerTooltipMode.OnMouseOver
                        };
                        routesOverlay.Markers.Add(marker);
                    }

                    segment.Add(prevpoint);
                    segment.Add(item);
                    prevpoint = item;
                    a++;
                }
                GMapRoute seg = new GMapRoute(segment, "segment" + a.ToString());
                seg.Stroke           = new Pen(Color.Yellow, 4);
                seg.Stroke.DashStyle = System.Drawing.Drawing2D.DashStyle.Custom;
                seg.IsHitTestVisible = true;
                routetotal           = routetotal + (float)seg.Distance;
                //if (CHK_grid)
                //{
                routesOverlay.Routes.Add(seg);
                //}
                //else
                //{
                //    seg.Dispose();
                //}

                segment.Clear();
            }

            if (CHK_footprints.Checked)
            {
                routesOverlay.Markers.Add(GMapMarkerOverlap);
            }

            /*      Old way of drawing route, incase something breaks using segments
             * GMapRoute wproute = new GMapRoute(list2, "GridRoute");
             * wproute.Stroke = new Pen(Color.Yellow, 4);
             * if (chk_grid.Checked)
             *  routesOverlay.Routes.Add(wproute);
             */

            // turn radrad = tas^2 / (tan(angle) * G)
            // float v_sq = (float)(((float)NUM_UpDownFlySpeed.Value / CurrentState.multiplierspeed) * ((float)NUM_UpDownFlySpeed.Value / CurrentState.multiplierspeed));
            // float turnrad = (float)(v_sq / (float)(9.808f * Math.Tan(35 * deg2rad)));

            // Update Stats
            if (DistUnits == "Feet")
            {
                // Area
                float area = (float)calcpolygonarea(list) * 10.7639f; // Calculate the area in square feet
                lbl_area.Text = area.ToString("#") + " ft^2";
                if (area < 21780f)
                {
                    lbl_area.Text = area.ToString("#") + " ft^2";
                }
                else
                {
                    area = area / 43560f;
                    if (area < 640f)
                    {
                        lbl_area.Text = area.ToString("0.##") + " acres";
                    }
                    else
                    {
                        area          = area / 640f;
                        lbl_area.Text = area.ToString("0.##") + " miles^2";
                    }
                }

                // Distance
                float distance = routetotal * 3280.84f; // Calculate the distance in feet
                if (distance < 5280f)
                {
                    lbl_distance.Text = distance.ToString("#") + " ft";
                }
                else
                {
                    distance          = distance / 5280f;
                    lbl_distance.Text = distance.ToString("0.##") + " miles";
                }

                lbl_spacing.Text          = (NUM_spacing * 3.2808399m).ToString("#") + " ft";
                lbl_grndres.Text          = inchpixel;
                lbl_distbetweenlines.Text = (NUM_Distance * 3.2808399m).ToString("0.##") + " ft";
                lbl_footprint.Text        = feet_fovH + " x " + feet_fovV + " ft";
                //lbl_turnrad.Text = (turnrad * 2 * 3.2808399).ToString("0") + " ft";
                lbl_gndelev.Text = (mingroundelevation * 3.2808399).ToString("0") + "-" + (maxgroundelevation * 3.2808399).ToString("0") + " ft";
            }
            else
            {
                // Meters
                lbl_area.Text             = calcpolygonarea(list).ToString("#") + " m^2";
                lbl_distance.Text         = routetotal.ToString("0.##") + " km";
                lbl_spacing.Text          = NUM_spacing.ToString("#") + " m";
                lbl_grndres.Text          = TXT_cmpixel;
                lbl_distbetweenlines.Text = NUM_Distance.ToString("0.##") + " m";
                lbl_footprint.Text        = TXT_fovH + " x " + TXT_fovV + " m";
                //lbl_turnrad.Text = (turnrad * 2).ToString("0") + " m";
                lbl_gndelev.Text = mingroundelevation.ToString("0") + "-" + maxgroundelevation.ToString("0") + " m";
            }

            try
            {
                // speed m/s
                var speed = ((float)NUM_UpDownFlySpeed / CurrentState.multiplierspeed);
                // cmpix cm/pixel
                var cmpix = float.Parse(TXT_cmpixel.TrimEnd(new[] { 'c', 'm', ' ' }));
                // m pix = m/pixel
                var mpix = cmpix * 0.01;
                // gsd / 2.0
                var minmpix = mpix / 2.0;
                // min sutter speed
                var minshutter = speed / minmpix;
                //lbl_minshutter.Text = "1/" + (minshutter - minshutter % 1).ToString();
            }
            catch { }

            double flyspeedms = CurrentState.fromSpeedDisplayUnit((double)NUM_UpDownFlySpeed);

            lbl_pictures.Text = images.ToString();
            lbl_strips.Text   = ((int)(strips / 2)).ToString();
            double seconds = ((routetotal * 1000.0) / ((flyspeedms) * 0.8));

            // reduce flying speed by 20 %
            lbl_flighttime.Text  = secondsToNice(seconds);
            seconds              = ((routetotal * 1000.0) / (flyspeedms));
            lbl_photoevery.Text  = secondsToNice(((double)NUM_spacing / flyspeedms));
            map.HoldInvalidation = false;
            if (!isMouseDown && sender != NUM_angle)
            {
                map.ZoomAndCenterMarkers("routes");
            }

            CalcHeadingHold();

            map.Invalidate();
        }