O.T.: Capturar coordenadas de GPS (marca Garmin)

234 views
Skip to first unread message

Guillermo Gimenez

unread,
Feb 23, 2012, 10:52:54 AM2/23/12
to VFP Grupo
Buenos dias compañeros, me toco hacer una pequeña actualizacion a un sistema de Gestion Comercial, para poder registrar las coordenadas (de la residencia de los clientes) grabadas en un aparato GPS (marca Garmin, especifico la marca porque no se si es lo mismo para todas), para proximas visitas, y facil localizacion via GoogleMaps (o similar). Los datos son grabados en un archivo con extensión ".gpx" (current.gpx para garmin), guardado en la memoria (flash) interna del equipo. El siguiente programita, lee dicho archivo y guarda los datos en un cursor local. Adjunto el archivo current.gpx para realizar las pruebas. Un abrazo.
 
Guille
 
CREATE CURSOR
_TMP_GPS(NOMBRE C(80),LATITUD C(15),LONGITUD C(15))
LOCAL
XDOC AS MSXML2.DOMDOCUMENT
CLEAR
*!* Creamos un objeto basado en MSXML
XDOC=
CREATEOBJECT('MSXML2.DOMdocument')
*!* Cargamos el archivo XML a procesar
XDOC.
LOAD(GETFILE('GPX,XML'))
*!* Llamamos a la función LeerDatos pasándole el nodo raíz
LEERDATOS(XDOC.DOCUMENTELEMENT.CHILDNODES)
SELECT
_TMP_GPS
BROW
FUNCTION
LEERDATOS
LPARAMETERS
ROOT AS MSXML2.IXMLDOMNODE
LOCAL
CHILD AS MSXML2.IXMLDOMNODE
*!* Aqui se procesan los nodos
FOR EACH
CHILD IN ROOT
DO CASE
&& El Nodo 'WPT' contiene las coordenadas del registro
CASE 'WPT'$UPPER(CHILD.NODENAME)
INSERT INTO _TMP_GPS(LATITUD,LONGITUD) VALUE(CHILD.ATTRIBUTES.ITEM(0).TEXT,CHILD.ATTRIBUTES.ITEM(1).TEXT)
&& El nodo 'NAME' contiene el nombre del cliente (entidad, empresa, etc) registrado
CASE UPPER(CHILD.NODENAME)='NAME'
REPLACE _TMP_GPS.NOMBRE WITH CHILD.TEXT
ENDCASE
*** Si el nodo que estamos procesando tiene descendencia volvemos a llamar a la función Leerdatos pasandole el nodo actual
IF CHILD.HASCHILDNODES
LEERDATOS(CHILD.CHILDNODES)
ENDIF
ENDFOR
ENDFUNC
 
Current.gpx

edgar suarez kummers

unread,
Feb 23, 2012, 11:02:51 AM2/23/12
to publice...@googlegroups.com
Buenas Guillermo:

Yo le genero un *.KML desde VFP porque con este luego puedes crear las rutas.

Adicional a eso no olvides que primero se escribe la longitud y luego la latitud, con signos y todo ... o sea sur con menos y occidente con menos.

Se ve muy bueno tu código

saludos

edgar
--
edgar suarez kummers

Guillermo Gimenez

unread,
Feb 23, 2012, 11:08:05 AM2/23/12
to publice...@googlegroups.com
Graicas Edgar por esos consejos, es muchas molestia pedirte que expliques un poco mas la idea del KML (no la tengo muy clara)? desde ya mchas gracias.
 
Guille

--- El jue 23-feb-12, edgar suarez kummers <edgark...@gmail.com> escribió:

edgar suarez kummers

unread,
Feb 23, 2012, 11:15:23 AM2/23/12
to publice...@googlegroups.com
Este KML no está generado desde un GPS sino desde VFP.
luego el lector importa este KML y desde allí lo puedes pasar al lenguaje propio de los GPS, que creo es el GPX.
Además fíjate que siempre se dicta por la izquierda la longitud y luego por la derecha la latitud.
Por favor busca en Internet el archivo
SAFE THE ELEPHANTS
que tiene 7000 posiciones emitidas desde aparatos conectados al cuerpo de los elefantes en Kenia.
Ese fue el que me guió para todo

saludos

edgar



<?xml version="1.0" encoding="UTF-8"?>
<Document>
<Folder>
<name>Waypoints</name>
<Placemark>
<name>directo uno                   </name>
<description>*punto b                        > punto c                       *</description>
<TimeStamp>
<when>2000-01-02T09:00:00Z</when>
</TimeStamp>
<Point>
<coordinates>0,-3</coordinates>
</Point>
</Placemark>
<Placemark>
<name>directo uno                   </name>
<description>*punto c                        > punto d                       *</description>
<TimeStamp>
<when>2000-01-03T09:00:00Z</when>
</TimeStamp>
<Point>
<coordinates>-3,0</coordinates>
</Point>
</Placemark>
<Placemark>
<name>directo uno                   </name>
<description>*punto d                        > punto e                       *</description>
<TimeStamp>
<when>2000-01-04T09:00:00Z</when>
</TimeStamp>
<Point>
<coordinates>0,3</coordinates>
</Point>
</Placemark>
<Placemark>
<name>directo uno                   </name>
<description>*punto e                        > punto b                       *</description>
<TimeStamp>
<when>2000-01-05T09:00:00Z</when>
</TimeStamp>
<Point>
<coordinates>3,0</coordinates>
</Point>
</Placemark>
<Placemark>
<name>directo uno                   </name>
<description>*punto b                        > l u g a r  s i n  n o m b r e *</description>
<TimeStamp>
<when>2000-01-06T09:00:00Z</when>
</TimeStamp>
<Point>
<coordinates>6,3</coordinates>
</Point>
</Placemark>
<Placemark>
<name>directo uno                   </name>
<description>*punto b                        > l u g a r  s i n  n o m b r e *</description>
<TimeStamp>
<when>2000-01-06T09:00:00Z</when>
</TimeStamp>
<Point>
<coordinates>0,-3</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>
--
edgar suarez kummers

Javier Brumatti

unread,
Mar 8, 2012, 4:28:01 PM3/8/12
to publice...@googlegroups.com
Aprovecho tu generosidad Guillermo, pero lo que intento hacer es al reves.. teniendo una base de datos de los clientes, subirlas automaticamente a un GPS.
Si sabes algo al repecto te agradeceria alguna pista..
Por ahora he llegado a obtener longitud y latitud de las direcciones, estoy viendo como subirlas a un gps.. por lotes por supuesto

Saludos
Javier

El 23/02/2012 12:52 p.m., Guillermo Gimenez escribió:
Buenos dias compañeros, me toco hacer una pequeña actualizacion a un sistema de Gestion Comercial, para poder registrar las coordenadas (de la residencia de los clientes) grabadas en un aparato GPS (marca Garmin, especifico la marca porque no se si es lo mismo para todas), para proximas visitas, y facil localizacion via GoogleMaps (o similar). Los datos son grabados en un archivo con extensión ".gpx" (current.gpx para garmin), guardado en la memoria (flash) interna del equipo. El siguiente programita, lee dicho archivo y guarda los datos en un cursor local. Adjunto el archivo current.gpx para realizar las pruebas. Un abrazo.
 
Guille
 
CREATE CURSOR _TMP_GPS(NOMBRE C(80),LATITUD C(15),LONGITUD C(15))
LOCAL XDOC AS MSXML2.DOMDOCUMENT
CLEAR
*!* Creamos un objeto basado en MSXML
XDOC=CREATEOBJECT('MSXML2.DOMdocument')
*!* Cargamos el archivo XML a procesar
XDOC.LOAD(GETFILE('GPX,XML'))
*!* Llamamos a la función LeerDatos pasándole el nodo raíz
LEERDATOS(XDOC.DOCUMENTELEMENT.CHILDNODES)
SELECT _TMP_GPS
BROW
FUNCTION LEERDATOS
LPARAMETERS ROOT AS MSXML2.IXMLDOMNODE
LOCAL CHILD AS MSXML2.IXMLDOMNODE
*!* Aqui se procesan los nodos
FOR EACH CHILD IN ROOT
DO CASE
&& El Nodo 'WPT' contiene las coordenadas del registro
CASE 'WPT'$UPPER(CHILD.NODENAME)
INSERT INTO _TMP_GPS(LATITUD,LONGITUD) VALUE(CHILD.ATTRIBUTES.ITEM(0).TEXT,CHILD.ATTRIBUTES.ITEM(1).TEXT)
&& El nodo 'NAME' contiene el nombre del cliente (entidad, empresa, etc) registrado
CASE UPPER(CHILD.NODENAME)='NAME'
REPLACE _TMP_GPS.NOMBRE WITH CHILD.TEXT
ENDCASE
*** Si el nodo que estamos procesando tiene descendencia volvemos a llamar a la función Leerdatos pasandole el nodo actual
IF CHILD.HASCHILDNODES
LEERDATOS(CHILD.CHILDNODES)
ENDIF
ENDFOR
ENDFUNC
 

--
Este mensaje ha sido analizado en busca
de virus y otros contenidos peligrosos,
y se considera que está limpio.

--
Este mensaje ha sido analizado en busca
de virus y otros contenidos peligrosos,
y se considera que está limpio.
Reply all
Reply to author
Forward
0 new messages