6 de enero de 2011

Trabajar con GPS y Google Maps

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.

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]

1 comentario :

  1. PORFA TU PROYECTO PARECE INTERESANTE NOS PUEDES DAR OTRO ADELANTO

    ResponderEliminar