⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpspet.cs

📁 嵌入式终端的gps定位程序
💻 CS
📖 第 1 页 / 共 3 页
字号:
            int imageY = Convert.ToInt32((mapY - minmapy) / (maxmapy - minmapy) * (maxy - miny) + miny);
            if (imageX > 0 && imageY > 0)
            {
                if (!IsTwoPoints)
                {
                    IsTwoPoints = true;
                    g.FillEllipse(brush, imageX, imageY, 2, 2);
                    points[0].X = imageX;
                    points[0].Y = imageY;
                }
                else
                {
                    points[1].X = imageX;
                    points[1].Y = imageY;
                    g.DrawLine(pen,points[0].X,points[0].Y,points[1].X,points[1].Y);
                    points[0].X = imageX;
                    points[0].Y = imageY;
                }
                pictureBox_map.Image = imgtrace;
            }
            g.Dispose();

        }

        /// <summary>
        /// 显示定位精度
        /// </summary>
        /// <param name="PDOP"></param>
        private void GPS_PDOPReceived(double PDOP)   //显示定位精度
        {
            label_pdop1.Text = Convert.ToString(PDOP) + "米";
            label_pdop2.Text = Convert.ToString(PDOP) + "米";
            label_pdop3.Text = Convert.ToString(PDOP) + "米";
        }
        /// <summary>
        /// 显示可见卫星数
        /// </summary>
        /// <param name="SatInView"></param>
        private void GPS_SatellitesInViewReceived(int SatInView)   //显示可见卫星数
        {
            label_SateInView2.Text = Convert.ToString(SatInView) + "个";
            label_SateInView3.Text = Convert.ToString(SatInView) + "个";

        }

        /// <summary>
        /// 接收卫星信息
        /// </summary>
        private void GPS_SatelliteReceived(int pseudoRandomCode, int azimuth, int elevation, int signalToNoiseRatio)
        {

            int SNR = signalToNoiseRatio;
            double Angle = Convert.ToDouble(-azimuth) * Math.PI / 180;
            Point Origin = new Point((int)(pictureBox_ActiveSate.Width * 0.5), (int)(pictureBox_ActiveSate.Height * 0.5));
            int moveY = elevation;
            double sinA = Math.Sin(Angle);
            double cosA = Math.Cos(Angle);
            int r = 90;
            Graphics g = Graphics.FromImage(imgSignals);
            SolidBrush brush0 = new SolidBrush(Color.Black);//字的颜色
            SolidBrush brush1 = new SolidBrush(Color.Silver);
            SolidBrush brush2 = new SolidBrush(Color.Brown);
            SolidBrush brush3 = new SolidBrush(Color.Gray);
            SolidBrush brush4 = new SolidBrush(Color.Yellow);
            SolidBrush brush5 = new SolidBrush(Color.GreenYellow);
            SolidBrush brush6 = new SolidBrush(Color.ForestGreen);
            SolidBrush brush7 = new SolidBrush(Color.SpringGreen);
            SolidBrush brush8 = new SolidBrush(Color.Lime);
            SolidBrush brush9 = new SolidBrush(Color.Gold);
            SolidBrush brush10 = new SolidBrush(Color.Orange);
            for (int i = 1; i <= 32; i++)
            {
                if (pseudoRandomCode == i)
                {
                    if (display[i])//该卫星已存在,即已经画过,需要重画
                    {
                        //先将原位置以背景色填充
                        SolidBrush brush11 = new SolidBrush(Color.Black);
                        g.FillEllipse(brush11, XX[i] - 8, YY[i] - 8, 16, 16);
                        ///////////////////
                        //与其他卫星有重合,需将其他卫星重画,否则被遮盖的其他卫星的某个部分将被背景色填充
                        for (int k = 1; k <= 32; k++)
                        {
                            if (i != k)
                            {
                                for (int x = XX[i] - 8; x <= XX[i] + 8; x++)
                                {
                                    for (int y = YY[i] - 8; y <= YY[i] + 8; y++)
                                    {
                                        if (x >= XX[k] - 8 && x <= XX[k] + 8 && y >= YY[k] - 8 && y <= YY[k] + 8)
                                        {
                                            g.FillEllipse(brush[k], XX[k] - 8, YY[k] - 8, 16, 16);
                                            g.DrawString(Convert.ToString(k), new Font("Verdana", 9, FontStyle.Regular), brush0, XX[k] - 4, YY[k] - 6);
                                        }
                                    }
                                }
                            }
                        }
                        /////////////////////
                        //重画该卫星
                        XX[i] = (int)((Origin.X - Origin.X) * cosA + (Origin.Y - r + moveY - Origin.Y) * sinA) + Origin.X;
                        YY[i] = (int)(-(Origin.X - Origin.X) * sinA + (Origin.Y - r + moveY - Origin.Y) * cosA) + Origin.Y;
                        if (SNR <= 10)
                        {
                            brush[i] = brush1;
                            g.FillEllipse(brush1, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 10 && SNR <= 15)
                        {
                            brush[i] = brush2;
                            g.FillEllipse(brush2, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 15 && SNR <= 20)
                        {
                            brush[i] = brush3;
                            g.FillEllipse(brush3, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 20 && SNR <= 25)
                        {
                            brush[i] = brush4;
                            g.FillEllipse(brush4, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 25 && SNR <= 30)
                        {
                            brush[i] = brush5;
                            g.FillEllipse(brush5, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 30 && SNR <= 35)
                        {
                            brush[i] = brush6;
                            g.FillEllipse(brush6, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 35 && SNR <= 40)
                        {
                            brush[i] = brush7;
                            g.FillEllipse(brush7, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 40 && SNR <= 45)
                        {
                            brush[i] = brush8;
                            g.FillEllipse(brush8, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 45 && SNR <= 50)
                        {
                            brush[i] = brush9;
                            g.FillEllipse(brush9, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 50 && SNR <= 90)
                        {
                            brush[i] = brush10;
                            g.FillEllipse(brush10, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        g.DrawString(Convert.ToString(i), new Font("Verdana", 9, FontStyle.Regular), brush0, XX[i] - 4, YY[i] - 6);
                    }
                    else  //该卫星之前不存在,第一次画
                    {
                        display[i] = true;
                        XX[i] = (int)((Origin.X - Origin.X) * cosA + (Origin.Y - r + moveY - Origin.Y) * sinA) + Origin.X;
                        YY[i] = (int)(-(Origin.X - Origin.X) * sinA + (Origin.Y - r + moveY - Origin.Y) * cosA) + Origin.Y;
                        if (SNR <= 10)
                        {
                            brush[i] = brush1;
                            g.FillEllipse(brush1, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 10 && SNR <= 15)
                        {
                            brush[i] = brush2;
                            g.FillEllipse(brush2, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 15 && SNR <= 20)
                        {
                            brush[i] = brush3;
                            g.FillEllipse(brush3, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 20 && SNR <= 25)
                        {
                            brush[i] = brush4;
                            g.FillEllipse(brush4, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 25 && SNR <= 30)
                        {
                            brush[i] = brush5;
                            g.FillEllipse(brush5, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 30 && SNR <= 35)
                        {
                            brush[i] = brush6;
                            g.FillEllipse(brush6, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 35 && SNR <= 40)
                        {
                            brush[i] = brush7;
                            g.FillEllipse(brush7, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 40 && SNR <= 45)
                        {
                            brush[i] = brush8;
                            g.FillEllipse(brush8, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 45 && SNR <= 50)
                        {
                            brush[i] = brush9;
                            g.FillEllipse(brush9, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        else if (SNR > 50 && SNR <= 90)
                        {
                            brush[i] = brush10;
                            g.FillEllipse(brush10, XX[i] - 8, YY[i] - 8, 16, 16);
                        }
                        g.DrawString(Convert.ToString(i), new Font("Verdana", 9, FontStyle.Regular), brush0, XX[i] - 4, YY[i] - 6);
                    }
                    break;
                   
                }
            }
            pictureBox_ActiveSate.Image = imgSignals;
        }

        //private void GPS_SatellitesUsed(int SatInUse)
        //{
        //    textBoxSatInUse.Text = Convert.ToString(SatInUse);
        //}
        /// <summary>
        /// 显示速度
        /// </summary>
        /// <param name="Speed"></param>
        private void GPS_SpeedReceived(double Speed)      //显示速度
        {
            string spd = Convert.ToString(Speed);
            label_speed1.Text = spd + "公里/小时";
            label_speed3.Text = spd.Substring(0, spd.IndexOf(".") + 2) + "公里/小时";
        }

        /// <summary>
        /// 显示航向,变化罗盘方向
        /// </summary>
        /// <param name="Bearing"></param>
        private void GPS_BearingReceived(double Bearing)  //显示航向
        {
            label_bearing.Text = Convert.ToString(Bearing) + "度";



            //罗盘变化
            double Angle = Bearing * Math.PI / 180;
            double sinA = Math.Sin(Angle);
            double cosA = Math.Cos(Angle);
            Point Origin = new Point((int)(pictureBox_dir.Width * 0.5), (int)(pictureBox_dir.Height * 0.5));
            int r = 78;
            double offset = Math.Sqrt(2) * (r + Math.Sqrt(35 * 35 + 16 * 16) * 0.5) * 0.5;

            //北
            double northX = (Origin.X - Origin.X) * cosA + (Origin.Y - r - 3 - label_north.Height * 0.5 - Origin.Y) * sinA + Origin.X;
            double northY = -(Origin.X - Origin.X) * sinA + (Origin.Y - r - 3 - label_north.Height * 0.5 - Origin.Y) * cosA + Origin.Y;
            label_north.Location = new Point(Convert.ToInt32(northX - label_north.Width * 0.5), Convert.ToInt32(northY - label_north.Height * 0.5));


            //东北
            double northeastX = (Origin.X + offset - Origin.X) * cosA + (Origin.Y - offset - Origin.Y) * sinA + Origin.X;
            double northeastY = -(Origin.X + offset - Origin.X) * sinA + (Origin.Y - offset - Origin.Y) * cosA + Origin.Y;
            label_northeast.Location = new Point(Convert.ToInt32(northeastX - label_northeast.Width * 0.5), Convert.ToInt32(northeastY - label_northeast.Height * 0.5));

            //东
            double eastX = (Origin.X + r + 3 + label_east.Width * 0.5 - Origin.X) * cosA + (Origin.Y - Origin.Y) * sinA + Origin.X;
            double eastY = -(Origin.X + r + 3 + label_east.Width * 0.5 - Origin.X) * sinA + (Origin.Y - Origin.Y) * cosA + Origin.Y;
            label_east.Location = new Point(Convert.ToInt32(eastX - label_east.Width * 0.5), Convert.ToInt32(eastY - label_east.Height * 0.5));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -