Estuve trabajando en un proyecto sobre GPS que me gustaría compartir con ustedes, y surge la pregunta como trabajar con GPS, Google Maps y VFP9.
Por supuesto la respuesta es mas fácil de lo que esperaba, primero configurar el GPS, cada GPS es diferente lo que hay que hacer es indicarle que envíe datos a través GPRS a un IP fija, abrir un puerto en el "receptor" y lograr que escuche ese puerto.
Bueno aquí la primer solución, usando
iFox, excelente herramienta, por supuesto que pueden usar WinSock pero me ha resultado mas complicado.
Nota: Pueden descargar iFox desde este enlace
Aquí el código con IFOX.
*** abrir puerto para escuchar ***
THIS.iFoxSockets = CREATEOBJECT("iFox.Sockets")
THIS.Socket = 0
*** indico el puerto que quiero escuchar en el gps debe indicar enviar datos a ese puerto
THIS.ListenSocket = THIS.iFoxSockets.LISTEN(1123)
IF THIS.ListenSocket <> 0
* THIS.txtServer.VALUE = "Esperando conexión ..." && pueden manejar con un text box
UPDATE gp_gps SET conectado = "Esperando..." && o pueden almacenar en una tabla
THIS.tmrRead.INTERVAL = 400 && un timer que lee el puerto cada cierto tiempo
ELSE
UPDATE gp_gps SET conectado = "Error"
ENDIF
*** codigo del timer ***
LOCAL nSocket, cRes
IF THISFORM.ListenSocket <> 0
nSocket = THISFORM.iFoxSockets.AcceptConnections(THISFORM.ListenSocket)
IF nSocket <> 0
* Aunque es posible en este ejemplo no aceptamos mas de una conexión
THISFORM.iFoxSockets.CLOSE(THISFORM.ListenSocket)
THISFORM.ListenSocket = 0
THISFORM.Socket = nSocket
UPDATE gp_gps SET conectado="Conectado " && + THISFORM.iFoxSockets.GetRemoteHost(nSocket) + ;
" (" + THISFORM.iFoxSockets.GetRemoteHostIP(nSocket) + " )"
ENDIF
ENDIF
IF THISFORM.Socket <> 0
cRes = THISFORM.iFoxSockets.READ(THISFORM.Socket)
IF !EMPTY(cRes)
THISFORM.edtRespuesta.VALUE = cRes + THISFORM.edtRespuesta.VALUE
THISFORM.lbldatos.CAPTION = "Ultimos datos:" + TTOC(DATETIME())
THISFORM.edit1.VALUE = mc_splitgps(cres,puerto)
***
*** el GPS envia todo en una sola cadena lo que hago aca es separar los datos,
*** el GPS envia algo asi:
*** (013666666666BP05000013666666666110106A2309.0321S06419.0954W009.811302384.57000000000L000860AF)
*** el mc_split separa los datos en latitud longitud, fecha, hora velocidad
*** todo es cuestion de observar un poco, por supuesto en cada gps es diferente pero
*** en este caso en particular queda algo asi:
*** 013666666666BP05000013666666666
*** Fecha 110106
*** A23
*** Latitud 09.0321S
*** Longitud 06419.0954W
*** Velocidad 009.8
*** Hora 113023
*** 84.57000000000L000860AF
***
ELSE
IF THISFORM.iFoxSockets.SocketClosed
THISFORM.iFoxSockets.CLOSE(THISFORM.Socket)
THISFORM.Socket = 0
UPDATE gp_gps SET conectado = "Finalizado..."
ENDIF
ENDIF
ENDIF
***
Bueno para que lo puedan ir digiriendo los dejo un rato, en la siguiente entrega, ver los datos en Google Maps.
Bueno hasta aquí la lectura del puerto.
Saludos y hasta la próxima.
Carlos [Caremi66]