Buenas, os voy a poner los pasos para leer las coordenadas del GPS.
Las coordenadas se obtienen mediante el puerto COM, que tenga configurado el PDA para acceder al GPS. En mi caso es el COM4, eso lo mirais en la configuración del PDA. (Si no lo encontrais , id probando :D )
Bueno, al lio!
En el form añadir dos labels, txtLong y txtLat. Un botón llamado btnEmp. Además añadir un control SerialPort y un Timer.
Ahora pasamos a codificar.
Primero añadimos las librerias:
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.IO.Ports
Creamos las variables:
#Region "Variables"Ahora vamos a crear el constructor.
Public Latitud As String
Public Longitud As String
#End Region
#Region "Constructor"Creamos el código del botón, se limitara a apagar o encender el Timer:
Public Sub New()
' Esto es necesario
InitializeComponent()
' Aqui intentamos abri el puerto
Try
SerialPort1.PortName = "COM4"
SerialPort1.Open()
Catch ex As Exception
MessageBox.Show(ex.Message)
Timer1.Enabled = False
btnEmp.Text = "Empezar"
Return
End Try
End Sub
#End Region
Private Sub btnEmp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEmp.ClickBueno ya nos queda configurar el Timer. Por el puerto Com entran muchas lineas de datos llamadas NEMA.
'Comprobamos el estado del timer y lo invertimos.
If Timer1.Enabled = True Then
Timer1.Enabled = False
Else
Timer1.Enabled = True
End If
If btnEmp.Text = "Empezar" Then
btnEmp.Text = "Parar"
Else
btnEmp.Text = "Empezar"
End If
End Sub
El código comprueba en primer luga, si el puerto serie está abierto , si lo es, lee la salida de datos en una cadena. Cada linea se separa con el simbolo del dolar $ . La cadena que nos interes, comienza por "GPGGA"; este subcadena contiene la latitud y la longitud, además de más información, separada por comas.
Este es el código:
Private Sub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If SerialPort1.IsOpen Then
'En esta variable, insertamos todo lo leido del Puerto.
Dim datos As String = SerialPort1.ReadExisting()
'Aqui creamos las diferentes lineas, basandonos en el simbolo del dolar
Dim strArr() As String = datos.Split("$")
Dim i As Integer = 0
If strArr.Length > 1 Then
Try
For i = 0 To strArr.Length
'Ahora obtenemos los datos, separados por las comas.
Dim strTemp As String = strArr(i)
Dim lineArr() As String = strTemp.Split(",")
'Si la linea es GPGGA, cojemos los bloques de cadena 2 y 4 (latidud y longitud) y pasamos los datos obtenidos a coordenadas UTM.
If (lineArr(0) = "GPGGA") Then
Try
Dim dLat As Decimal
Dim dLon As Decimal
dLat = Convert.ToDecimal(lineArr(2))
dLat = dLat / 100
Dim lat() As String = dLat.ToString().Split(".")
Latitud = lat(0).ToString() + "." + ((Convert.ToDouble(lat(1)) / 60)).ToString("#####")
txtLat.Text = Latitud
dLon = Convert.ToDecimal(lineArr(4))
dLon = dLon / 100
Dim lon() As String = dLon.ToString().Split(".")
Longitud = lon(0).ToString() + "." + ((Convert.ToDouble(lon(1)) / 60)).ToString("#####")
txtLong.Text = Longitud
Catch
' Si no podemos leer el GPS
'txtLat.Text = "No puedo leer GPS "
'txtLong.Text = "No puedo leer GPS"
End Try
End If
Next
Catch
'No hacemos nada
End Try
End If
Else
txtLat.Text = "Puerto COM Cerrado"
txtLong.Text = "Puerto COM Cerrado"
End If
End Sub
Ya podeís leer las coordenadas de vuestro GPS!.