Archivo

Archivo para Marzo, 2011

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.

Share Button
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>

Share Button

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:

0
1
2
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í:

0
1
2
function _MyEnumResourceModules (
Instance:{$IFDEF VER230}NativeInt{$ELSE}Pointer{$ENDIF};
Data:Pointer):Boolean;
Share Button

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.

 

Share Button
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:

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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.

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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:

0
1
2
3
4
5
6
7
8
9
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:

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  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.

Share Button