FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Importar fichero GPX utilizando XML Mapper
Hola, después de leer el artículo de de Neftalí http://neftali.clubdelphi.com/cargar...r-a-los-datos/ (cojonudo por cierto) sobre cómo cargar ficheros GPX me decidí a implementarlo en mi programa.
Utilizo los ficheros GPX para sincronizarlos con las fotografías y geolocalizarlas. Creo un archivo de transformación utilizando XML Mapper partiendo de un fichero GPX. Sigo al dedillo el artículo y todo funciona correctamente. Cuando creo que todo va bien, arrango mi GPS Logger aprovechando un viaje y genero 8 horas de waypoints que exporto a GPX al llegar a casa. Cuando arranco el programa me doy cuenta de que el archivo de transformación esta mal, ya que el GPS logger añade rutas cuando pierde conexión con los satelites, es decir, en el mismo GPX hay varios registros de ruta <trk> que a su vez tienen sus <trkseg> con los waypoints de la ruta. El caso y sin liarme mucho, es que genero otro fichero de transformación tal que así: Con lo que tenemos de resultado: Son dos DBGrids donde mostramos las tracks del GPX y los waypoints de cada una de las tracks... automáticamente al pinchar en una track lista los waypoints que contiene en el otro DBGrid. He trasteado con MySQL y utilizo SQLite3 para mi aplicación, pero nunca había trasteado con los datacontrols... lo que necesito en este caso es que en un DBGrid, me muestre los waypoints asociados a todas las rutas. Es decir que lea los DATASETS trkpt de todas las tracks y las muestre una tras de otra. Alguien me podría decir por donde tirar? sería una consulta del estilo ADOQuery? no se si al final tendré que leer registro a registro "a mano", seguro que hay otra forma. La verdad es que estoy bastante perdido con estas cosas Muchas gracias de antemano y un saludo! |
#2
|
||||
|
||||
Cita:
Cita:
Es verdad que el ejemplo de ese artículo trabaja con ficheros de track que contienen puntos (2 nivelesa), pero yo mismo, al igual que tú, a posteriori me he encontrado con ficheros cuya estructura es más compleja. Fichero del artículo: TRACK _________=> N PUNTOS Por ejemplo, en el ejemplo que subo al final, la estructura es más parecida à la que tú te encuentras. Un fichero de track que tienen N Waypoints y N Segmentos, y cada segmento tienen n puntos. Fichero adjunto: TRACK (< gpx >) _________=> N WAYPOINTS (< wpt >) _________=> N SEGMENTOS (< trk >) __________________=> N PUNTOS (< trkpt >) En ese caso el fichero XTR se genera de la misma forma, pero es un poco más complejo: Y la estructiura en formato DATASET sería esta: Te adjunto un ejemplo Delphi con los DBGrids para leer eso, pero es lo mismo que en el ejemplo inicial, simplemente que añadiendo un nivel más: (dentro está el fichero de transformación y una ruta de ejemplo) Espero que te aclare algo. Un saludo.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
, gracias Germán por el ejemplo.
|
#4
|
|||
|
|||
Hola Neftalí, gracias por responder tan rápido y por tu ejemplo! más o menos es lo que he hecho. Mi problema es que necesito un DBGrid con tooooodos los puntos independientemente del track que sea.
En tu ejemplo hay: T6758644-0 T6758644-1 T6758644-2 ... etc Cada uno de ellos contiene puntos de la ruta, cuando pincho en cada uno , en tu DBGrid4 me muestra los puntos correspondientes a ese track. El tema sería saber si hay alguna manera de mostrarlos todos en un DBGrid sin recorrerlos a mano uno a uno? Para el programa que estoy haciendo necesito simplemente eso, un DBGrid con todos los puntos de un GPX, independientemente del track donde esten. Muchas gracias por tu ayuda! |
#5
|
||||
|
||||
Cita:
Pero se solventa realizando iun recorrido de todos los segmentos y a su vez un recorrido de todos los puntos de cada segmente. Puedes usar un TClientDataset, pore ejemplo, para almacenarlos todos. Algo así:
cdsAllPoints es un TClientDataset con 4 campos (lat, lon, ele y time). Por lo que he visto no es que sea al perder señal, sino cada 500 puntos. Muchos dispositivos antiguos (sobre todo Garmin que se consideran estandard) almacenaban como máximo 500 puntos por track. Sea uno de estos o sea uno nuevo que lo haga por compatibilidad, el tuyo está generando diferentes segmentos cuando llega a ese límite. Crea un nuevo dataset como te he dicho y con ese procedimiento puedes hacer el recorrido. El resultado es el siguiente: ------------------------------- Segmento: T6758644-0 ->500 puntos Segmento: T6758644-1 ->500 puntos Segmento: T6758644-2 ->500 puntos Segmento: T6758644-3 ->500 puntos Segmento: T6758644-4 ->500 puntos Segmento: T6758644-5 ->500 puntos Segmento: T6758644-6 ->500 puntos Segmento: T6758644-7 ->357 puntos TOTAL DE PUNTOS: 3857 -------------------------------
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
|||
|
|||
Genial! muchísimas gracias ! nunca había usado esos componentes, me has ayudado mucho!
Cita:
De hecho, probándolo cerca de casa establezco el refresco de posición a 1 segundo y tengo GPX de un solo track y 3500 puntos por ejemplo. Por ejemplo en el último GPX de unas 8 horas... Track: 20180107-123330(1) ->443 puntos Track: 20180107-123330(2) ->244 puntos Track: 20180107-123330(3) ->1689 puntos Track: 20180107-123330(4) ->631 puntos .... Track: 20180107-123330(22) ->2 puntos Track: 20180107-123330(23) ->1535 puntos TOTAL DE PUNTOS: 5437 El caso es que ya funciona con múltiples tracks, y con DBGrid1->DataSource->DataSet->EnableControls(); y DBGrid1->DataSource->DataSet->DisableControls(); gana mil en velocidad Muchas gracias por todo Neftalí! Un saludo! |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Error al importar fichero txt | jafera | Varios | 28 | 14-07-2014 16:30:34 |
DELPHI6 Importar fichero codificado UTF-8 a Dbase | Jose Manuel | Varios | 0 | 16-05-2011 18:46:14 |
Importar fichero XML | cincosoft | OOP | 1 | 08-02-2009 10:29:58 |
Importar fichero .dat desde cobol | julian_ch | Varios | 0 | 08-08-2005 17:43:17 |
importar fichero consumo telefonica | tonid | Varios | 3 | 11-09-2003 09:49:28 |
|