Cómo realizar viajes en KML

Índice

Introducción

La novedosa función de viaje de Google Earth 5.0 permite realizar vuelos controlados a través de datos geoespaciales con las siguientes características:

  • duraciones de vuelo específicas entre ubicaciones,
  • vuelos continuos entre ubicaciones sin detenerse,
  • reproducción de archivos de sonido en momentos predefinidos durante el viaje,
  • actualizaciones temporales de los recursos KML dentro de los límites del viaje.

Para obtener más información sobre los viajes del punto de vista del cliente de Google Earth, consulta la Guía de usuario de Google Earth.dese

Espacio de nombres de extensiones de Google

Los elementos KML que definen los viajes se encuentran dentro de un conjunto de extensiones del estándar de KML del OGC mediante el uso del prefijo gx. Para utilizarlos, primero debes añadir el URI de espacio de nombres correcto al elemento <kml> de inicio del archivo KML:

<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">

Entre los elementos relacionados con los viajes de la extensión gx se incluyen:

<gx:Tour> <gx:playMode>
<gx:Playlist> <gx:Wait>
<gx:Flyto> <gx:AnimatedUpdate>
<gx:flyToMode> <gx:SoundCue>
<gx:TourControl> <gx:duration>

Los viajes son compatibles con Google Earth 5.0, pero es posible que no sean compatibles con otros navegadores geográficos. Si tu navegador no admite determinadas extensiones, deberás ignorar de forma silenciosa los datos de dichas extensiones para, a continuación, poder cargar el resto del archivo KML sin errores.

Terminología

Elemento básico de viaje: un elemento de un conjunto de elementos que define una acción de un viaje. Un ejemplo de un viaje básico es el elemento FlyTo, que se define en el elemento <gx:FlyTo> y sus elementos secundarios.

Lista de reproducción: el contenedor de una lista de elementos básicos de viaje que definen un viaje. La lista de reproducción se puede visualizar junto con una línea de tiempo (consulta la sección Línea de tiempo de un viaje para obtener más información).

La estructura de un viaje

Los viajes se crean mediante la colocación de elementos específicos, en orden, dentro de un archivo KML. El archivo KML puede contener cualquier otro elemento KML legal junto con el viaje.

En el siguiente ejemplo aparece un viaje completo y un elemento de carpeta (Folder) que contiene varios elementos de marca de posición (Placemark). El viaje comienza en la isla meridional de Nueva Zelanda, antes de volar hacia el norte a través del monte Taranaki, y en él se muestran ambos modos de desplazamiento (flytoModes), smooth y bounce, además del método <gx:balloonVisibility> de apertura de una viñeta descriptiva. A continuación, se ofrece una descripción más detallada de los elementos de viaje.

 complete_tour_example.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">

<Document>
  <name>A tour and some features</name>
  <open>1</open>

  <gx:Tour>
    <name>Play me!</name>
    <gx:Playlist>

      <gx:FlyTo>
        <gx:duration>5.0</gx:duration>
        <!-- bounce is the default flyToMode -->
        <Camera>
          <longitude>170.157</longitude>
          <latitude>-43.671</latitude>
          <altitude>9700</altitude>
          <heading>-6.333</heading>
          <tilt>33.5</tilt>
        </Camera>
      </gx:FlyTo>

      <gx:Wait>
        <gx:duration>1.0</gx:duration>
      </gx:Wait>

      <gx:FlyTo>
        <gx:duration>6.0</gx:duration>
        <Camera>
          <longitude>174.063</longitude>
          <latitude>-39.663</latitude>
          <altitude>18275</altitude>
          <heading>-4.921</heading>
          <tilt>65</tilt>
          <altitudeMode>absolute</altitudeMode>
        </Camera>
      </gx:FlyTo>

      <gx:FlyTo>
        <gx:duration>3.0</gx:duration>
        <gx:flyToMode>smooth</gx:flyToMode>
        <LookAt>
          <longitude>174.007</longitude>
          <latitude>-39.279</latitude>
          <altitude>0</altitude>
          <heading>112.817</heading>
          <tilt>68.065</tilt>
          <range>6811.884</range>
          <altitudeMode>relativeToGround</altitudeMode>
        </LookAt>
      </gx:FlyTo>

      <gx:FlyTo>
        <gx:duration>3.0</gx:duration>
        <gx:flyToMode>smooth</gx:flyToMode>
        <LookAt>
          <longitude>174.064</longitude>
          <latitude>-39.321</latitude>
          <altitude>0</altitude>
          <heading>-48.463</heading>
          <tilt>67.946</tilt>
          <range>4202.579</range>
          <altitudeMode>relativeToGround</altitudeMode>
        </LookAt>
       </gx:FlyTo>

      <gx:FlyTo>
        <gx:duration>5.0</gx:duration>
        <LookAt>
          <longitude>175.365</longitude>
          <latitude>-36.523</latitude>
          <altitude>0</altitude>
          <heading>-95</heading>
          <tilt>65</tilt>
          <range>2500</range>
          <altitudeMode>relativeToGround</altitudeMode>
        </LookAt>
      </gx:FlyTo>

      <gx:AnimatedUpdate>
        <gx:duration>0.0</gx:duration>
        <Update>
          <targetHref/>
          <Change>
            <Placemark targetId="pin2">
              <gx:balloonVisibility>1</gx:balloonVisibility>
            </Placemark>
          </Change>
        </Update>
      </gx:AnimatedUpdate>

      <gx:Wait>
        <gx:duration>6.0</gx:duration>
      </gx:Wait>

    </gx:Playlist>
  </gx:Tour>

  <Folder>
    <name>Points and polygons</name>

    <Style id="pushpin">
      <IconStyle>
        <Icon>
          <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
        </Icon>
      </IconStyle>
    </Style>

    <Placemark id="mountainpin1">
      <name>New Zealand's Southern Alps</name>
      <styleUrl>#pushpin</styleUrl>
      <Point>
        <coordinates>170.144,-43.605,0</coordinates>
      </Point>
    </Placemark>

    <Placemark id="pin2">
      <name>The End</name>
      <description>
        Learn more at http://developers.google.com/kml/documentation
      </description>
      <styleUrl>pushpin</styleUrl>
      <Point>
        <coordinates>175.370,-36.526,0</coordinates>
      </Point>
    </Placemark>

    <Placemark id="polygon1">
      <name>Polygon</name>
      <Polygon>
        <tessellate>1</tessellate>
        <outerBoundaryIs>
          <LinearRing>
            <coordinates>
              175.365,-36.522,0
              175.366,-36.530,0
              175.369,-36.529,0
              175.366,-36.521,0
              175.365,-36.522,0
            </coordinates>
          </LinearRing>
        </outerBoundaryIs>
      </Polygon>
    </Placemark>

  </Folder>
</Document>
</kml>

Línea de tiempo de un viaje

Los viajes se componen de una serie de elementos básicos de viaje: FlyTo, Wait, TourControl, AnimatedUpdate y SoundCue. Algunos de estos elementos básicos se reproducen uno después de otro; cada uno de estos elementos espera a que el elemento básico anterior se complete antes de comenzar a reproducirse. Otros se ejecutan de forma simultánea a otros elementos básicos, de modo que se pueden producir varias acciones a la vez.

Elementos básicos que se reproducen en serie:

  • <gx:FlyTo>
  • <gx:Wait>
  • <gx:TourControl>

Estos elementos básicos se producen uno detrás de otro y deben haberse completado totalmente antes de que la lista de reproducción se desplace hasta otro elemento de cualquier tipo. Esto significa que solo se puede reproducir un elemento básico tipo serie (FlyTo, Wait o TourControl) a la vez y que no se pueden iniciar elementos SoundCue ni AnimatedUpdate mientras se esté reproduciendo un elemento básico tipo serie.

Elementos básicos que se reproducen en paralelo

  • <gx:AnimatedUpdate>
  • <gx:SoundCue>

Estos elementos básicos se ponen en cola a medida que se añaden a la lista de reproducción. Una vez que la lista de reproducción ha comenzado, esta se desplaza inmediatamente al siguiente elemento básico, sin esperar a que el elemento SoundCue o AnimatedUpdate se complete. Esto significa que:

  • Se pueden reproducir a la vez cualquier número de elementos SoundCue o AnimatedUpdate (colocándolos en cola uno detrás del otro en la lista de reproducción).
  • Los elementos SoundCue y AnimatedUpdate se pueden reproducir a la vez que los elementos básicos tipo serie (aunque no se pueden iniciar mientras los elementos básicos tipo serie se reproducen).

En el diagrama que aparece a continuación se ofrece un ejemplo de este comportamiento. Haz clic en la imagen para obtener una vista más detallada, incluido el contenido KML que define cada elemento básico de la lista de reproducción.


 

En el diagrama, cada elemento FlyTo necesita una determinada cantidad de tiempo (especificada en su elemento <gx:duration>) para completarse. Una vez transcurrido este tiempo, comenzará la reproducción del siguiente elemento básico.

El elemento SoundCue, por otra parte, se reproduce en paralelo. El siguiente elemento básico de la línea de tiempo se reproduce de forma inmediata, al mismo tiempo que comienza la reproducción del archivo de sonido. La reproducción del archivo de sonido continúa hasta el final del archivo o hasta el final del viaje, lo que se produzca en primer lugar. Si el viaje termina antes de que lo haga el archivo de sonido, la reproducción del archivo de sonido se detendrá. Se pueden reproducir varios archivos de sonido de forma simultánea, ya que cada archivo se carga en su propia línea de tiempo.

Las actualizaciones animadas se comportan del mismo modo. Si un icono de marca de posición se define para que su tamaño aumente durante un período de cinco segundos, esta acción se producirá mientras se reproducen los elementos básicos siguientes en la línea principal de tiempo.

Elementos FlyTo y flyToMode

Los viajes se desplazan entre ubicaciones; cada ubicación se especifica con un elemento <gx:FlyTo>. Este contiene un elemento AbstractView (<Camera> o <LookAt>) que define la ubicación de visualización, el ángulo y la altitud en Google Earth.

Además, es posible especificar un elemento de modo de vuelo flyToMode que indique al navegador cómo debe llegar hasta el punto. Antes de la introducción de <gx:Tour>, los viajes se reproducían en el navegador mediante saltos de marca de posición a marca de posición; la velocidad de vuelo (que la definía el navegador) se ralentizaba a medida que el navegador se acercaba a la marca de posición y se detenía completamente antes de continuar hacia la siguiente marca de posición. Es posible seguir especificando este comportamiento en los viajes. Para ello, utiliza la propiedad del elemento <gx:flyToMode>bounce</gx:flyToMode>.

El modo de vuelo (flyToMode) tipo smooth permite un vuelo continuo y controlado a través del espacio. La velocidad entre los puntos se controla mediante la inclusión de un elemento <gx:duration>, que define el tiempo que necesita el navegador para desplazarse desde el punto actual al siguiente punto definido. Un vuelo sin pausas se compone de una serie de elementos FlyTo con modos de vuelo flyToMode tipo "smooth". El navegador terrestre interpola la velocidad y una ruta curva entre puntos, de modo que se llegue a cada marca de posición en el momento exacto especificado en el archivo KML. Por el contrario, en el modo de vuelo tipo bounce, la velocidad nunca alcanza el valor cero hasta que el vuelo se detiene debido a uno de los siguientes eventos:

  • el final del viaje,
  • un punto con un elemento flyToMode definido en "bounce",
  • un punto de espera.

Las pausas, las actualizaciones animadas y las pistas de sonido no detienen el vuelo.

Elemento FlyTo inicial

El primer elemento <gx:FlyTo> contenido dentro de una lista de reproducción vuela desde el punto panorámico actual del usuario en Google Earth. Se tiene en cuenta la velocidad, de modo que el primer punto variará ampliamente en función de la ubicación del usuario en la Tierra en el momento en que comienza el viaje. Se recomienda que este elemento FlyTo inicial contenga una duración mínima de cinco segundos y que esté establecido en modo bounce, para mejorar la experiencia de visualización.

Si <gx:flyToMode> se establece en smooth para el primer elemento FlyTo, y va seguido de elementos FlyTo adicionales en modo "smooth", se considerará la posición inicial del usuario como el punto de la curva "smooth" y afectará a la curva de la ruta comprendida entre el primer punto y los siguientes. Esto significa que la serie inicial de elementos FlyTo en modo "smooth" será diferente para cada usuario, en función de lo que esté visualizando en el cliente de Google Earth en el momento en que comience el viaje. Si sigues queriendo establecer un elemento FlyTo en modo "smooth" como punto inicial, es posible introducir un elemento <gx:Wait> en el código del viaje después del primer elemento FlyTo. De este modo, la posición inicial quedará separada del resto del viaje.

Ejemplos

En los siguientes ejemplos aparece la diferencia entre los modos de vuelo "bounce" y "smooth". Cada viaje visita algunas marcas de posición, pero utiliza distintos elementos flyToMode. Para reproducir los viajes en Google Earth, haz clic en los enlaces que aparecen encima de cada fragmento de código y, a continuación, haz doble clic en el nombre del viaje desde el panel Lugares de Google Earth.

 bounce_example.kml

<gx:FlyTo>
  <gx:duration>4.0</gx:duration>
  <!-- bounce is the default flyToMode -->
  <LookAt>
    <longitude>-121.303179</longitude>
    <latitude>45.993041</latitude>
    <altitude>0</altitude>
    <heading>-27.923387</heading>
    <tilt>71.600075</tilt>
    <range>22570.546801</range>
    <altitudeMode>relativeToGround</altitudeMode>
  </LookAt>
</gx:FlyTo>

<!-- ...snip... -->

 smooth_example.kml

<gx:FlyTo>
  <gx:duration>4.0</gx:duration>
  <gx:flyToMode>smooth</gx:flyToMode>
  <LookAt>
    <longitude>-121.303179</longitude>
    <latitude>45.993041</latitude>
    <altitude>0</altitude>
    <heading>-27.923387</heading>
    <tilt>71.600075</tilt>
    <range>22570.546801</range>
    <altitudeMode>relativeToGround</altitudeMode>
  </LookAt>
</gx:FlyTo>

<!-- ...snip... -->

Cómo pausar y esperar

Los elementos de espera (wait) detienen el movimiento a través del espacio en un viaje, pero permiten que los archivos de sonido y las actualizaciones animadas continúen. La duración de una espera se especifica en el archivo KML.

Los elementos de pausa (pause) detienen el viaje en su ubicación actual, como si el usuario hubiera hecho clic en el botón de pausa y afecta a todos los elementos básicos. El viaje solo se reanuda cuando el usuario selecciona el botón Reproducir del control de viaje de Google Earth.

Elemento de espera

Este elemento afecta únicamente a la cámara. Especifica un período de tiempo durante el cual la cámara permanecerá quieta. Esto no afectará a ninguna actualización animada ni a ningún archivo de sonido en reproducción en ese momento; la reproducción de dichos elementos continuará durante la espera. Los elementos Wait se pueden utilizar para dejar que las actualizaciones y los archivos de sonido se completen antes de que comience el siguiente elemento FlyTo o antes de que finalice el viaje.

<gx:Wait>
    <gx:duration>10.0</gx:duration>   <!-- wait time in seconds -->
</gx:Wait>

La cantidad de tiempo de la espera se especifica en segundos, a través del elemento <gx:duration>. Una vez transcurrido el tiempo, el viaje continúa con la siguiente acción especificada en la lista de reproducción. Un elemento Wait divide una ruta de vuelo en modo "smooth", de modo que el movimiento de la cámara se reduce a cero en cualquier punto justo antes de la espera, independientemente de su modo de vuelo.

Elemento de pausa

Las pausas controladas por el usuario se especifican a través de <gx:TourControl> y su elemento secundario <gx:playMode>. Este último tiene un único valor permitido que es pause. La ejecución de esta acción es similar a que el usuario haga clic en el botón de pausa de Google Earth. El viaje se detiene en el punto especificado y permanece detenido hasta que se hace clic en el botón Reproducir. Durante la pausa, el usuario puede desplazarse a su antojo por el entorno de la Tierra. Al hacer clic en Reproducir, el usuario volverá al punto del viaje en el que se estableció la pausa.

Las pausas no dividen las rutas de vuelo en modo "smooth", de modo que el navegador calcula la velocidad entre los puntos en cada lado de la pausa como si dicha pausa no estuviera presente.

<gx:TourControl>
    <gx:playMode>pause</gx:playMode>
</gx:TourControl>

Ejemplos

A continuación, se ofrece un ejemplo de una espera. Un archivo de sonido se coloca en cola; dicho archivo contiene diez segundos de discurso de introducción. Se introduce una espera de diez segundos justo después de la pista de sonido, lo que evita que el siguiente elemento FlyTo se reproduzca hasta que el discurso haya finalizado.

 wait_example.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">   

<gx:Tour>
  <gx:Playlist>

    <gx:SoundCue>
      <href>
        http://dev.keyhole.com/codesite/cntowerfacts.mp3
      </href>   <!-- this file is ten seconds long -->
    </gx:SoundCue>

    <gx:Wait>
      <gx:duration>10</gx:duration>
    </gx:Wait>

    <gx:FlyTo>
      <gx:duration>5</gx:duration>
      <gx:flyToMode>bounce</gx:flyToMode>
      <LookAt>
        <longitude>-79.387</longitude>
<latitude>43.643</latitude>
<altitude>0</altitude> <heading>-172.3</heading> <tilt>10</tilt> <range>1200</range> <altitudeMode>relativeToGround</altitudeMode>
</LookAt> </gx:FlyTo> </gx:Playlist> </gx:Tour> </kml>

En el siguiente ejemplo se muestra el uso de una pausa. El usuario vuela hasta una ubicación geográfica de la Tierra y, a continuación, el viaje se detiene. El usuario puede desplazarse por la Tierra durante el tiempo que desee. Cuando desee reanudar el viaje, deberá seleccionar el botón Reproducir en los controles del viaje. Google Earth volverá a la última ubicación del viaje y continuará con la reproducción.

 pause_example.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">  

<gx:Tour>
  <gx:Playlist>

    <gx:FlyTo>
<gx:duration>5</gx:duration>
<gx:flyToMode>bounce</gx:flyToMode>
<LookAt>
<longitude>-79.387</longitude>
<latitude>43.643</latitude>
<altitude>0</altitude>
<heading>-172.3</heading>
<tilt>10</tilt>
<range>1200</range>
<altitudeMode>relativeToGround</altitudeMode>
</LookAt>
</gx:FlyTo> <gx:TourControl> <gx:playMode>pause</gx:playMode> </gx:TourControl> <gx:SoundCue> <href> http://dev.keyhole.com/codesite/cntowerfacts.mp3 </href> <!-- this file is ten seconds long --> </gx:SoundCue> <gx:Wait> <gx:duration>10.0</gx:duration> </gx:Wait> </gx:Playlist> </gx:Tour> </kml>

Actualizaciones

Los recursos KML de la Tierra se pueden modificar, variar o crear durante un viaje, incluido el tamaño, el estilo y la ubicación de las marcas de posición, la suma de superposiciones de suelo, la geometría, etc. Para obtener más información sobre la actualización de archivos KML, lee la sección Actualizaciones de la Guía para desarrolladores.

Durante un viaje, se pueden realizar actualizaciones del archivo KML. Para habilitar dichas actualizaciones, debes utilizar el elemento <gx:AnimatedUpdate>. El comportamiento de las actualizaciones dentro de un viaje muestra las siguientes diferencias con respecto al comportamiento de las actualizaciones en un elemento de enlace de red (NetworkLink):

  • las actualizaciones del archivo KML se invierten al salir del viaje,
  • las actualizaciones en el archivo KML no se incluyen al guardar el estado actual.

Además, cualquier cambio que las lleve a la interpolación (es decir, que contengan estados intermedios, como cambios de tamaño) se animará durante el período de tiempo especificado. Los cambios que no tengan pasos intermedios (por ejemplo, la apertura o el cierre de viñetas descriptivas) se actualizarán únicamente al final del período de tiempo especificado. Si no se especifica ninguna duración, la actualización se producirá inmediatamente (el valor predeterminado de <gx:duration> es 0,0).

Aparte de las diferencias ya mencionadas, el elemento de actualización (Update) dentro de un elemento <gx:AnimatedUpdate> se comporta del mismo modo que dentro de <NetworkLinkControl>. Se puede utilizar para cambiar el aspecto, la ubicación y el tamaño del marcador, para añadir modelos o superposiciones de suelo y para alternar viñetas de información (con el elemento <gx:balloonVisibility>).

El elemento <gx:AnimatedUpdate> y la línea de tiempo de un viaje

Las actualizaciones animadas se ejecutan en paralelo a la línea de tiempo, es decir, el viaje continúa directamente hasta el siguiente elemento básico de la lista de reproducción, mientras se realiza la actualización animada. El elemento <gx:duration> controla el tiempo que tarda en realizarse la actualización, pero no retrasa el siguiente elemento básico del viaje.

Para permitir que una actualización animada se complete antes de que tenga lugar la siguiente acción, inserta un elemento <gx:Wait> con una duración igual a la duración de la actualización entre la actualización animada y el siguiente elemento básico del viaje.

Además, una actualización animada se truncará si su duración se extiende más allá del último elemento <gx:FlyTo> o <gx:Wait>. Puedes cambiar los valores adecuados de <gx:duration> o introducir un elemento <gx:Wait> adicional al final de la lista de reproducción para dar tiempo a que la actualización animada finalice.

Para obtener más información sobre la línea de tiempo, consulta la sección Línea de tiempo de un viaje más arriba.

Ejemplo

En el siguiente fragmento de código se muestra el cambio de tamaño de un icono determinado de marca de posición de la escala 1,0 a la escala 10,0. El cambio se produce durante 6,5 segundos, durante los que el icono se ampliará gradualmente desde su tamaño inicial a su tamaño final.

Observa la inclusión de un elemento básico <gx:Wait> al final del viaje. Las actualizaciones animadas no mantienen abierto un viaje por sí mismas; solo los elementos básicos de viaje tipo serie definen la duración de un viaje. Por este motivo, se ha introducido una espera de 2,4 segundos. En combinación con el elemento FlyTo de 4,1 segundos, el elemento Wait concede a la actualización el tiempo necesario para completarse antes de que finalice el viaje.

 animatedupdate_example.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2"> <Document> <name>gx:AnimatedUpdate example</name> <open>1</open> <Style id="style"> <IconStyle id="iconstyle"> <scale>1.0</scale> </IconStyle> </Style> <Placemark id="mountainpin1"> <name>New Zealand's Southern Alps</name> <styleUrl>#style</styleUrl> <Point> <coordinates>170.144,-43.605,0</coordinates> </Point> </Placemark> <gx:Tour> <name>Play me!</name> <gx:Playlist> <!-- The order and duration of TourPrimitives is important; in this example, the AnimatedUpdate needs 6.5 seconds to complete. The FlyTo provides 4.1, and the Wait 2.4, giving the update time to complete before the Tour ends. AnimatedUpdates don't hold Tours open, but FlyTos and Waits do. For more information, refer to: http://developers.google.com/kml/documentation/touring.html#tourtimelines --> <gx:AnimatedUpdate> <gx:duration>6.5</gx:duration> <Update> <targetHref></targetHref> <Change> <IconStyle targetId="iconstyle"> <scale>10.0</scale> </IconStyle> </Change> </Update> </gx:AnimatedUpdate> <gx:FlyTo> <gx:duration>4.1</gx:duration> <Camera> <longitude>170.157</longitude> <latitude>-43.671</latitude> <altitude>9700</altitude> <heading>-6.333</heading> <tilt>33.5</tilt> <roll>0</roll> </Camera> </gx:FlyTo> <!-- wait for the AnimatedUpdate to complete --> <gx:Wait> <gx:duration>2.4</gx:duration> </gx:Wait> </gx:Playlist> </gx:Tour> </Document> </kml>

Cómo añadir sonido

Es posible incluir archivos de sonido en los viajes y reproducirlos en cualquier punto mediante el elemento <gx:SoundCue>. Un archivo de sonido se especifica a través de un elemento <href> secundario. Los formatos compatibles dependen de los códecs instalados en el sistema. A continuación se especifican algunos de ellos:

  • mp3
  • aac

No se especifica ninguna duración.

El archivo de sonido se reproduce en paralelo a la línea de tiempo principal, lo que significa que la lista de reproducción avanzará hasta los siguientes elementos básicos del viaje mientras se reproduce el archivo de sonido. Para obtener más información, lee la sección Línea de tiempo de un viaje. Observa que, al igual que las actualizaciones animadas, los archivos de sonido no mantienen abierto un viaje. Solo los elementos básicos de viaje tipo serie definen la duración de un viaje. Si el viaje termina antes de que lo haga el archivo de sonido, la reproducción del archivo de sonido se detendrá.

Cómo reproducir varios archivos de sonido

Es posible reproducir varios archivos de sonido a la vez. Google Earth se encargará de mezclarlos. Se trata de algo muy útil en los casos en los que se carga un archivo de música de fondo al principio del viaje y se proporcionan voces superpuestas en puntos específicos del viaje.

Cómo permitir que un archivo de sonido finalice antes de la reproducción del siguiente elemento básico

Si quieres que el viaje espere mientras se reproduce el archivo de sonido, incluye un elemento <gx:Wait> después del elemento básico <gx:SoundCue>. <gx:Wait> especifica la cantidad de tiempo expresada en segundos que debe esperar el viaje antes de avanzar hasta el siguiente elemento básico.

Un archivo de sonido no se seguirá reproduciendo una vez haya finalizado el viaje. Puedes utilizar una espera (wait) para ampliar la duración de un viaje mientras termina la reproducción del archivo de sonido.

Ejemplo

El viaje de ejemplo que se muestra a continuación tiene una duración de 15 segundos, definida por las duraciones combinadas de <gx:FlyTo> y <gx:Wait>. El primer archivo de sonido dura 15 segundos y se reproduce durante todo el viaje. El segundo archivo está en cola situado a 5 segundos, se mezcla con el primer archivo y se reproduce durante 10 segundos. El elemento <gx:Wait> es necesario para ampliar la duración del viaje de modo que el archivo de sonido disponga del tiempo suficiente para finalizar.

 soundcue_example.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">

<gx:Tour>
  <gx:Playlist>
 
    <gx:SoundCue>
      <href>
        http://dev.keyhole.com/codesite/AJsBlues.mp3
      </href>    <!-- 15 second audio clip -->
    </gx:SoundCue>
 
    <gx:FlyTo>
      <gx:duration>5</gx:duration>
      <gx:flyToMode>bounce</gx:flyToMode>
      <LookAt>
        <longitude>-79.387</longitude>
<latitude>43.643</latitude>
<altitude>0</altitude>
<range>1200</range>
<tilt>10</tilt>
<heading>-172.3</heading>
<altitudeMode>relativeToGround</altitudeMode>
</LookAt> </gx:FlyTo> <gx:SoundCue> <href> http://dev.keyhole.com/codesite/cntowerfacts.mp3 </href> <!-- 10 second audio clip --> </gx:SoundCue> <gx:Wait> <gx:duration>10</gx:duration> <!-- continues the tour for 10 seconds --> </gx:Wait> <!-- while audio clip plays --> </gx:Playlist> </gx:Tour> </kml>

Cómo cambiar entre viñetas descriptivas

Una viñeta de descripción de una marca de posición se puede abrir o cerrar durante un viaje con el elemento <gx:balloonVisibility>, que se encuentra dentro de una actualización animada. Los cambios en la visibilidad de la viñeta se realizarán al final de una duración específica, no se animarán a lo largo del tiempo especificado. Si se omite el valor <gx:duration>, se asignará el valor predeterminado 0,0 (la viñeta se abrirá y se cerrará inmediatamente).

Ejemplo

 balloonvisibility_tourexample.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">
  
  <Document>
    <name>balloonVisibility Example</name>
    <open>1</open>

    <gx:Tour>
      <name>Play me</name>
      <gx:Playlist>
 
        <gx:FlyTo>
          <gx:duration>5.0</gx:duration>
          <!-- bounce is the default flyToMode -->
          <LookAt>
            <longitude>-119.748584</longitude>
            <latitude>33.736266</latitude>
            <altitude>0</altitude>
            <heading>-9.295926</heading>
            <tilt>84.0957450</tilt>
            <range>4469.850414</range>
            <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
          </LookAt>
        </gx:FlyTo>

        <gx:AnimatedUpdate>
          <!-- the default duration is 0.0 -->
          <Update>
            <targetHref/>
            <Change>
              <Placemark targetId="underwater1">
                <gx:balloonVisibility>1</gx:balloonVisibility>
              </Placemark>
            </Change>
          </Update>
        </gx:AnimatedUpdate>

        <gx:Wait>
          <gx:duration>4.0</gx:duration>
        </gx:Wait>

        <gx:AnimatedUpdate>
          <Update>
            <targetHref/>
            <Change>
              <Placemark targetId="underwater1">
                <gx:balloonVisibility>0</gx:balloonVisibility>
              </Placemark>
            </Change>
          </Update>
        </gx:AnimatedUpdate>

        <gx:FlyTo>
          <gx:duration>3</gx:duration> 
          <gx:flyToMode>smooth</gx:flyToMode>
          <LookAt>
            <longitude>-119.782630</longitude>
            <latitude>33.862855</latitude>
            <altitude>0</altitude>
            <heading>-19.314858</heading>
            <tilt>84.117317</tilt>
            <range>6792.665540</range>
            <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
          </LookAt>
        </gx:FlyTo>

        <gx:AnimatedUpdate>
          <Update>
            <targetHref/>
            <Change>
              <Placemark targetId="underwater2">
                <gx:balloonVisibility>1</gx:balloonVisibility>
              </Placemark>
            </Change>
          </Update>
        </gx:AnimatedUpdate>

        <gx:Wait>
          <gx:duration>4.0</gx:duration>
        </gx:Wait>

        <gx:AnimatedUpdate>
          <Update>
            <targetHref/>
            <Change>
              <Placemark targetId="underwater2">
                <gx:balloonVisibility>0</gx:balloonVisibility>
              </Placemark>
            </Change>
          </Update>
        </gx:AnimatedUpdate>

        <gx:FlyTo>
          <gx:duration>3</gx:duration> 
          <gx:flyToMode>smooth</gx:flyToMode>
          <LookAt>
            <longitude>-119.849578</longitude>
            <latitude>33.968515</latitude>
            <altitude>0</altitude>
            <heading>-173.948935</heading>
            <tilt>23.063392</tilt>
            <range>3733.666023</range>
            <altitudeMode>relativeToGround</altitudeMode>
          </LookAt>
        </gx:FlyTo>

        <gx:AnimatedUpdate>
          <Update>
            <targetHref/>
            <Change>
              <Placemark targetId="onland">
                <gx:balloonVisibility>1</gx:balloonVisibility>
              </Placemark>
            </Change>
          </Update>
        </gx:AnimatedUpdate>

        <gx:Wait>
          <gx:duration>4.0</gx:duration>
        </gx:Wait>

      </gx:Playlist>
    </gx:Tour>

    <Placemark id="underwater1">
      <name>Underwater off the California Coast</name>
      <description>
        The tour begins near the Santa Cruz Canyon, 
        off the coast of California, USA.
      </description>
      <Point>
        <gx:altitudeMode>clampToSeaFloor</gx:altitudeMode>
        <coordinates>-119.749531,33.715059,0</coordinates>
      </Point>
    </Placemark>

    <Placemark id="underwater2">
      <name>Still swimming...</name>
      <description>We're about to leave the ocean, and visit the coast...</description>
      <Point>
        <gx:altitudeMode>clampToSeaFloor</gx:altitudeMode>
        <coordinates>-119.779550,33.829268,0</coordinates>
      </Point>
    </Placemark>

    <Placemark id="onland">
      <name>The end</name>
      <description>
        <![CDATA[The end of our simple tour. 
        Use <gx:balloonVisibility>1</gx:balloonVisibility> 
        to show description balloons.]]>
      </description>
      <Point>
        <coordinates>-119.849578,33.968515,0</coordinates>
      </Point>
    </Placemark>

  </Document>
</kml>

Cómo incorporar imágenes históricas

Si el usuario ha habilitado las imágenes históricas en su cliente, puedes especificar la fecha a partir de la cual quieras introducir las imágenes. Para especificar la fecha de la imagen que quieras mostrar, incluye un elemento <gx:TimeStamp> en AbstractView. Ten en cuenta que <gx:TimeStamp> también afecta al archivo KML basado en tiempo y a la luz solar.

Para todas las imágenes anteriores, se utilizará la última fecha especificada.

Ejemplo

 historicalimagery_example.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">

<gx:Tour>
  <name>Small town over time</name>
  <gx:Playlist>
    <gx:FlyTo>
      <gx:duration>5.0</gx:duration>
      <Camera>
        <gx:TimeStamp>
          <when>1990-08-04</when>
        </gx:TimeStamp>
        <longitude>-121.991</longitude>
        <latitude>47.857</latitude>
        <altitude>7000</altitude>
        <altitudeMode>absolute</altitudeMode>
      </Camera>
    </gx:FlyTo>

    <gx:FlyTo>
      <gx:duration>3.0</gx:duration>
      <gx:flyToMode>smooth</gx:flyToMode>
      <Camera>
        <gx:TimeStamp>
          <when>2009</when>
        </gx:TimeStamp>
        <longitude>-121.991</longitude>
        <latitude>47.857</latitude>
        <altitude>7000</altitude>
        <altitudeMode>absolute</altitudeMode>
      </Camera>
    </gx:FlyTo>

  </gx:Playlist>
</gx:Tour>
</kml>

Problemas conocidos

Actualmente, el cliente de Google Earth no es totalmente compatible con la función de viaje KML. A continuación, se especifican algunos de los problemas conocidos; estos errores se solucionarán en futuras versiones.

  • Los elementos <gx:AnimatedUpdate> y <gx:TourControl> dividirán la curva creada por una serie de elementos FlyTo en modo "smooth". Los puntos FlyTo de cada lado de estos elementos quedarán unidos mediante una ruta lineal.
  • Los archivos de sonido cargados con el elemento <gx:SoundCue> continúan en reproducción durante una pausa iniciada por el elemento <gx:TourControl>. Al reanudar el viaje, Google Earth volverá al punto del archivo de sonido en el que se activó la pausa.
  • Al utilizar otros modos de altitud distintos a "absolute", es posible que la ruta entre los puntos FlyTo salte hacia arriba o hacia abajo a medida que la cámara se acerca a un punto. Esto se debe a la carga de datos de relieve actualizados en el cliente. A medida que la cámara se acerca a un punto, el nivel de detalle de la información sobre dicho punto aumenta cada vez más. En consecuencia, es posible que se actualice la elevación del suelo por debajo del punto, por lo que será necesaria una corrección de la ruta en dicho punto.

    Por este motivo, el mecanismo de grabación de Google Earth especifica modos de altitud absolutos (absolute) para todos los puntos FlyTo. Si estas correcciones de ruta interfieren con tu viaje, también deberás convertir las altitudes a valores absolutos.