使用.NET语言编写封装的GPS NMEA协议解析库,开发人员只需设置好串口参数,即可以事件方式处理GPS信息。
VB.NET代码
Public Class Form1
Private WithEvents gpsobj As Gps.Nmea.GpsProcess
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
gpsobj.Stops()
gpsobj.Dispose()
End
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.CheckForIllegalCrossThreadCalls = False
gpsobj = New Gps.Nmea.GpsProcess(New IO.Ports.SerialPort("COM3", 9600, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One))
gpsobj.Starts()
End Sub
Private Sub gpsobj_GpggaArrive(ByVal e As Gps.Nmea.NmeaGpgga) Handles gpsobj.GpggaArrive
Dim x As Gps.Nmea.NmeaGpgga
x = e
Me.TextBox1.Text = x.GpsUtcTime.ToString
Me.TextBox2.Text = x.Latitude
Me.TextBox3.Text = x.GpsLatitudeType.ToString
Me.TextBox4.Text = x.Longitude
Me.TextBox5.Text = x.GpsLongitudeType.ToString
Me.TextBox6.Text = x.GpsCurrentStatus.ToString
Me.TextBox7.Text = x.UseSatelliteCount
Me.TextBox8.Text = x.HorizontalPrecisionFactor
Me.TextBox9.Text = x.AntennaHeightAboveSeaLevel
Me.TextBox10.Text = x.GroundLevelHeight
Me.TextBox11.Text = x.DifferentialGpsData
Me.TextBox12.Text = x.DifferentialReferenceBaseStationLabel
End Sub
Private Sub gpsobj_GpgllArrive(ByVal e As Gps.Nmea.NmeaGpgll) Handles gpsobj.GpgllArrive
Me.TextBox29.Text = e.Latitude
Me.TextBox30.Text = e.GpsLatitudeType.ToString
Me.TextBox31.Text = e.Longitude
Me.TextBox32.Text = e.GpsLongitudeType.ToString
Me.TextBox33.Text = e.GpsUtcTime.ToString
End Sub
Private Sub gpsobj_GpgsaArrive(ByVal e As Gps.Nmea.NmeaGpgsa) Handles gpsobj.GpgsaArrive
Me.TextBox34.Text = e.GpsPositioningMode.ToString
Me.TextBox35.Text = e.GpsPositioningType.ToString
Me.TextBox36.Text = e.ChannelPRN(1)
Me.TextBox37.Text = e.ChannelPRN(2)
Me.TextBox38.Text = e.ChannelPRN(3)
Me.TextBox39.Text = e.ChannelPRN(4)
Me.TextBox40.Text = e.ChannelPRN(5)
Me.TextBox41.Text = e.ChannelPRN(6)
Me.TextBox42.Text = e.ChannelPRN(7)
Me.TextBox43.Text = e.ChannelPRN(8)
Me.TextBox44.Text = e.ChannelPRN(9)
Me.TextBox45.Text = e.ChannelPRN(10)
Me.TextBox46.Text = e.ChannelPRN(11)
Me.TextBox47.Text = e.ChannelPRN(12)
Me.TextBox48.Text = e.PDOP
Me.TextBox49.Text = e.HDOP
Me.TextBox50.Text = e.VDOP
End Sub
Private Sub gpsobj_GprmcArrive(ByVal e As Gps.Nmea.NmeaGprmc) Handles gpsobj.GprmcArrive
Me.TextBox18.Text = e.GpsUtcTime.ToString
Me.TextBox19.Text = e.GpsStatus.ToString
Me.TextBox20.Text = e.Latitude
Me.TextBox21.Text = e.GpsLatitudeType.ToString
Me.TextBox22.Text = e.Longitude
Me.TextBox23.Text = e.GpsLongitudeType.ToString
Me.TextBox24.Text = e.SpeedKnots & " Knots"
Me.TextBox25.Text = e.Azimuth & "°"
Me.TextBox26.Text = e.GpsUtcDate.ToString
Me.TextBox27.Text = e.MagneticDeclination & "°"
Me.TextBox28.Text = e.MagneticDeclinationDirection.ToString
End Sub
Private Sub gpsobj_GpvtgArrive(ByVal e As Gps.Nmea.NmeaGpvtg) Handles gpsobj.GpvtgArrive
Dim z As Gps.Nmea.NmeaGpvtg
z = e
Me.TextBox14.Text = z.TrueNorthMovementAngle & "°"
Me.TextBox15.Text = z.MagneticNorthMovementAngle & "°"
Me.TextBox16.Text = z.KnotsHorizontalMovementSpeed & "Knots"
Me.TextBox17.Text = z.kmhHorizontalMovementSpeed & "km/h"
End Sub
Private Sub gpsobj_GpzdaArrive(ByVal e As Gps.Nmea.NmeaGpzda) Handles gpsobj.GpzdaArrive
Dim y As Gps.Nmea.NmeaGpzda
y = e
Me.TextBox13.Text = y.ToString
End Sub
Private Sub TextBox36_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox47.TextChanged, TextBox46.TextChanged, TextBox45.TextChanged, TextBox44.TextChanged, TextBox43.TextChanged, TextBox42.TextChanged, TextBox41.TextChanged, TextBox40.TextChanged, TextBox39.TextChanged, TextBox38.TextChanged, TextBox37.TextChanged, TextBox36.TextChanged
Dim txt As TextBox
txt = CType(sender, TextBox)
If txt.Text <> 0 Then
txt.BackColor = Color.Green
Else
txt.BackColor = Color.Red
End If
End Sub
End Class
C#代码
using System.Diagnostics;
using System;
using System.Xml.Linq;
using System.Windows.Forms;
using System.Collections;
using System.Drawing;
using Microsoft.VisualBasic;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualBasic.CompilerServices;
namespace WindowsApplication1
{
public partial class Form1
{
public Form1()
{
InitializeComponent();
if (defaultInstance == null)
defaultInstance = this;
}
#region Default Instance
private static Form1 defaultInstance;
public static Form1 Default
{
get
{
if (defaultInstance == null)
{
defaultInstance = new Form1();
defaultInstance.FormClosed += new FormClosedEventHandler(defaultInstance_FormClosed);
}
return defaultInstance;
}
set
{
defaultInstance = value;
}
}
static void defaultInstance_FormClosed(object sender, FormClosedEventArgs e)
{
defaultInstance = null;
}
#endregion
private Gps.Nmea.GpsProcess gpsobj;
public void Form1_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
gpsobj.Stops();
gpsobj.Dispose();
ProjectData.EndApp();
}
public void Form1_Load(System.Object sender, System.EventArgs e)
{
this.CheckForIllegalCrossThreadCalls = false;
gpsobj = new Gps.Nmea.GpsProcess(new System.IO.Ports.SerialPort("COM3", 9600, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One));
gpsobj.GpggaArrive += gpsobj_GpggaArrive;
gpsobj.GpgllArrive += gpsobj_GpgllArrive;
gpsobj.GpgsaArrive += gpsobj_GpgsaArrive;
gpsobj.GprmcArrive += gpsobj_GprmcArrive;
gpsobj.GpvtgArrive += gpsobj_GpvtgArrive;
gpsobj.GpzdaArrive += gpsobj_GpzdaArrive;
gpsobj.Starts();
}
private void gpsobj_GpggaArrive(Gps.Nmea.NmeaGpgga e)
{
Gps.Nmea.NmeaGpgga x = default(Gps.Nmea.NmeaGpgga);
x = e;
this.TextBox1.Text = x.GpsUtcTime.ToString();
this.TextBox2.Text = System.Convert.ToString(x.Latitude);
this.TextBox3.Text = x.GpsLatitudeType.ToString();
this.TextBox4.Text = System.Convert.ToString(x.Longitude);
this.TextBox5.Text = x.GpsLongitudeType.ToString();
this.TextBox6.Text = x.GpsCurrentStatus.ToString();
this.TextBox7.Text = System.Convert.ToString(x.UseSatelliteCount);
this.TextBox8.Text = System.Convert.ToString(x.HorizontalPrecisionFactor);
this.TextBox9.Text = System.Convert.ToString(x.AntennaHeightAboveSeaLevel);
this.TextBox10.Text = System.Convert.ToString(x.GroundLevelHeight);
this.TextBox11.Text = System.Convert.ToString(x.DifferentialGpsData);
this.TextBox12.Text = System.Convert.ToString(x.DifferentialReferenceBaseStationLabel);
}
private void gpsobj_GpgllArrive(Gps.Nmea.NmeaGpgll e)
{
this.TextBox29.Text = System.Convert.ToString(e.Latitude);
this.TextBox30.Text = e.GpsLatitudeType.ToString();
this.TextBox31.Text = System.Convert.ToString(e.Longitude);
this.TextBox32.Text = e.GpsLongitudeType.ToString();
this.TextBox33.Text = e.GpsUtcTime.ToString();
}
private void gpsobj_GpgsaArrive(Gps.Nmea.NmeaGpgsa e)
{
this.TextBox34.Text = e.GpsPositioningMode.ToString();
this.TextBox35.Text = e.GpsPositioningType.ToString();
this.TextBox36.Text = e.ChannelPRN(1);
this.TextBox37.Text = e.ChannelPRN(2);
this.TextBox38.Text = e.ChannelPRN(3);
this.TextBox39.Text = e.ChannelPRN(4);
this.TextBox40.Text = e.ChannelPRN(5);
this.TextBox41.Text = e.ChannelPRN(6);
this.TextBox42.Text = e.ChannelPRN(7);
this.TextBox43.Text = e.ChannelPRN(8);
this.TextBox44.Text = e.ChannelPRN(9);
this.TextBox45.Text = e.ChannelPRN(10);
this.TextBox46.Text = e.ChannelPRN(11);
this.TextBox47.Text = e.ChannelPRN(12);
this.TextBox48.Text = System.Convert.ToString(e.PDOP);
this.TextBox49.Text = System.Convert.ToString(e.HDOP);
this.TextBox50.Text = System.Convert.ToString(e.VDOP);
}
private void gpsobj_GprmcArrive(Gps.Nmea.NmeaGprmc e)
{
this.TextBox18.Text = e.GpsUtcTime.ToString();
this.TextBox19.Text = e.GpsStatus.ToString();
this.TextBox20.Text = System.Convert.ToString(e.Latitude);
this.TextBox21.Text = e.GpsLatitudeType.ToString();
this.TextBox22.Text = System.Convert.ToString(e.Longitude);
this.TextBox23.Text = e.GpsLongitudeType.ToString();
this.TextBox24.Text = e.SpeedKnots + " Knots";
this.TextBox25.Text = e.Azimuth + "°";
this.TextBox26.Text = e.GpsUtcDate.ToString();
this.TextBox27.Text = e.MagneticDeclination + "°";
this.TextBox28.Text = e.MagneticDeclinationDirection.ToString();
}
private void gpsobj_GpvtgArrive(Gps.Nmea.NmeaGpvtg e)
{
Gps.Nmea.NmeaGpvtg z = default(Gps.Nmea.NmeaGpvtg);
z = e;
this.TextBox14.Text = z.TrueNorthMovementAngle + "°";
this.TextBox15.Text = z.MagneticNorthMovementAngle + "°";
this.TextBox16.Text = z.KnotsHorizontalMovementSpeed + "Knots";
this.TextBox17.Text = z.kmhHorizontalMovementSpeed + "km/h";
}
private void gpsobj_GpzdaArrive(Gps.Nmea.NmeaGpzda e)
{
Gps.Nmea.NmeaGpzda y = default(Gps.Nmea.NmeaGpzda);
y = e;
this.TextBox13.Text = y.ToString();
}
public void TextBox36_TextChanged(System.Object sender, System.EventArgs e)
{
TextBox txt = default(TextBox);
txt = (TextBox) sender;
if (txt.Text != "0")
{
txt.BackColor = Color.Green;
}
else
{
txt.BackColor = Color.Red;
}
}
}
}
<span style="font-weight: bold; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Gps.DLL库文件,可在我的资源中下载。</span>