Visite au format KML

Sommaire

Présentation

Nouveauté de Google Earth 5.0, la visite permet de contrôler les vols à l'aide de données géospatiales, y compris:

  • durées de vol spécifiques entre les lieux
  • des vols fluides au-delà des lieux, sans s'arrêter
  • lire des fichiers audio à des moments prédéfinis pendant la visite
  • Mises à jour temporaires des éléments KML dans les limites de la visite

Pour en savoir plus sur les visites depuis un point de vue client Google Earth, consultez le Guide de l'utilisateur de Google Earth.

Espace de noms de l'extension Google

Les éléments KML qui définissent des visites sont contenus dans un ensemble d'extensions de la norme KML OGC, à l'aide du préfixe gx. Pour les utiliser, vous devez inclure l'URI d'espace de noms correct dans l'élément <kml> d'ouverture de votre fichier KML:

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

Les éléments liés à la visite dans l'ensemble d'extensions gx incluent:

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

La visite est compatible avec Google Earth 5.0, mais peut-être pas dans d'autres navigateurs géographiques. Si votre navigateur n'est pas compatible avec certaines extensions, les données de ces extensions doivent être ignorées en mode silencieux et le reste du fichier KML doit se charger sans erreur.

Terminologie

visite primitive : un ensemble d'éléments qui définissent une action dans une visite. FlyTo est un exemple de primitive de visite, défini par l'élément <gx:FlyTo> et ses enfants.

playlist: conteneur d'une liste de primitives de visite qui définissent une visite. La playlist peut être visualisée selon une chronologie (consultez la section Chronologie des visites pour en savoir plus).

Structure d'une visite

Les visites sont construites en plaçant des éléments spécifiques, dans l'ordre, dans un fichier KML. Le fichier KML peut contenir d'autres éléments KML légaux en plus de la visite.

L'exemple suivant illustre une visite complète et un dossier contenant plusieurs repères. La visite commence sur l'île du Sud de la Nouvelle-Zélande, avant de voler vers le nord via le mont Taranaki. Elle présente les modes flyToModes fluides et rebonds, ainsi que la méthode <gx:balloonVisibility> d'ouverture d'une info-bulle. Les éléments de la visite sont décrits plus en détail ci-dessous.

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>

Chronologie des visites

Les visites sont composées d'une série de primitives de visite : FlyTos, Waits, TourControls, AnimatedUpdates et SoundCues. Certaines de ces primitives sont jouées l'une après l'autre, en attendant qu'une primitive se termine avant de passer à la suivante. D'autres s'exécutent parallèlement à d'autres primitives, ce qui permet d'effectuer plusieurs actions simultanément.

Les principes de base des séries

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

Ces primitives se déroulent l'une après l'autre. Elles doivent être complètes pour que la playlist passe à un autre élément, de quelque type que ce soit. Cela signifie qu'une seule primitive de type série (FlyTo, Wait ou TourControl) peut avoir lieu à la fois, et qu'aucun SoundCue ou AnimatedUpdates supplémentaire ne peut être démarré lorsqu'une primitive de type série est en cours.

Les principes primitifs qui se produisent en parallèle

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

Ces primitives sont ajoutées à la file d'attente lorsqu'elles apparaissent dans la playlist. Une fois lancées, la playlist passe immédiatement à la primitive suivante, sans attendre la fin de SoundCue ou de AnimatedUpdate. Qu'est-ce que cela signifie ?

  • n'importe quel nombre de SoundCues et/ou de mises à jour animées, en les ajoutant les uns après les autres dans la playlist.
  • Les SoundCues et/ou les AnimatedUpdates peuvent se produire pendant la lecture des primitives de type série (mais elles ne peuvent pas être démarrées pendant la lecture des primitives de type série).

Le schéma ci-dessous illustre ce comportement. Cliquez sur l'image pour afficher une vue plus détaillée, y compris le contenu KML qui définit chaque primitive dans la playlist.


 

Le diagramme montre que chaque FlyTo prend un certain temps (spécifié dans son élément <gx:duration>). Ce n'est qu'une fois ce temps écoulé que le suivant commence.

L'outil SoundCue, en revanche, a lieu en parallèle. La primitive suivante dans la timeline principale se produit immédiatement, au moment où la lecture du fichier audio commence. Le fichier audio continue jusqu'à la fin du fichier ou la fin de la visite, selon la première de ces éventualités. Si la visite se termine avant la fin du fichier audio, la lecture cesse. Vous pouvez lire autant de fichiers audio que vous le souhaitez, ceux-ci étant chargés dans leur propre timeline.

Les mises à jour animées se comportent de la même manière. Si l'icône d'un repère est configurée pour s'agrandir pendant plus de cinq secondes, elle s'exécute pendant que les primitives suivantes de la timeline principale ont lieu.

FlyTo et flyToMode

Les visites varient d'un lieu à un autre. Chacune d'entre elles est spécifiée à l'aide d'un élément <gx:FlyTo>. Il contient un AbstractView (<Camera> ou <LookAt>) qui définit le lieu de visionnage, l'angle et l'altitude dans Google Earth.

De plus, un mode flyToMode peut être spécifié, ce qui indique au navigateur comment aborder le point. Avant l'introduction de <gx:Tour>, les visites étaient lues dans le navigateur en passant d'un repère à l'autre. La vitesse de vol (définie par le navigateur) ralentissait lorsque le navigateur approchait le repère, se terminant à zéro à la vitesse avant de passer au repère suivant. Ce comportement peut toujours être spécifié dans les visites à l'aide de la propriété d'élément <gx:flyToMode>bounce</gx:flyToMode>.

Le mode flyToMode lissage permet de survoler l'espace de façon fluide et contrôlée. La vitesse entre les points est contrôlée par l'inclusion d'un élément <gx:duration>, qui définit le temps nécessaire au navigateur pour se rendre du point actuel à la vue définie suivante. Un vol ininterrompu est constitué d'une série de FlyTos avec des modes flyToModes lisses : le navigateur Earth interpole la vitesse et un tracé incurvé entre les points afin que chaque repère soit atteint exactement au moment spécifié dans le KML. Contrairement à flyToMode de rebond, la vitesse n'atteint jamais zéro tant que l'un des événements suivants ne s'est pas arrêté au vol:

  • à la fin de la visite,
  • Un point avec un mode flyToMode renvoyé
  • une attente.

Les pauses, les mises à jour animées et les signaux sonores n'interrompent pas le vol.

FlyTo initial

Les premiers <gx:FlyTo> contenus dans une playlist sont dirigés vers le point de vue actuel de l'utilisateur dans Google Earth. La durée est observée, de sorte que la vitesse jusqu'au premier point varie considérablement, en fonction de l'emplacement de la visionneuse dans Google Earth lorsque la visite commence. Pour une expérience de visionnage optimale, nous vous recommandons d'utiliser cet élément FlyTo initial d'une durée minimale de cinq secondes et d'un rebond automatique.

Si <gx:flyToMode> est défini sur smooth (lissé) pour le premier FlyTo et est suivi par des FlyTos lisses supplémentaires, la position initiale de l'utilisateur sera considérée comme un point de la courbe lisse et affectera la courbe du tracé entre le premier et les points suivants. Cela signifie que la série initiale de FlyTos sera différente pour chaque spectateur, en fonction de ce qu'ils regardaient dans le client Earth au début de la visite. Si vous souhaitez toujours appliquer un composant FlyTo lisse au point de départ, vous pouvez insérer un <gx:Wait> dans le code de la visite après le premier FlyTo. La position initiale sera ainsi séparée du reste de la visite.

Exemples

Les exemples suivants montrent la différence entre les modes flyToModes lisses et fluides. Chaque visite visite les mêmes repères, mais utilise des modes flyToModes différents. Pour lancer les visites dans Google Earth, cliquez sur les liens situés au-dessus de chaque extrait de code, puis double-cliquez sur le nom de la visite dans le panneau Lieux de Google Earth.

bou__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 attente et en pause

Une attente interrompt le déplacement dans l'espace d'une visite, mais permet aux fichiers audio et aux mises à jour animées de continuer. La durée d'attente est spécifiée dans le fichier KML.

Une pause arrête la visite à son emplacement actuel, comme si l'utilisateur avait cliqué sur le bouton Pause, ce qui a un impact sur toutes les primitives. La visite reprend uniquement lorsque l'utilisateur sélectionne le bouton Lire dans la commande de visite dans Google Earth.

Attente

Cet élément n'affecte que la caméra. Elle permet de spécifier la durée pendant laquelle l'appareil photo reste immobile. Les fichiers audio et/ou les mises à jour animées en cours de lecture ne sont pas affectés et continuent d'attendre. Les temps d'attente permettent de laisser aux fichiers audio ou aux mises à jour le temps de se terminer, avant que le prochain FlyTo ne commence ou avant la fin de la visite.

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

La durée d'attente est spécifiée en secondes à l'aide de l'élément <gx:duration>. Une fois le temps écoulé, la visite se poursuit avec l'action suivante spécifiée dans la playlist. Une attente interrompt une trajectoire de vol fluide, de sorte que le mouvement de la caméra ralentit à zéro vitesse à n'importe quel moment immédiatement avant l'attente, indépendamment de son mode flyToMode.

Pauses

Les pauses contrôlées par l'utilisateur sont spécifiées à l'aide de <gx:TourControl> et de son élément enfant, <gx:playMode>. La valeur pause de cette valeur est autorisée une seule fois. Cette action est semblable à l'action suivante pour l'utilisateur qui clique sur le bouton "Pause" dans Google Earth : la visite s'arrête à cet endroit et reste en pause jusqu'à ce que l'utilisateur appuie sur le bouton Lecture. Pendant la pause, l'utilisateur peut se déplacer dans l'environnement Earth à sa guise. Lorsque l'utilisateur clique sur Lecture, il est renvoyé à l'endroit de la visite où la pause a été définie.

Les pauses n'interrompent pas les trajectoires de vol fluides, de sorte que la vitesse entre les points situés de chaque côté d'une pause est calculée par le navigateur comme si la pause n'était pas présente.

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

Exemples

Vous trouverez ci-dessous un exemple d'attente. Un fichier audio est ajouté à la file d'attente et contient 10 secondes de discours d'introduction. Un délai de 10 secondes est inséré immédiatement après le signal sonore, ce qui empêche l'événement FlyTo suivant de se produire jusqu'à la fin du discours.

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>

L'exemple suivant illustre l'utilisation d'une pause. La visionneuse est dirigée vers un lieu spécifique dans Earth, puis la visite est mise en pause. L'utilisateur peut se déplacer dans l'environnement Earth pendant n'importe quelle durée. Lorsqu'il est prêt à reprendre la visite, il doit sélectionner l'option Lire dans les commandes. Google Earth retourne au dernier lieu de la visite et reprend sa lecture.

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>

Mises à jour

Vous pouvez modifier, modifier ou créer des éléments KML dans l'environnement Earth lors d'une visite, comme la taille, le style et l'emplacement des repères, l'ajout de superpositions au sol, la géométrie, etc. Pour en savoir plus sur la mise à jour des fichiers KML, consultez la section Mises à jour du Guide du développeur.

Les mises à jour du fichier KML peuvent avoir lieu au cours d'une visite et sont activées via l'élément <gx:AnimatedUpdate>. Le comportement de mise à jour d'une visite diffère du comportement de la fonction "Update" dans un objet NetworkLink dans les cas suivants:

  • Les mises à jour du fichier KML sont inversées lorsque l'internaute quitte la visite.
  • les mises à jour du fichier KML ne sont pas incluses lorsque l'état actuel est enregistré.

En outre, toutes les modifications qui se prêtent à une interpolation (c'est-à-dire, qui contiennent des états intermédiaires, comme des changements de taille) sont animées sur la durée spécifiée. Les modifications qui n'ont pas d'étapes intermédiaires (telles que l'ouverture ou la fermeture des info-bulles de description) ne sont mises à jour qu'à la fin de la durée spécifiée. Si aucune durée n'est spécifiée, la mise à jour s'effectue immédiatement (la valeur par défaut de <gx:duration> est 0.0).

Hormis les différences répertoriées ci-dessus, la fonctionnalité de mise à jour dans un élément <gx:AnimatedUpdate> se comporte de la même manière que dans <NetworkLinkControl>. Vous pouvez l'utiliser pour modifier la taille, l'emplacement et l'apparence des repères, ajouter des superpositions ou des modèles au sol, et activer ou désactiver des info-bulles à l'aide de l'élément <gx:balloonVisibility>.

<gx:AnimatedUpdate> et la chronologie de la visite

Les mises à jour animées sont exécutées parallèlement à la timeline. En d'autres termes, la visite se poursuit directement avec la primitive suivante de la playlist, pendant que la mise à jour animée est en cours. Le <gx:duration> contrôle la durée nécessaire à la mise à jour, mais ne retarde pas la primitive de visite suivante.

Pour autoriser la fin d'une mise à jour animée avant l'exécution de l'action suivante, insérez un <gx:Wait>, avec une durée égale à la durée de la mise à jour, entre la mise à jour animée et la primitive de visite suivante.

En outre, une mise à jour animée sera tronquée si sa durée dépasse celle du dernier élément <gx:FlyTo> ou <gx:Wait>. Vous pouvez modifier les valeurs <gx:duration> appropriées ou insérer un élément <gx:Wait> supplémentaire à la fin de la playlist pour laisser le temps à l'animation de se terminer.

Pour en savoir plus sur la chronologie, consultez Chronologie des visites ci-dessus.

Exemple

L'extrait de code suivant montre le changement de taille d'une icône de repère spécifique, passant d'une échelle de 1,0 à une échelle de 10,0. La modification prend effet pendant plus de 6,5 secondes, au cours desquelles l'icône se développe progressivement pour passer de sa taille initiale à sa taille finale.

Notez l'inclusion d'une primitive <gx:Wait> à la fin de la visite. Les mises à jour animées n'ouvrent pas automatiquement une visite. Seules les primitives de visite de type série définissent la durée d'une visite. C'est pourquoi un délai de 2, 4 secondes a été inséré. Combiné à un FlyTo de 4,1 secondes, l'attente donne le temps à la mise à jour de se terminer avant la fin de la visite.

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>

Ajouter un son

Vous pouvez inclure des fichiers audio dans les visites et les lire à tout moment à l'aide de l'élément <gx:SoundCue>. Un élément <href> enfant spécifie le fichier audio. Les formats compatibles dépendent des codecs installés sur votre système et incluent, sans s'y limiter:

  • mp3
  • aac

Aucune durée n'est spécifiée.

Les fichiers audio sont lus parallèlement à la timeline principale, ce qui signifie que la playlist passe aux primitives suivantes de la visite pendant la lecture du fichier audio. Pour en savoir plus, consultez la section Chronologie des visites. Notez que, comme pour les mises à jour animées, les fichiers audio ne permettent pas d'ouvrir une visite. Seules les primitives de visite de type série définissent la durée d'une visite. Si la visite se termine avant la fin de l'enregistrement d'un fichier audio, la lecture cesse.

Lire plusieurs fichiers audio

De nombreux fichiers audio peuvent être lus en même temps. Google Earth mélangera les fichiers. Cette fonctionnalité est utile lorsqu'un fichier de musique de fond est chargé au début de la visite et que des voix off sont fournies à certains moments de la visite.

Autoriser l'exécution d'un fichier audio avant la lecture de la primitive suivante

Si vous souhaitez que la visite attende pendant la lecture d'un fichier audio, ajoutez un élément <gx:Wait> immédiatement après la primitive <gx:SoundCue>. <gx:Wait> indique, en secondes, le délai d'attente de la visite avant de passer à la primitive suivante.

La lecture d'un fichier audio ne peut pas se poursuivre après la fin d'une visite. Vous pouvez utiliser une attente pour prolonger la durée d'une visite pendant la lecture d'un fichier audio.

Exemple

L'exemple de visite ci-dessous dure 15 secondes et est défini par les durées combinées <gx:FlyTo> et <gx:Wait>. Le premier extrait audio dure 15 secondes et est diffusé pendant toute la durée de la visite. Le second fichier est ajouté à la file d'attente pendant cinq secondes, est mélangé au premier fichier et est diffusé pendant 10 secondes. L'élément <gx:Wait> est nécessaire pour prolonger la durée de la visite afin que la durée des extraits audio soit suffisante.

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>

Activation des info-bulles de description

L'info-bulle de description d'un repère peut être ouverte ou fermée pendant une visite, à l'aide de <gx:balloonVisibility> dans une mise à jour animée. Les modifications apportées à la visibilité des info-bulles sont effectuées à la fin d'une durée spécifiée. Elles ne s'animent pas sur la période indiquée. Si vous ne renseignez pas la valeur <gx:duration>, la valeur par défaut 0.0 est attribuée (l'info-bulle s'ouvre ou se ferme immédiatement).

Exemple

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>

Intégrer des images historiques

Si l'utilisateur a activé les images historiques dans son client, vous pouvez spécifier la date à partir de laquelle les images seront extraites. Pour spécifier la date de l'image à afficher, incluez un élément <gx:TimeStamp> dans AbstractView. Notez que <gx:TimeStamp> a également une incidence sur les fichiers KML KML et Sunlight.

La dernière date spécifiée sera utilisée pour toutes les images suivantes.

Exemple

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>

Problèmes connus

Pour le moment, le client Google Earth ne respecte pas complètement la fonction de visite KML. Certains problèmes connus sont listés ci-dessous. Ils pourront être corrigés dans les prochaines versions.

  • Les éléments <gx:AnimatedUpdate> et <gx:TourControl> briseront la courbe créée par une série d'éléments FlyTos lisses. Les points FlyTo de chaque côté seront reliés par un tracé linéaire.
  • La lecture des fichiers audio chargés avec <gx:SoundCue> continue pendant une pause lancée par <gx:TourControl>. Lorsque la visite reprend, Google Earth revient directement au point dans le fichier audio à partir duquel la pause a été déclenchée.
  • Si vous n'utilisez pas des modes d'altitude, le trajet entre les appareils FlyTo peut augmenter ou diminuer à mesure que l'appareil photo approche d'un point. Ce problème survient lorsque des données de relief actualisées sont chargées dans le client : lorsque l'appareil photo approche d'un point, les informations sur ce point deviennent de plus en plus détaillées. Par conséquent, l'élévation du sol par rapport au point peut être mise à jour, ce qui nécessite une correction dans le chemin vers ce point.

    Pour cette raison, le mécanisme d'enregistrement de Google Earth spécifie des modes d'altitude absolus pour tous les FlyTos. Vous devez également convertir les altitudes en valeurs absolues si ces corrections interfèrent avec la visite.