Una quincena más… 31/05/2011

martes, 31 de mayo de 2011 Sin comentarios
Share Button

Para los que hayáis tenido la oportunidad de asistir presencialmente (en Madrid), estos últimos días de Mayo Danysoft ha organizado unos seminarios presenciales sobre RAD Studio;  Se han tratado temas avanzados como las «Open Tools API para extender el IDE» o «La creación de servicios web seguros» utilizando XE.

Para los que (como yo) no estáis en Madrid, y/o no habéis podido asistir, la gente de Danysoft ha organizado otro no-presencial (seminario web) para poder seguirlo vía Internet el día 10 de Junio. Revisad en enlace con la información y desde ahí mismo podéis apuntaros.

Esta semana «he aterrizado»  en la web de TurboPHP (http://www.turbophp.com/). Un IDE para el desarrollo visual de aplicaciones con PHP. Las imágenes del IDE tienen muy buena pinta (desde el punto de vista del programador Delphi y no del desarrollador de PHP -que de eso no entiendo mucho-). ¿Porqué digo esto? Ni más ni menos, que porque este proyecto está realizado con Delphi. El proyecto ahora es OpenSource y el código está disponible para quien quiera acceder a él.

 

Para los que no habéis leído alguna de las entradas de la serie que Salvador ha publicado sobre Expresiones regulares, utilizando las mejoras de Delphi XE, os animo a que lo hagáis. Es un tema complejo y la explicación es muy buena y detallada. En el momento de escribir estas líneas ya está completada con 4 entradas, que cubren de manera muy amplia el tema.

Visita y lectura obligada obligada.

 

Para acabar un par de enlaces «Off-Topic». El primero es una interesante reflexión de Casimiro sobre piratería en España, sobre los derechos de autor, los contenidos digitales, la cultura…
«La piratería no existe – 5 propuestas para el crecimiento digital».

La segunda es una mención al anteproyecto de ley que el Gobierno acabar de aprobar, conocida como Ley de igualdad de trato; Desde los blogs ya se conoce como «La ley de Mozdaza».

Desde esta otra página se explica con detalle dónde está el sentido real de esta ley y cómo puede afectar a todos los blogs esta nueva ley si llega  a aprobarse.

Y hasta aquí hemos llegado.

Categories: Resumen Tags: ,

Un mes más… 15/05/2011

lunes, 16 de mayo de 2011 Sin comentarios
Share Button

Como recopilatiorio de las últimas semanas (ya no haré referencia a días porque desde la ultima entrada ya han pasado unos cuantos…), os comento algunas páginas que he visitado y que me han parecido interesantes.

El primero, al que no recuerdo cómo llegué y que me pareció muy curioso, vendría a ser algo así como «La tabla periódica de las API y aplicaciones de Google«; ¿Que qué es esto? Pues una de estas cosas simpáticas que hacen los de Google y que me pareció interesante y original (a parte de la mera función informativa).

Ya hace unos cuantos días que Rodrigo (RRUZ) publicó en su blog una entrada sobre cómo utilizar eventos en WMI. imprescindible (esta y las anteriores sobre WMI) para aquellos de vosotros que estéis interesados en este tema al igual que yo. Mucho nivel en las explicaciones. Mucho código que puede ayudar a aclarar un tema «complejo» como este y muchas posibilidades las que abre el mundo de WMI.

En más de una ocasión he utilizado como sistema de traducción en mis aplicaciones GNU getText (y la versión para utilizar con Delphi) y ya he hablado en el blog antes sobre él. Utilizando este sistema acabamos generando ficheros .po que posteriormente se traducen utilizando algún editor de los muchos disponibles que existen (poedit, es el que he utilizado yo). Relacionado con el tema de la traducción, el otro día me encontré con esta web: (http://translate.umpirsky.com/)  que nos facilita el trabajo de traducción de los ficheros .po mediante el traductor de Google.  Debe haber más, pero este me pareció especialmente sencillo y simple. Basta con subir el fichero, seleccionar el idioma y esperar a que acabe para bajar la traducción.

Hace unos días, también desde el blog de Rodrigo, nos llega una mejora de la aplicación Delphi IDE Theme Editor,  que ahora soporta Delphi 5/6. Para los que todavía mantenemos aplicaciones antiguas , como yo, nos permitirá darle «un poco de alegría» al IDE.

Navegando por internet, he llegado a una web curiosa y que me parece una gran idea. Se llama Rosetta Code; No se si la conocéis.
Supongo que la idea no es nueva, pero tal y como la plantea en esta web me parece simple y útil.  Además el formato WIKI es sencillo de modificar y entender.

Se trata de tener una serie de problemas, programas o algoritmos (se pueden proponer nuevos) de forma que la programadores de forma voluntaria puedan aportar su código para resolverlos en los diferentes lenguajes. Por ejemplo, aquí podemos ver la implementación del borrado de un fichero en nada menos que 61 lenguajes distintos, o el archiconocido «Hello Word!» en nada menos que 170 lenguajes distintos.

Podéis consultar la lista de problemas, la lista de lenguajes, o centrados en Delphi, los problemas que todavía no tienen implementación en Delphi. Os animo a contribuir (yo ya lo he hecho ;-) ) y ampliar los ejemplos en Delphi/Object Pascal.

Por si no lo habéis leído, estos días he publicado la versión 1.4(beta) de TrackInfo.
Una aplicación para obtener información, visualizar, convertir,… ficheros en diferentes formatos que incluyen tracks o rutas de puntos geográficos; Normalmente extraídas desde dispositivos provistos de un GPS. He añadido algunos formatos de conversión para abrir rutas directamente en los formatos más utilizados y el multiidioma, a parte de corregir algunos errores.

 

 

Por último os adjunto un video donde se puede ver cómo finalmente se ha descubierto un sistema para «generar movimiento continuo» o también conocido como «dispositivo antigravedad»; Además es lo suficientemente sencillo como para probarlo en casa. ;-D
Está basado en dos principio conocidos y de sobras demostrados:

  1. ¿Qué pasa si una tostada con mantequilla se te cae al suelo? Por ley de Murphy, esa tostada siempre cae con el lado que tiene la mantequilla hacia abajo (link -ver imagen-).
  2. Es conocido que los gatos cuando caen, siempre caen a cuatro patas.

Por lo tanto combinando ambos, tenemos la siguiente paradoja:

[youtube Il1WZwGjtEs nolink]

 

Aquí podéis ver una imagen de cómo reproducirlo.

Y como solían decir en el 1,2,3…  «hasta aquí puedo leer».

La próxima semana, más…

Un saludo.

 

Categories: Otros, Resumen Tags: ,

TrackInfo Versión v.1.4b

jueves, 12 de mayo de 2011 5 comentarios
Share Button

Publicada la versión 1.4b de la aplicación TrackInfo.

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.

Un saludo.

 

Categories: Aplicación, Offtopic Tags: , ,

IBPIndexCalc v.1.0

viernes, 29 de abril de 2011 Sin comentarios
Share Button

IBPIndexCalc es una aplicación que permite obtener multitud de datos (en general «el grado de dificultad») de un Track/Ruta realizado en bicicleta (sea de carretera o de montaña). Aunque los datos podrían ser aplicados a cualquier track realizado en otra actividad.

Para ello el programa utiliza la web  de IBPIndex (http://www.IBPIndex.com); Imprescindible para todos aquellos que salís en bici y utilizáis/generáis track con GPS.

Este índicxe IBP (Interactive Bicycling Parameters) se obtiene analizando los datos de latitud, longitud y altura en multitud de puntos del recorrido. A partir de estos puntos se calculan las distancias recorridas en los diferentes tramos de subidas y bajadas (1%, 5%, 10% etc..) se computan los % que representan sobre el total, los metros totales ascendidos, descendidos, los ratios medios de subida y de bajada, los Km. totales, y la distribución de los tramos de subida. Si queréis saber más y ampliar información sobre el tema visitad la web de IBPIndex (proceso de cálculo, corrección de errores, formato de puntuación,…).

IBPIndexCalc utiliza los componentes Indy para el acceso a la Web. Además implementa una clase derivada de TThread que permite que el pograma principal no se bloquee mientras espera la respuesta desde la web. Estructura de la Clase TWebThread:

{ : Clase para realizar consultas utilizando thread a la Web. }
TWebThread = class(TThread)
private
IdHTTP: TidHTTP;
Stream: TIdMultipartFormDataStream;
FTrackFileName: string;
FwebBrowser: TWebBrowser;
FResponse: string;
private
FURLNavigate: string;
FURLPDF: string;
function _RepairLinks(StrPage: string; var URLpage: string;
var UrlPDF: string): string;
protected
 
public
// ejecutar el procedimniento.
procedure Execute; override;
// componente de navegación.
property webBrowser: TWebBrowser read FwebBrowser write FwebBrowser;
// Fichero de Track/ruta.
property TrackFileName: string read FTrackFileName write FTrackFileName;
// : Propiedad para recoger la respuesta desde la Web.
property Response: string read FResponse write FResponse;
// URL de navegación.
property URLNavigate: string read FURLNavigate write FURLNavigate;
// URL del PDF de respuesta.
property UrlPDF: string read FURLPDF;
// : Constructor redefinido.
constructor Create(AFileName: string; wb: TWebBrowser);
end;

Una vez que el programa obtiene respuesta de la Web, la analiza para detectar posibles errores y para extraer los links útiles al usuario. En este caso el PDF generado y la página de resultados.

La aplicación y la clase UTWebThread puede se útil, modificando determinados, para realizar un trabajo similar en otras páginas webs.

Es totalmente gratuíta y el código fuente está disponible.

<DESCARGAR EJECUTABLE>

<DESCARGAR CÓDIGO FUENTE>

 

 

Versión v.1.2b de la aplicación TrackInfo

martes, 19 de abril de 2011 4 comentarios
Share Button

Acabo de publicar la versión 1.2 de TrackInfo.

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.
  • Mejoras menores.

Descripción completa de la aplicación y Descargas.

Una quincena más… 25/03/2011

viernes, 25 de marzo de 2011 Sin comentarios
Share Button

Repaso, una vez más, las últimas noticias, apuntes y comentarios que me han merecido la pena en los últimos días. Muchos otros me los he dejado en el tintero por variadas razones; Ya sea por que no me merecen suficiente interés, o porque ya se han tratado tanto, que he «perdido» el interés por ellos…  ;-)

Estos últimos días ha visto la luz un versión nueva de UniGui; Concretamente la  v. 0.84.3, aunque algunos días después veo que han salido la versión 0.84.4 que corrige algunos bugs y la versión 0.84.5 que añade algunos cambios. Para los que no lo conozcáis es un Framework para desarrollar aplicaciones web utilizando Delphi (Web Application Framework for Delphi). Para ello se basa en las librerías de JacaScript, ExsJS. Recomiendo, si queréis haceros una idea rápida del potencial, que reviseis las demos disponibles en la web.

Rodrigo (rruz), en su blog The Road of Delphi, ha publicado la aplicación Delphi IDE Theme Editor, que  tal y como explica él, está pensado para facilitar la creación de estilos visuales para el IDE de delphi y poder importar temas desde otros IDEs como Visual Studio, así como compartir entre los usuarios sus creaciones.
Antes de publicar esta entrada, veo que hay una actualización de este programa, que  incluye algunas novedades. Mejoras en el resaltado de líneas, importación de temas desde Eclipse, facilidad para modificar un tema creado cambiando valores de Hue y Saturation, y algunas cosas más. Para los que deseéis personalizar vuestro IDE de trabajo (desde Delphi 7 en adelante -los que tenemos Delphi 6 tendremos que esperar a actualizar-) esta aplicación es imprescindible.

También se ha publicado un nueva versión «no-oficial» de las RxLib que soporta DelphiXE; En mi caso hace unos días había hablado sobre una versión «portada» (con pequeños cambios) para que funcionara en la última versión de Delphi. Esta incluye nuevas funciones y nuevos componentes (17 según leo). Podéis ver la los cambios principales introducidos en esta versión revisando esta página.  Desde ahí mismo o desde esta página de recopilación de versiones podéis descargar esta versión.

Esta semana he actualizado todo el contenido que hay de la web en DropBox, tal y como expliqué en entradas anteriores (entrada I y entrada II), están accesibles el código de todos los ejemplos, los componentes, las recopilaciones de las RxLib, artículos,…

Esta semana se ha publicado la versión 4 de Mozilla FireFox (que pronto alcanzará los 25 millones de descargas); Entre las cosas que se pueden comentar estás, el rediseño de la interfaz (barra inferior, pestañas, menú,…), gestión renovada de los complementos, mejoras en la seguridad de la navegación e inclusión del modo privado, soporte para HTML5, mejoras sustanciales en la velocidad,  e inclusión «de serie» de algunas características que antes se debían realizar mediante extensiones, por comentar sólo algunas características. Como curiosidad, podéis ver las descargas que se han producido hasta el momento en esta página.

Un saludo.

Categories: General, Offtopic, Otros, Resumen Tags: ,

Actualización de las RxLib -no oficial-

viernes, 18 de marzo de 2011 4 comentarios
Share Button

Esta semana se ha publicado un nueva versión «no-oficial» de las RxLib que soporta Delphi XE; En mi caso hace unos días había hablado sobre una versión «portada» (con pequeños cambios) para que funcionara en la última versión de Delphi. Esta incluye nuevas funciones y nuevos componentes (17 según leo). Podéis ver la los cambios principales introducidos en esta versión revisando esta página. Desde ahí mismo o desde esta página de recopilación de versiones podéis descargar esta versión.

Por cierto, el link de descarga aparece en la página de recopilación o podéis user el que aparece debajo de estas líneas:

<Link de Descarga RxLib v2.75_1.0_D5_DXE>

Visualizar un fichero KML en Delphi II

lunes, 14 de marzo de 2011 4 comentarios
Share Button

Esta entrada se podría considerar como una «ampliación» de la última publicada relacionada con los ficheros KML, Generar ficheros KML de rutas; Tracks en Google Maps. A partir de un tema surgido en los foros del Clubdelphi de cómo visualizar estos ficheros directamente sobre Google Maps dentro de una aplicación Delphi, he modificado el programa anterior (que incluía la conversión desde GPX) para poder visualizarlos directamente.

En un ejemplo más simplificado, y enfocado a los ficheros KML. Como ya dije anteriormente, este tipo de ficheros pueden almacenar otros tipos de información y en este ejemplo se leen los datos directamente desde este tipo de ficheros (en este caso sólo la ruta).

Además el mapa está optimizado para visualizarse a tamaño completo, y no según el tamaño de la ventana como estaba anteriormente (esto implica la optimización de que no se recarga la página al cambiar el tamaño).

También se ha modificado el recurso de la página Web, para que automáticamente se calcule en «centrado» y el «zoom» del mapa a partir del Track que se va a visualizar. Para ello se utiliza el siguiente código:

var polylineBounds = polyline.getBounds();
var ZoomLevel = map.getBoundsZoomLevel(polylineBounds) - 1;
map.setCenter(polylineBounds.getCenter(), ZoomLevel);

Se puede descargar el ejemplo desde aquí (incluye los fuentes).

<Descargar fuentes>

AÑADO: compilación en Delphi XE2.

Debido a un cambio en la definición de la función EnumResourceModules, que pasa de usar LongInt a NativeInt, hay que realizar un cambio en el procedimiento que se le pasa como parámetro, modificando este dato.
La definición del procedimiento, ahora queda así:

function _MyEnumResourceModules (
Instance:{$IFDEF VER230}NativeInt{$ELSE}Pointer{$ENDIF};
Data:Pointer):Boolean;

Una semana más… 11/03/2011

lunes, 14 de marzo de 2011 Sin comentarios
Share Button

Pues recuperando viejas costumbres (con un poco de retraso, eso sí  ;-)  ), he aquí un recopilatorio  «variado» de los últimos días.

Esta pasada semana me ha llegado el calendario de cursos a distancia organizado por Danysoft; SQL Server 2008 R2 y Business Intelligence, Visual Studio 2010, Desarrollo con Delphi XE, Soluciones de instalación y despliegue, Modelado con CA ERwin, SharePoint 2010 y SAP Crystal Reports. Junto con estos, también he recibido vía Mail, el calendario de Seminarios gratuitos; En ambos casos con algunas propuestas muy interesantes. Igualmente si alguien está pesando en actualizar pronto a RAD Studio XE debería revisar este enlace.

También durante esta semana, he leído en varios blogs la posibilidad de descargar de forma gratuita una edición especial de Blaise Pascal Magazine, dedicada a Delphi XE. Vale la pena la descarga y la lectura. Una visión general sobre el nuevo Delphi  XE Starter Edition,  un artículo interesante sobre las Bases de Datos Relacionales y las posibilidades que nos brindan, y algunas cosas más que os pueden resultar interesantes.

En el blog, sigo «peleándome» con todo lo relacionado con Google Maps, rutas y tracks, ficheros GPX, datos de GPS, ficheros KML,… Las últimas entradas de Generar ficheros KML de rutas; Tracks en Google Maps y Cargar fichero GPX (XML) y acceder a los datos (junto con alguna más que tengo a medias) están enfocadas a completar una aplicación llamada TrackInfo (relacionada con todo esto).

Espero que pronto pueda publicar una versión inicial, que gestione las cosas básicas. Estoy aprovechando para probar los componentes Ribbon que vienen con Delphi, que aunque nunca han sido de mi devoción, siempre han sido una asignatura pendiente para mí. La versión actual está más o menos así, y aunque falta pulir muchas cosas, espero que pronto sea funcional (en lo básico).

Alguien apunta en los foros del Clubdelphi hoy, la lista de ejemplos (más de 650) que podemos encontrar en la web de Embarcadero. No son nuevos, pero tal vez es que no estamos acostumbrados a visitar la web de Embarcadero para estos temas (históricamente no se prodigaban en este tipo de Documentación -esperemos que esto siga cambiando-).  Otra referencia que nos puede ser muy útil, es la que divide los componentes por categorías y nos permite acceder a la documentación completa de ellos.

Gracias a Antonio, he llegado a este link de la Gaceta Tecnológica, donde nos intentan aclarar un poco las características diferenciadoras entre las diversas licencias de Software (click sobre la imagen para agrandar). Interesante tenerlo «a mano», para tener una idea rápida cuando leamos sobre algún programa y su correspondiente licencia.

He leído en el «Delphi and Pacal Developers Group» sobre la web Pascal Programming for Schools. Interesante iniciativa enfocada a promover y lanzar el lenguaje en el mundo estudiantil. Ofrece recursos y propone ideas y retos, interesantes tanto para estudiantes como para profesores. Se pueden ver los programas/problemas y el código para resolverlos de forma clara.

Revisando al blog de Salvador (Delphi básico) he llegado a otro del que no tenía constancia y que me ha parecido muy interesante por lo «diferente» y «opuesto». Se trata de DelphiBugs, y tal y como su nombre indica nos muestra algunos busg que podemos encontrar en las versiones de Delphi (preferentemente en las más nuevas). Si queremos una herramienta mejor, hay que conocer sus virtudes y también sus defectos.

Para finalizar y saliendome un poco del tema de la programación y de Delphi, recomendaros un par de piezas de software (como hago otras veces) que me parecen muy interesantes.

El primero es un pluging de WordPress, para los que lo utilizáis como yo, llamado After the Deadline, que permite chequear la ortografía y la gramática en el blog. Aquí a la izquierda podéis ver una imagen del funcionamiento, muy similar a como trabajan los programas de ofimática más conocidos del mercado.

La segunda propuesta es PhaseExpress, que viene a ser un programa para agilizar la escritura utilizando macros y combinaciones de teclas (como otros en el mercado), pero que va un poco más allá; Almacena textos frecuentes y los propone en el momento de escribirlos (con una ventana flotante) y posee también algo así como una «caché del clipboard». Si deseáis más información podéis visitar la web. Es un programa comercial, pero posee una versión gratuita para uso personal. Posee también una versión Server para red.

Y hasta aquí es todo. Me he retrasado un poco en publicar la entrada, pero el fin de semana he estado en «otros temas».Como siempre las propuestas, comentarios, críticas, sugerencias y demás son bienvenidas.

Un saludo.

 

Categories: Otros, Resumen Tags: ,

Generar ficheros KML de rutas; Tracks en Google Maps

miércoles, 2 de marzo de 2011 10 comentarios
Share Button

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:

<?xml version=»1.0″ encoding=»UTF-8″?>
<Placemark>
<name>Camino de ejemplo</name>
<description>Puntos de ejemplo sobre Collserola.</description>
<Style><LineStyle><color>ff0000FF</color><width>3</width></LineStyle></Style>
<LineString>
<coordinates>
2.12578324,41.4157072,275.5550537109375
2.12559993,41.4156055,275.074462890625
2.12537404,41.4152729,275.074462890625
2.12531452,41.4151532,274.59375
2.12518930,41.4149554,275.074462890625
2.12525032,41.4145536,274.113037109375
2.12553421,41.4141423,275.5550537109375
2.12541938,41.4139779,275.5550537109375
2.12537412,41.4139778,275.5550537109375
2.12492954,41.4139116,274.59375
2.12441666,41.4137039,273.6324462890625
2.12425304,41.4136318,274.113037109375
2.12396864,41.4136072,273.6324462890625
2.12380528,41.4136296,273.15185546875
2.12357947,41.4136973,273.15185546875
2.12343120,41.4137774,273.15185546875
2.12328091,41.4139091,272.671142578125
2.12321687,41.4140272,273.15185546875
2.12320983,41.4141903,273.15185546875
</coordinates>
</LineString>
</Placemark>

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;
// 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);

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);
  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

<Rutas de ejemplo (GPX)>

Podéis descargar tanto el ejecutable del proyecto (con alguna ruta de ejemplo) como los fuentes:

<Sources del proyecto>
<Ejecutable del proyecto>

CORRECCIÓN: He añadido un fichero que faltaba al ejecutable de ejemplo.

Un saludo.