Ya hace un tiempo que publiqué la aplicación Trackinfo, dedicada a trabajar con tracks y rutas procedentes de dispositivos GPS. Entre las cosas que hace, está la de mostrar el índice IBP de las rutas con las que trabajamos.
¿Qué es el IBPIndex?
Pues el índice IPB, es un valor que se genera a partir de los datos del Track/Ruta (enfocado a bicicleta de montaña o carretera) y que “valora” la dificultad de esa ruta. Para ello calcula infinidad de datos de la ruta (velocidades, tiempos, alturas, porcentajes de desnivel,…) y a partir de ellos genera un índice; Ese es el IBPIndex de la ruta.
La web de IBPIndex ya cuenta con algunos años de historia, y hace poco han llegado a los 500.000 track analizados (¡¡que se dice pronto!!). Es muy conocida en los foros y ambientes de ciclismo.
¿Porqué este cambio?
Bueno, como ya os he dicho, la aplicación hace uso de la Web IBPIndex (además de otras cosas), que es la que realmente calcula el índice. La aplicación es gratuita y a la gente de IBPIndex les ha gustado y me han propuesto, que la aplicación “pase a formar parte de la web” (por decirlo así).
Así que a partir de la próxima versión (1.5b –que estará disponible en breve-) el cambio será efectivo. A partir de ahora podéis encontrar nuevas versiones y seguir las novedades desde la web de IBPIndex o desde aquí mismo:
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Se han corregido algunos bugs de la anterior versión y como cosas más relevantes de la versión nueva están:
Sistema nuevo de Multiidioma para la aplicación donde es más fácil crear nuevos ficheros de idioma.
Ahora el programa permite abrir los formatos de fichero más importantes directamente (sin convertirlos préviamente):
GPS Trackmaker (*.GTM)
Google Earth (*.KML)
OziExplorer (*.PLT)
Garmin Training Center (*.TCX)
Mapsource (*.GDB)
CompeGPS (*.TRK)
GPS Exchange Format (*.GPX)
Alan Map500 TrackLog (*.TRL)
Garmin Mapsource (*.MPS)
Magellan File -eXplorist- (*.UPT)
Swiss Map 25/50/100 (*.XOL)
La descripción completa de la aplicación y las características completas en la página de la aplicación. Desde ahí se puede descargar de forma gratuíta el fichero.
Como siempre las sugerencias, comentarios y demás son bien recibidos.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
TrackInfo es una aplicación que permite obtener información y visualizar sobre un mapa, rutas en formato GPX (GPS eXchange Format). Está pensado (o enfocado) a la carga de archivos que provienen desde un dispositivo GPS. Permite la conversión de rutas entre diferentes formatos.
NEW:
Actualizados los formatos de conversión; KML (Google Earth), TCX (Garmin training center), GTM (GPS TrackMaker), PLT (Ozi explorer), GDB (Mapsource), TRK (CompeGPS), XOL (Swiss Map), …
Animación de recorrido de la ruta
Gráficos de Alturas y velocidad sincronizados con la animación.
Información extendida para los puntos que forma la ruta (Velocidad puntual, distancia acumulada, ascenso acunulado, descenso acumulado,…)
Corrección de errores y bugs respecto a la versión anterior.
Mayor rapidez en la carga de rutas y en la conversión.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
En esta entrada mostraré el código nesario para generar ficheros KML (Keyhole Markup Language) a partir de datos que provienen de un DataSet o de un fichero GPX (GPX eXchage Format).
Los ficheros KML se utilizan para representar datos geográficos en 3 dimensiones (además de la longitud y la Latitud incluyen también la altura) y fue desarrollado para ser utilizado por un programa que a posteriori se convertiría en Google Earth.
En una entrada anterior ya vimos como importar un fichero GPX, con posiciones geográficas a un Dataset para posteriormente poder tratar y manejar estas posiciones (Cargar fichero GPX (XML) y acceder a los datos). Partiendo de lo visto en esa entrada como base, debe ser sencillo generar un fichero KML con los puntos que forma la ruta.
Hay que decir que los ficheros KML permiten muchas más cosas de las vistas en esta entrada, y para ver todas las posibilidades podemos revisar los ejemplos que se muestran aquí (Tutorial KML en Google); En este entrada me voy a centrar en la creación de rutas (lista de puntos) aunque las posibilidades van mucho más allá.
La estructura de nuestro fichero se compone por una cabecera, donde se almacenan datos genéricos de la ruta, y el bloque central donde añadimos los diferentes puntos geográficos que la componen.
Un ejemplo sencillo de fichero KML podría ser este:
Como vemos en la parte superior añadimos datos de la ruta y algunas opciones de visualización. En este caso un nombre y una descripción y porteriormente se definen opciones de estilo para el track (LineStyle); Definimos que usaremos una línea para representar esos puntos con color Rojo y un a anchura de 3.
Este archivo podemos abrirlo directamente con Google Earth o importarlo a «Mis Mapas» desde Google Maps y la visualización ser algo así;
En Google Maps al importar la ruta tendríamos esto:
Y al Abrir el fichero con Google Earth obtendríamos esto:
Podemos ver que como la ruta está definida como <LineString>, esta se pinta como una línea siguiendo los parámetros definidos en el fichero (color rojo y ancho 3).
Para generar el fichero con una ruta, partiremos de que los datos han sido imprtados a un Dataset y que ya disponemos de ellos en ese formato.
Primero generaremos la cabecera del fichero con los datos genéricos de la ruta; Nombre, Descripción, y las características de estilo para la línea:
const
CAB_XML ='<!--?xml version="1.0" encoding="UTF-8"?-->';
CAB_KLM ='';
CAB_PLACEMARK ='';
CAB_NAME ='%s';
STR_STYLE ='<!--
<LineStyle>
<color>%s</color>'+'<width>%d</width></LineStyle>
-->';
CAB_LINE ='';begin// Limpiar
TSTrack.Clear;// Añadir cabeceras
TSTrack.Add(CAB_XML);
TSTrack.Add(CAB_KLM);
TSTrack.Add(CAB_PLACEMARK);// Datos de la ruta
TSTrack.Add(Format(CAB_NAME,[AtrackName]));// color{$IFDEF VER220}// transparencia + color
Str :='ff'+ RGBToWebColorStr(ATrackColor);{$ELSE}
Str :='ff'+ uProcedures.RGBToWebColorStr(ATrackColor);{$ENDIF}
Str := AnsiReplaceText(Str,'#','');// TrackColor en HEXA
TSTrack.Add(Format(STR_STYLE,[Str, ATrackWidth]));
TSTrack.Add(CAB_LINE);
Con este código generamos la cabecera del fichero. En mi caso he usado una directiva condicional, para la función RGBToWebColorStr, que no está definida en versiones antiguas de la VCL.
Lo siguiente es realizar el recorrido por los puntos, añadiendo información de cada uno de ellos.
dsPoints.First;// recorridowhilenot(dsPoints.Eof)dobegin// Info. de punto
StrLine :=Copy(dsPoints.FieldByName(lonFName).AsString,1,10)+',';
StrLine := StrLine +Copy(dsPoints.FieldByName(latFName).AsString,1,10)+',';
StrLine := StrLine +
dsPoints.FieldByName(eleFName).AsString+' ';// Añadir la linea
TSTrack.Add(StrLine);// Next
dsPoints.Next;end;
dsPoints.First;
// recorrido
while not (dsPoints.Eof) do begin
// Info. de punto
StrLine :=
Copy(dsPoints.FieldByName(lonFName).AsString,1,10) + ',';
StrLine := StrLine +
Copy(dsPoints.FieldByName(latFName).AsString, 1,10) + ',';
StrLine := StrLine +
dsPoints.FieldByName(eleFName).AsString + ' ';
// Añadir la linea
TSTrack.Add(StrLine);
// Next
dsPoints.Next;
end;
Sólo queda finalmente completar el fichero añadiendo los TAG’s de las diferentes secciones que hemos ido creando.
Para facilitar el trabajo he encapsulado la conversión en el procedimiento siguiente:
procedure ConvertTrackToKLM(
ATrackName:string;// Nombre
ATrackDesc:string;//descripción
dsPoints:TDataSet;// Dataset que contiene los datos de los puntos{Nombres de los campos en el Dataset que contienen
Latitud, Longitud, Elevación y Time}
latFieldName, lonFieldName, eleFieldName, timeFieldName:string;var TSTrack:TStrings;// Estructura de salida con el track
ATrackColor:TColor=clBlue;// Color para la linea del track
ATrackWidth:integer=2// Anchura de la línea);
procedure ConvertTrackToKLM(
ATrackName:string; // Nombre
ATrackDesc:string; //descripción
dsPoints:TDataSet; // Dataset que contiene los datos de los puntos
{Nombres de los campos en el Dataset que contienen
Latitud, Longitud, Elevación y Time}
latFieldName, lonFieldName, eleFieldName, timeFieldName:string;
var TSTrack:TStrings; // Estructura de salida con el track
ATrackColor:TColor=clBlue; // Color para la linea del track
ATrackWidth:integer=2 // Anchura de la línea);
Y una llamada de ejemplo a este procedimiento podrías ser la siguiente:
TS := TStringList.Create();try// convertir a KML
ConvertTrackToKLM(
FormData.cdsTrack.FieldByName('name').AsString,// trackName'Descripción del track',// descripción
FormData.cdsPoints,// Dataset con los puntos'lat','lon','ele','time',// Nombre de los campos
TS);// Fichero de salida
newName :=ChangeFileExt(Self.TrackPath,'.KML');
TS.SaveToFile(newName);finallyFreeAndNil(TS);end;
TS := TStringList.Create();
try
// convertir a KML
ConvertTrackToKLM(
FormData.cdsTrack.FieldByName('name').AsString, // trackName
'Descripción del track', // descripción
FormData.cdsPoints, // Dataset con los puntos
'lat', 'lon','ele','time', // Nombre de los campos
TS);
// Fichero de salida
newName := ChangeFileExt(Self.TrackPath, '.KML');
TS.SaveToFile(newName);
finally
FreeAndNil(TS);
end;
Partiendo de la aplicación que sirvió de ejemplo en la entrada <Google Maps en Delphi>, he generado otro ejemplo que nos permitirá integrar la carga de un fichero GPX (utilizando el XML Mapper de Delphi), la conversión del fichero GPX a formato KML y la visualización de la ruta creada utilizando Google Maps integrado en nuestra aplicación, como prometí en la última entrada sobre el tema.
He probado a generar un video del ejemplo para ver el funcionamiento.
[youtube DLoX_KVSJ7c nolink]
Para las pruebas podeís descargar las rutas de ejemplo de la última entrada o buscar por internet en la infinidad de páginas que hay que las publican
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…