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
|
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.
|
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.GuilleCREATE CURSOR _TMP_GPS(NOMBRE C(80),LATITUD C(15),LONGITUD C(15))LOCAL XDOC AS MSXML2.DOMDOCUMENTCLEAR*!* 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ízLEERDATOS(XDOC.DOCUMENTELEMENT.CHILDNODES)SELECT _TMP_GPSBROWFUNCTION LEERDATOSLPARAMETERS ROOT AS MSXML2.IXMLDOMNODELOCAL CHILD AS MSXML2.IXMLDOMNODE*!* Aqui se procesan los nodosFOR EACH CHILD IN ROOTDO CASE&& El Nodo 'WPT' contiene las coordenadas del registroCASE '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) registradoCASE UPPER(CHILD.NODENAME)='NAME'REPLACE _TMP_GPS.NOMBRE WITH CHILD.TEXTENDCASE*** Si el nodo que estamos procesando tiene descendencia volvemos a llamar a la función Leerdatos pasandole el nodo actualIF CHILD.HASCHILDNODESLEERDATOS(CHILD.CHILDNODES)ENDIFENDFORENDFUNC
--
Este mensaje ha sido analizado en busca
de virus y otros contenidos peligrosos,
y se considera que está limpio.