Inicio > Aplicación, Delphi, Ejemplos > Visualizar un fichero KML en Delphi II

Visualizar un fichero KML en Delphi II

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;
5/5 - (1 voto)
  1. cr1st1an13
    miércoles, 18 de mayo de 2011 a las 09:16 | #1

    Buenos días,

    He intentado adaptar tu ejemplo a una aplicación que estoy haciendo para clase, y me encuentro con un problema, me sale un error indicando que no se encuentra el recurso. Debugando he visto que el problema esta en la función «_MyEnumResourceModules» que me devuelve false cuando en tu ejemplo es true y como consecuencia no entra en el «if ResFinder.Instance 0 then begin» sino que en el else.

    Gracias.

  2. Neftalí
    miércoles, 18 de mayo de 2011 a las 09:23 | #2

    @cr1st1an13
    Es posible que sea por el Mapa.
    La página HTML del Mapa está guardada en un recurso; Revisa el fichero .RC y el fichero compilado .RES.
    Seguramente o no lo tienes o está incorrecto. De ese recurso se obtiene la plantilla del mapa que luego se utiliza.

    Un saludo.

  3. cr1st1an13
    miércoles, 18 de mayo de 2011 a las 11:21 | #3

    Gracias de nuevo y perdona por la duplicidad de la consulta.

  4. Neftalí
    jueves, 9 de febrero de 2012 a las 11:13 | #4

    Hola.
    Añado un cambio en la definición del procedimiento _MyEnumResourceModules, para hacerlo compatible con Delphi XE2.

    Un saludo.

  1. Sin trackbacks aún.