📄 gpspet.cs
字号:
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 + -