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.

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]

3 comentarios :

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

    ResponderBorrar
  2. Me gustaría saber si ya el proyecto esta terminado y se pueden localizar teléfonos por medio de este método.

    Gracias

    ResponderBorrar
  3. me gustaria saber si el ptoyecto esta completo y IFOX donde lo puedo conseguir

    ResponderBorrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.