Viaje en KML

Índice

Introducción

Nuevo en Google Earth 5.0, el viaje habilita vuelos controlados a través de datos geoespaciales, que incluyen:

  • duraciones de vuelo específicas entre las ubicaciones
  • vuelos suaves a ubicaciones pasadas, sin paradas
  • reproducir archivos de sonido en momentos predefinidos durante el viaje
  • Actualizaciones temporales de elementos KML dentro de los límites del recorrido.

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

Espacio de nombres de la extensión de Google

Los elementos KML que definen recorridos se encuentran dentro de un conjunto de extensiones para el estándar KML de OGC mediante el prefijo gx. Para usarlos, debes incluir el URI de espacio de nombres correcto en el elemento <kml> de apertura en tu 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 el recorrido en el conjunto de extensiones gx se incluyen los siguientes:

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

Se admiten los viajes en Google Earth 5.0, pero es posible que no se admita en otros navegadores geográficos. Si el navegador no admite extensiones determinadas, los datos de dichas extensiones deben ignorarse en silencio y el resto del archivo KML debe cargarse sin errores.

Terminología

primitiva de recorrido: uno de un conjunto de elementos que define una acción en un viaje. Un ejemplo de una primitiva de viaje es un FlyTo, definido por el elemento <gx:FlyTo> y sus elementos secundarios.

playlist: Es el contenedor de una lista de primitivas del viaje que define un viaje. La lista de reproducción se puede visualizar en un cronograma (consulta Cronogramas de los viajes para obtener más información).

La estructura de un viaje

Los viajes se construyen colocando elementos específicos, en orden, en un archivo KML. El archivo KML puede contener cualquier otro elemento KML legal junto con el viaje.

El siguiente ejemplo muestra un viaje completo y una carpeta que contiene una serie de marcas de posición. La visita guiada comienza en la Isla Sur de Nueva Zelanda, antes de volar al norte por el monte Taranaki, y demuestra los vuelos smooth y bounce, además del método <gx:balloonVisibility> para abrir un globo descriptivo. Los elementos del viaje se describen con más detalle a continuación.

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>

Cronograma de recorridos

Los recorridos se componen de una serie de primitivas de la gira: vuelos, esperas, TourControls, AnimatedUpdates y SoundCues. Algunas de estas primitivas se reproducen una tras otra y esperan a que se complete una primitiva antes de comenzar la siguiente. Otros se ejecutan en paralelo con otras primitivas, de modo que puedan producirse varias acciones de manera simultánea.

Aspectos básicos que ocurren en la serie

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

Estas primitivas tienen lugar una tras otra y deben estar completas antes de que la lista de reproducción pase a ser cualquier otro elemento, de cualquier tipo. Esto significa que solo puede haber una primitiva de tipo de serie (FlyTo, Wait o TourControl) y no se pueden iniciar SoundCues ni AnimatedUpdates adicionales mientras se realiza una primitiva de tipo de serie.

Principales que ocurren en paralelo

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

Estas primitivas reciben una señal cuando aparecen en la lista de reproducción. Una vez iniciadas, la lista de reproducción pasa inmediatamente a la siguiente primitiva, sin esperar a que se complete SoundCue o AnimatedUpdate. Esto significa lo siguiente:

  • se puede realizar cualquier cantidad de SoundCues o AnimatedUpdates al mismo tiempo, colocándolos uno tras otro en la lista de reproducción
  • SoundCues o AnimatedUpdates pueden ocurrir mientras se reproducen las primitivas de tipo de serie (aunque no se pueden iniciar mientras se reproducen las primitivas de tipo de serie).

En el siguiente diagrama, se ilustra este comportamiento. Haz clic en la imagen para obtener una vista más detallada, incluido el contenido KML que define cada primitiva en la lista de reproducción.


 

El diagrama muestra que cada FlyTo tarda una cantidad específica de tiempo (especificada en su elemento <gx:duration>) en completarse. Solo una vez transcurrido ese tiempo, comienza la siguiente primitiva.

El SoundCue, por otro lado, se realiza en paralelo. La siguiente primitiva en la línea de tiempo principal ocurre de inmediato, al mismo tiempo que comienza a reproducirse el archivo de sonido. El archivo de sonido continúa hasta que se llega al final del archivo o al final del viaje, lo que ocurra primero. Si el viaje finaliza antes de que lo haga el archivo de sonido, este dejará de reproducirse. Cualquier cantidad de archivos de sonido se puede reproducir en cualquier momento, ya que cada uno se carga en su propio cronograma.

Las actualizaciones animadas se comportan de la misma manera. Si el ícono de una marca de posición está configurado para aumentar su tamaño en una duración de 5 segundos, lo hace mientras se llevan a cabo las siguientes primitivas en el cronograma principal.

FlyTo y flyToMode

Los viajes se trasladan de una ubicación a otra, y cada una de ellas se especifica mediante un elemento <gx:FlyTo>. Contiene una AbstractView (<Camera> o <LookAt>) que define la ubicación, el ángulo y la altitud de la visualización en Google Earth.

Además, se puede especificar un flyToMode que le indica al navegador cómo abordar el punto. Antes de la introducción de <gx:Tour>, los "recorridos" se reproducían en el navegador al pasar de un marcador a otro. La velocidad del vuelo (definida por el navegador) era lenta a medida que el navegador se acercaba al marcador, finalizando sin velocidad antes de continuar con el siguiente marcador. Este comportamiento se puede especificar en recorridos mediante la propiedad del elemento <gx:flyToMode>bounce</gx:flyToMode>.

El vuelo smooth de flyToMode permite realizar vuelos fluidos y controlados a través del espacio. La velocidad entre puntos se controla mediante la inclusión de un elemento <gx:duration>, que define el tiempo que tarda el navegador en viajar desde el punto actual hasta la siguiente vista definida. Un vuelo continuo está compuesto por una serie de FlyTos que funcionan con flyToModes. El navegador de Earth interpola la velocidad y el trayecto entre los puntos para que se alcance cada marca de posición en el momento especificado en el KML. A diferencia de bounce de flyToMode, la velocidad no llega a cero hasta que se interrumpe el vuelo según alguno de los siguientes eventos:

  • el final del viaje,
  • un punto con un rebote en totoMode
  • una espera.

Las pausas, las actualizaciones animadas y las señales de sonido no interrumpen el vuelo.

Vuelo inicial

El primer <gx:FlyTo> de una lista de reproducción se envía desde la posición actual del espectador en Google Earth. La duración se observa de modo que la velocidad al primer punto varíe en gran medida, según la ubicación del espectador en Earth cuando se inicie el viaje. Se recomienda que este FlyTo inicial contenga una duración de 5 segundos o más y esté en modo bounce para obtener la mejor experiencia de visualización.

Si <gx:flyToMode> se establece en fluido para el primer FlyTo y va seguido de FlyTos suaves adicionales, la posición inicial del usuario se considerará como un punto en la curva suave y afectará la curva de la ruta de acceso entre el primer punto y los posteriores. Esto significa que la serie inicial de FlyTos suaves será diferente para cada usuario, dependiendo de lo que esté viendo en el cliente Earth cuando se inició el viaje. Si aún deseas usar un FlyTo suave en el punto inicial, se puede insertar un <gx:Wait> en el código del viaje después del primer FlyTo. Esto separará la posición inicial del resto del viaje.

Ejemplos

En los siguientes ejemplos, se muestra la diferencia entre los rebotes y los Smooth FlightToModes. Cada visita visita las mismas marcas de posición, pero utiliza flyToModes diferentes. Para reproducir los viajes en Google Earth, haz clic en los vínculos que se encuentran sobre los fragmentos de código, luego haz doble clic en el nombre del viaje desde el panel Lugares en 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... -->

En espera y pausa

Una acción wait detiene el movimiento por el espacio de un viaje, pero permite que los archivos de sonido y las actualizaciones animadas continúen. La duración de la espera se especifica en el archivo KML.

Una pausa detiene el viaje en su ubicación actual, como si el usuario hubiera hecho clic en el botón de Pausa, y afecta a todas las primitivas. El viaje se reanuda solamente cuando el usuario selecciona el botón Reproducir en el control de viaje en Google Earth.

Espera

Este elemento solo afecta a la cámara. Especifica cuánto tiempo permanecerá quieta la cámara. El cambio no afectará a los archivos de sonido que se estén reproduciendo ni a las actualizaciones animadas. Las esperas se pueden utilizar para que los archivos de sonido o las actualizaciones se completen antes de que se inicie el próximo vuelo o antes de que finalice el viaje.

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

La duración de la espera se especifica en segundos mediante el elemento <gx:duration>. Una vez transcurrido el tiempo, el viaje continúa con la siguiente acción especificada en la lista de reproducción. Una espera rompe una ruta de vuelo continua, de modo que el movimiento de la cámara se reduce a cero velocidad en cualquier punto justo antes de la espera, independientemente de su flyToMode.

Pausas

Las pausas controladas por el usuario se especifican mediante <gx:TourControl> y su elemento secundario, <gx:playMode>. El último tiene un valor único permitido de pause. La invocación de esta acción es similar a la del usuario que hace clic en el botón de pausa en Google Earth: el viaje se detiene en ese momento y permanece pausado hasta que se hace clic en el botón Reproducir. Durante la pausa, el usuario puede moverse a voluntad en el entorno de Earth. Cuando se hace clic en Reproducir, se regresa al punto del viaje en el que se estableció la pausa.

Las pausas no interrumpen las rutas de acceso irregulares, de modo que el navegador calcula la velocidad entre los puntos a ambos lados de una pausa como si la pausa no estuviera presente.

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

Ejemplos

A continuación, se muestra un ejemplo de una espera. Aparece un archivo de sonido con diez segundos de introducción. Una espera de diez segundos se inserta inmediatamente después de la señal de sonido, lo que evita que se produzca el siguiente FlyTo hasta que se complete la voz.

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 demuestra el uso de una pausa. El usuario vuela a una ubicación específica de la Tierra y, a continuación, se detiene el viaje. El usuario puede moverse por el entorno de la Tierra durante cualquier período de tiempo. Cuando estén listos para reanudar el viaje, deben seleccionar Reproducir en los controles del viaje. Google Earth regresa a la última ubicación del viaje y continúa reproduciéndose.

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 elementos KML en el entorno de Earth se pueden modificar, cambiar o crear durante un viaje, incluidos el tamaño, el estilo y la ubicación de los marcadores, la adición de superposiciones de suelo, las formas geométricas y mucho más. Para obtener más información sobre cómo actualizar archivos KML, consulta la sección Actualizaciones de la Guía para programadores.

Las actualizaciones de KML se pueden realizar durante un viaje y se habilitan mediante el uso del elemento <gx:AnimatedUpdate>. El comportamiento de actualización dentro de un viaje se diferencia del comportamiento de actualización en un NetworkLink en que en:

  • Las actualizaciones de KML se revierten al salir del viaje.
  • las actualizaciones del archivo KML no se incluyen cuando se guarda el estado actual.

Además, cualquier cambio que se preste a la interpolación (es decir, que contenga estados intermedios, como cambios en el tamaño) se animará durante el período especificado. Los cambios que no tienen pasos intermedios (como la apertura o el cierre de los globos descriptivos) solo se actualizan al final de la duración especificada. Si no se especifica la duración, la actualización se realiza de inmediato (el valor predeterminado de <gx:duration> es 0.0).

Aparte de las diferencias mencionadas anteriormente, Update dentro de un elemento <gx:AnimatedUpdate> se comporta de la misma manera que Update en <NetworkLinkControl>. Se puede usar para cambiar el tamaño, la ubicación y la apariencia de los marcadores, agregar superposiciones o modelos de suelo y, con el elemento <gx:balloonVisibility>, activar o desactivar los globos de información.

<gx:AnimatedUpdate> y el cronograma de la gira

Las actualizaciones animadas se ejecutan en paralelo a la línea de tiempo; es decir, la visita guiada continúa directamente con la siguiente primitiva de la lista de reproducción, mientras se lleva a cabo la actualización animada. El elemento <gx:duration> controla el tiempo que tarda la actualización en ocurrir, pero no retrasa la siguiente primitiva de viaje.

Para permitir que se complete una actualización animada antes de que se realice la siguiente acción, inserta una <gx:Wait>, con una duración igual a la de la actualización, entre la actualización animada y la siguiente primitiva de viaje.

Además, se truncará la actualización animada si su duración se extiende más allá de las que figuran en los últimos elementos <gx:FlyTo> o <gx:Wait>. Puedes cambiar los valores <gx:duration> apropiados o insertar un elemento <gx:Wait> adicional al final de la lista de reproducción para darle tiempo a la actualización animada para que se complete.

Para obtener más información sobre las rutas, consulta Cronogramas de las giras más arriba.

Ejemplo

En el siguiente fragmento de código, se muestra el cambio en el tamaño de un ícono de marcador en particular, desde una escala de 1.0 hasta una escala de 10.0. El cambio se lleva a cabo en más de 6,5 segundos, durante los cuales el ícono se expande gradualmente desde su tamaño inicial hasta su tamaño final.

Observa la inclusión de un primitivo <gx:Wait> al final del recorrido. Las actualizaciones animadas por sí solas no abren un viaje; solo las primitivas de viaje de tipo serie definen la duración de un viaje. Por este motivo, se insertó una espera de 2.4 segundos. Junto con FlyTo de 4,1 segundos, el tiempo de espera se completa antes de que finalice el viaje.

ejemplo_animado_de_actualización.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 agregar sonido

Los archivos de sonido se pueden incluir en los viajes y se pueden reproducir en cualquier momento con el elemento <gx:SoundCue>. Un elemento secundario <href> especifica el archivo de sonido. Los formatos admitidos dependen de los códecs instalados en su sistema y, además, incluyen, entre otros:

  • mp3
  • aac

No se especificó ninguna duración.

Los archivos de sonido se reproducen en paralelo a la línea de tiempo principal, lo que significa que la lista de reproducción pasará a las siguientes primitivas de la gira mientras se reproduce el archivo de sonido. Para obtener más información, consulta Cronogramas de las giras. Ten en cuenta que, al igual que con las actualizaciones animadas, los archivos de sonido no mantienen abierto un viaje; solo las primitivas de viaje del tipo de serie definen la duración de un viaje. Si el viaje finaliza antes de que se complete un archivo de sonido, este dejará de reproducirse.

Cómo reproducir varios archivos de sonido

Muchos archivos de sonido pueden reproducirse al mismo tiempo: Google Earth mezclará los archivos. Esto resulta útil en los casos en los que se carga un archivo de música de fondo al comienzo de la gira y se proporcionan voces en off en puntos específicos de la gira.

Permite que se complete un archivo de sonido antes de reproducir la siguiente primitiva

Si deseas que el viaje espere mientras se reproduce un archivo de sonido, incluye un elemento <gx:Wait> inmediatamente después de la primitiva <gx:SoundCue>. <gx:Wait> especifica en segundos la cantidad de tiempo que debe esperar el viaje antes de continuar con la siguiente primitiva.

Un archivo de sonido no puede seguir reproduciéndose después del final de un viaje. Se puede utilizar una espera para extender la duración de un viaje mientras se reproduce un archivo de sonido.

Ejemplo

El siguiente recorrido de ejemplo dura 15 segundos y se define en la combinación de duraciones <gx:FlyTo> y <gx:Wait>. El primer clip de sonido dura 15 segundos y se reproduce durante todo el recorrido. El segundo archivo tiene una señal de 5 segundos, se mezcla con el primer archivo y se reproduce durante 10 segundos. Se requiere <gx:Wait> para extender la duración del viaje para que los clips de sonido tengan tiempo suficiente para completarse.

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 activar o desactivar las descripciones

La viñeta de descripción de un marcador se puede abrir o cerrar durante un viaje, usando <gx:balloonVisibility> dentro de una actualización animada. Los cambios en la visibilidad de los globos se realizarán al final de cualquier duración especificada y no se animarán durante el tiempo especificado. Si omites un valor <gx:duration>, se asignará el valor predeterminado de 0.0 (el globo se abrirá o 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 habilitó las imágenes históricas en su cliente, la visita guiada puede especificar la fecha a partir de la cual extraer imágenes. Para especificar la fecha de la imagen que se mostrará, incluye un elemento <gx:TimeStamp> en AbstractView. Ten en cuenta que <gx:TimeStamp> también afecta los KML basados en el tiempo y la luz solar.

Se usará la última fecha especificada para todas las imágenes en curso.

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 los viajes por KML. A continuación, se indican algunos de los problemas conocidos, que pueden solucionarse en las próximas versiones.

  • Los elementos <gx:AnimatedUpdate> y <gx:TourControl> romperán la curva creada por una serie de FlyTos suaves. Los puntos de FlyTo a ambos lados de estos elementos se unirán con una ruta lineal.
  • Los archivos de sonido cargados con <gx:SoundCue> se siguen reproduciendo durante una pausa que inició <gx:TourControl>. Cuando se reanude el viaje, Google Earth volverá al punto del archivo de sonido en el que se activó la pausa.
  • Cuando se usan modos de altitud distintos de los valores absolutos, la ruta entre FlyTos puede subir o bajar cuando la cámara se acerca a un punto. Esto se debe a que los datos de relieve actualizados se cargan en el cliente: a medida que la cámara se acerca a un punto, la información sobre ese punto se vuelve cada vez más detallada. Como resultado, se puede actualizar la elevación del piso debajo del punto y se debe corregir la ruta.

    Por este motivo, el mecanismo de registro de Google Earth especifica los modos de altitud absoluta para todos los FlyTos. También debes convertir las altitudes en valores absolutos si estas correcciones de rutas interfieren en tu viaje.