Wycieczka w pliku KML

Spis treści

Wprowadzenie

Nowość w Google Earth 5.0: wycieczki z kontrolą lokalizacji umożliwiają wykorzystanie danych geoprzestrzennych, takich jak:

  • konkretne loty między lokalizacjami
  • sprawny lot w przeszłości, bez przesiadek
  • odtwarzanie plików dźwiękowych w zdefiniowanym czasie trasy koncertowej
  • tymczasowe aktualizacje funkcji KML w obrębie objazdu

Więcej informacji o wycieczkach z punktu widzenia klienta Google Earth znajdziesz w Przewodniku użytkownika Google Earth.

Przestrzeń nazw rozszerzenia Google

Elementy KML, które definiują wycieczki, są zawarte w zestawie rozszerzeń do standardu OGC KML przy użyciu prefiksu gx. Aby ich używać, musisz uwzględnić prawidłowy identyfikator URI przestrzeni nazw w otwierającym elemencie <kml> w pliku KML:

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

Elementy związane z trasą w zestawie rozszerzenia gx obejmują:

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

Wycieczki są obsługiwane w Google Earth 5.0, ale mogą nie być obsługiwane w innych przeglądarkach. Jeśli Twoja przeglądarka nie obsługuje określonych rozszerzeń, dane w tych rozszerzeniach powinny być ignorowane, a reszta pliku KML powinna zostać wczytana bez błędów.

Terminologia

element podstawowy wycieczki: jeden z zestawu elementów określających działanie w trasie. Przykład elementu podstawowego wycieczki to FlyTo zdefiniowany przez element <gx:FlyTo> i jego elementy podrzędne.

playlista: kontener na listę podstawowych elementów sterujących definiujących wycieczki. Playlistę możesz wizualizować na osi czasu (więcej informacji znajdziesz w artykule Oś czasu wycieczki).

Struktura wycieczki

Wycieczki tworzy się, umieszczając określone elementy w kolejności pliku KML. Wraz z wycieczką plik KML może zawierać dowolne inne prawne elementy KML.

Poniższy przykład zawiera pełną prezentację oraz folder zawierający szereg oznaczeń miejsc. Wycieczka rozpoczyna się na Wyspie Południowej Nowej Zelandii, przed wylotem na górze Taranaki i przedstawia płynne i odrzucane metody toTooks, a także metodę <gx:balloonVisibility> otwierania dymków opisu. Elementy wycieczki są szczegółowo opisane poniżej.

complete_tour_example.json

<?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>

Oś czasu wycieczki

Wycieczki składają się z serii podstawowej – FlyTos, Waits, TourControls,animedUpdates i SoundCues. Niektóre z tych podstawowych elementów są odtwarzane po kolei, czekając na ukończenie jednego, zanim zaczną następne. Inne działają równolegle do innych obiektów podstawowych, więc mogą pojawiać się jednocześnie różne działania.

Prefektury występujące w serii

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

Podstawowe elementy następują po sobie i muszą zostać w pełni ukończone, zanim nastąpi przejście do odtwarzania dowolnego elementu playlisty. Oznacza to, że w tym samym czasie może odbywać się tylko jeden element podstawowy typu (FlyTo, Wait lub TourControl). Nie może to też nastąpić rozpoczęcia żadnych dodatkowych działań dźwiękowych ani animowanych aktualizacji podstawowych.

Prawdopodobieństwo, które występują równolegle

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

Te elementy podstawowe są wskazane, gdy pojawiają się na playliście. Po uruchomieniu playlista jest przenoszona od razu do następnego elementu głównego bez czekania na zakończenie elementu SoundCue lubAnimedUpdate. Oznacza to, że:

  • mogą wystąpić jednocześnie wszystkie sygnały dźwiękowe i/lub animowane, wskazując je pojedynczo na playliście
  • Podczas odtwarzania prymitywów typu seria mogą zostać zrealizowane obiekty SoundCues i AnimedUpdates (nie można jednak ich rozpocząć).

Poniższy diagram przedstawia to zachowanie. Kliknij obraz, aby zobaczyć bardziej szczegółowy widok, w tym treści KML, które definiują poszczególne elementy playlisty.


 

Schemat pokazuje, że każda FlyTo zajmuje określony czas (określony w elemencie <gx:duration>). Tylko po upływie tego czasu rozpoczyna się kolejny element podstawowy.

Z kolei SoundCue odbywa się równolegle. Następny element podstawowy na głównej osi czasu ma miejsce od razu w momencie rozpoczęcia odtwarzania pliku dźwiękowego. Plik dźwiękowy trwa, aż do końca pliku lub końca prezentacji – w zależności od tego, co nastąpi wcześniej. Jeśli wycieczka zakończy się przed końcem pliku audio, zostanie on zatrzymany. W danej chwili możesz odtworzyć dowolną liczbę plików dźwiękowych, bo każdy z nich jest wczytywany na osobnej osi czasu.

Animowane aktualizacje działają tak samo. Jeśli ikona oznaczenia miejsca jest ustawiona na zwiększanie rozmiaru w ciągu 5 sekund, następuje to w kolejnych elementach podstawowych na głównej osi czasu.

FlyTo i FlyToMode

Wycieczki odbywają się z lokalizacji do lokalizacji. Każda z nich jest określona za pomocą elementu <gx:FlyTo>. Zawiera ona AbstractView (<Camera> lub <LookAt>), który określa lokalizację wyświetlania, kąt i wysokość w Google Earth.

Możesz też określić flyToMode, które informuje przeglądarkę, jak podchodzić do punktu. Przed wprowadzeniem <gx:Tour> trasy wycieczki były odtwarzane w przeglądarce przez przeskoczenie z oznaczenia miejsca do oznaczenia miejsca – szybkość lotu (określona przez przeglądarkę) była wolna, gdy przeglądarka zbliżyła się do oznaczenia miejsca, z prędkością zerową do przejścia do następnego oznaczenia miejsca. To zachowanie można określić za pomocą właściwości elementu <gx:flyToMode>bounce</gx:flyToMode>.

Płynny tryb toTo umożliwia płynny i kontrolowany lot w kosmosie. Szybkość między punktami jest kontrolowana przez uwzględnienie elementu <gx:duration>, który określa czas potrzebny przeglądarce na przejście z bieżącego miejsca do następnego zdefiniowanego widoku. Nieprzerwany lot składa się z serii FlyTos z płynnym flyToModes – przeglądarka Earth interpoluje prędkość i zakrzywioną ścieżkę między punktami, dzięki czemu każde oznaczenie miejsca jest osiągane dokładnie w czasie określonym w pliku KML. W przeciwieństwie do odrzucenia flyToMode prędkość nigdy nie osiąga 0, dopóki lot nie zostanie uszkodzony przez dowolne z tych zdarzeń:

  • na koniec prezentacji,
  • punkt z odrzuceniem „ToToMode” lub
  • czekaj.

Wstrzymanie, animowana aktualizacja i sygnały dźwiękowe nie przerywają lotu.

Wstępne pilotowanie

Pierwszy element <gx:FlyTo> znajdujący się na playliście jest przenoszony do obecnego widoku osoby w Google Earth. Czas ten jest obserwowany, więc prędkość do pierwszego punktu będzie bardzo różna w zależności od lokalizacji widza na Ziemi podczas uruchamiania wycieczki. Zalecamy, aby początkowe FlyTo zajmowały co najmniej 5 sekund i działały w trybie odrzucania.

Jeśli w przypadku pierwszego elementu FlyTo <gx:flyToMode> ma ustawienie wygładzone, a po nim następuje dodatkowe płynne przejście, widok początkowy jest traktowany jako punkt na krzywej gładkiej i ma wpływ na krzywą ścieżki między pierwszym i kolejnym punktem. Oznacza to, że początkowa seria FlyTos będzie inna dla każdego widza, w zależności od tego, co oglądał w kliencie Earth po rozpoczęciu wycieczki. Jeśli płynne przejście FlyTo do punktu początkowego jest pożądane, do kodu wycieczki można wstawić <gx:Wait> po kodzie pierwszej FlyTo. Spowoduje to oddzielenie położenia początkowego od reszty prezentacji.

Przykłady

Poniższe przykłady pokazują różnicę między odrzuceńami a płynnymi elementami flyToModes. Każda wycieczka odwiedza te same oznaczenia miejsc, ale korzysta z różnych trybów flyToModes. Aby odtworzyć wycieczki w Google Earth, kliknij linki nad poszczególnymi fragmentami kodu, a następnie kliknij dwukrotnie nazwę wycieczki w panelu Miejsca.

odrzucenie_przykładu.json

<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.json

<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... -->

Oczekiwanie i wstrzymanie

Oczekiwanie zatrzymuje poruszanie się w przestrzeni wycieczki, ale pozwala kontynuować pliki dźwiękowe i animowane. Długość oczekiwania jest określona w pliku KML.

Wstrzymanie zatrzymuje prezentację w bieżącej lokalizacji, tak jakby użytkownik kliknął przycisk Wstrzymaj. Ma to wpływ na wszystkie elementy podstawowe. Wycieczka zostanie wznowiona tylko wtedy, gdy użytkownik kliknie przycisk Odtwórz w panelu wycieczki w Google Earth.

Oczekiwanie

Ten element ma wpływ tylko na kamerę. Określa, jak długo kamera była nieruchoma. Nie ma to wpływu na aktualnie odtwarzane pliki dźwiękowe i animacje, które są widoczne do końca. Można użyć czasu oczekiwania, aby pliki dźwiękowe lub aktualizacje zostały ukończone, przed rozpoczęciem następnego FlyTo lub przed zakończeniem wycieczki.

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

Czas oczekiwania określa się w sekundach za pomocą elementu <gx:duration>. Po upływie określonego czasu wycieczka jest kontynuowana z kolejnym określonym działaniem na playliście. Oczekiwanie powoduje płynną ścieżkę lotu, dzięki czemu ruch kamery zwalnia z powodu zerowej prędkości w dowolnym momencie przed odczekaniem, bez względu na to, czy jest to tryb FlexToMode.

Wstrzymania

Wstrzymania kontrolowane przez użytkownika są określane za pomocą <gx:TourControl> i jego elementu podrzędnego <gx:playMode>. W tym drugim przypadku jedno dozwolone ustawienie pause. Działanie to jest podobne do kliknięcia przycisku wstrzymania w Google Earth – odtwarzanie jest wstrzymywane w tym momencie i pozostaje wstrzymane do chwili kliknięcia przycisku Odtwórz. W trakcie wstrzymania użytkownik może poruszać się w środowisku Earth o. Kliknięcie Odtwórz powoduje powrót do punktu, w którym została wstrzymana.

Pauzy nie przerywają płynnych ścieżek, więc prędkość między punktami po obu stronach wstrzymania jest obliczana przez przeglądarkę tak, jakby nie było wstrzymania.

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

Przykłady

Przykład oczekiwania znajdziesz poniżej. Plik dźwiękowy jest wstrzymywany i zawiera 10 sekund mowy wprowadzającej. 10-sekundowe oczekiwanie jest wstawiane bezpośrednio po sygnale dźwiękowym, co uniemożliwia zastosowanie następującego elementu FlyTo do zakończenia mowy.

wait_example.json

<?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>

Poniższy przykład pokazuje zastosowanie wstrzymania. Osoba lecąca do określonego miejsca na Ziemi, prezentowana wycieczka została wstrzymana. Użytkownik może poruszać się w środowisku Google Earth przez dowolny czas. Aby kontynuować prezentację, użytkownik musi wybrać Odtwórz w elementach sterujących wycieczki – Google Earth wraca do ostatniej lokalizacji wycieczki i kontynuuje jej odtwarzanie.

pause_example.json

<?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>

Aktualizacje

Podczas trasy wycieczki można modyfikować, zmieniać lub tworzyć obiekty KML w środowisku Earth, w tym rozmiar, styl i lokalizację oznaczeń miejsc, możliwość dodawania nawierzchni lub geometrii. Więcej informacji o aktualizowaniu plików KML znajdziesz w sekcji Aktualizacje w przewodniku dla programistów.

Aktualizacje plików KML można wprowadzać podczas wycieczki i włączać za pomocą elementu <gx:AnimatedUpdate>. Zachowanie aktualizacji podczas wycieczki różni się od działania funkcji aktualizacji w elemencie NetworkLink:

  • aktualizacje pliku KML są odwracane po zamknięciu wycieczki,
  • aktualizacje pliku KML nie są uwzględniane po zapisaniu bieżącego stanu.

Ponadto wszystkie zmiany, które nadają się do interpolacji (czyli zawierają stany pośrednie, takie jak zmiany rozmiaru), są animowane w określonym czasie trwania. Zmiany, które nie mają kroków pośrednich (takich jak otwieranie lub zamykanie dymków opisu), są aktualizowane tylko na końcu określonego czasu trwania. Jeśli nie określisz czasu trwania, aktualizacja zostanie przeprowadzona natychmiast (domyślna wartość w polu <gx:duration> to 0.0).

Z wyjątkiem różnic wymienionych powyżej opcja Aktualizacja w elemencie <gx:AnimatedUpdate> działa tak samo jak aktualizacja w elemencie <NetworkLinkControl>. Można go używać do zmiany rozmiaru, położenia i wyglądu znacznika, a także dodawania do niego nakładek lub modeli. Za pomocą elementu <gx:balloonVisibility> można przełączać dymki informacyjne.

<gx:AnimatedUpdate> i oś wycieczki

Animowane aktualizacje są uruchamiane równolegle do osi czasu, co oznacza, że prezentacja przechodzi bezpośrednio do kolejnej głównej pozycji na playliście w czasie jej trwania. <gx:duration> określa czas potrzebny na aktualizację, ale nie opóźnia podstawowej wersji wycieczki.

Aby umożliwić przeprowadzenie animowanej aktualizacji przed podjęciem następnej czynności, wstaw <gx:Wait> o czasie trwania równym czasowi aktualizacji między animacjami aktualizacji a wydarzeniem podstawowym.

Poza tym jeśli czas trwania wykracza poza ostatni element <gx:FlyTo> lub <gx:Wait>, animowana aktualizacja jest skracana. Aby poprawić czas animacji, możesz zmienić odpowiednie wartości <gx:duration> lub wstawić dodatkowy element <gx:Wait> na końcu playlisty.

Więcej informacji o harmonogramie znajdziesz powyżej w sekcji Oś czasu wycieczki.

Przykład

Fragment kodu poniżej pokazuje zmianę rozmiaru ikony oznaczenia miejsca z skali 1.0 na skalę 10.0. Zmiana zaczyna się przez 6,5 sekundy, podczas której ikona stopniowo rozwija się z początku do rozmiaru końcowego.

Zwróć uwagę na umieszczenie elementu podstawowego <gx:Wait> na końcu wycieczki. Animowane aktualizacje nie same w sobie otwierają wycieczki. Tylko elementy podstawowe wycieczek mogą określać długość wycieczki. Z tego powodu wstawiono 2, 4-sekundowe oczekiwanie. W połączeniu z 4, 1-sekundową FlyTo Oczekiwanie czeka na aktualizację przed zakończeniem wycieczki.

animatedupdate_example.json

<?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>

Dodawanie dźwięku

Pliki dźwiękowe mogą być dołączane do wycieczek i odtwarzane w dowolnym momencie za pomocą elementu <gx:SoundCue>. Podrzędny element <href> określa plik dźwiękowy. Obsługiwane formaty zależą od kodeków zainstalowanych w systemie i obejmują m.in.:

  • MP3
  • AAC

Nie określono czasu trwania.

Pliki dźwiękowe są odtwarzane równolegle do głównej osi czasu, co oznacza, że podczas odtwarzania playlisty następuje przejście do kolejnych podstawowych elementów trasy. Więcej informacji znajdziesz w artykule Oś czasu wycieczki. Pamiętaj, że podobnie jak w przypadku animowanych aktualizacji pliki dźwiękowe nie zawierają otwartych wycieczek. Tylko elementy podstawowe wycieczek określają typ wycieczki. Jeśli wycieczka zakończy się przed zakończeniem pliku audio, przestanie on być odtwarzany.

Odtwarzanie wielu plików dźwiękowych

Wiele plików dźwiękowych można odtwarzać w tym samym czasie – Google Earth połączy wszystkie pliki. Jest to przydatne w sytuacjach, gdy plik z muzyką w tle został załadowany na początku trasy, a lektor staje się dostarczany w konkretnych punktach trasy.

Umożliwienie ukończenia pliku dźwiękowego przed odtworzeniem następnego elementu podstawowego

Jeśli chcesz, aby wycieczka była widoczna podczas odtwarzania pliku dźwiękowego, dodaj element <gx:Wait> zaraz po elemencie podstawowym <gx:SoundCue>. Parametr <gx:Wait> określa czas oczekiwania (w sekundach) przed przejściem do następnego elementu podstawowego.

Plik dźwiękowy nie może być odtwarzany po zakończeniu wycieczki. Można wykorzystać czas oczekiwania, aby przedłużyć żywotność wycieczki wraz z zakończeniem odtwarzania pliku dźwiękowego.

Przykład

Prezentacja poniżej trwa 15 sekund i jest zdefiniowana przez połączone czasy trwania: <gx:FlyTo> i <gx:Wait>. Pierwszy klip dźwiękowy trwa 15 sekund i jest odtwarzany przez cały czas trwania wycieczki. Drugi plik jest wstrzymany na 5 sekundach, miesza się z pierwszym plikiem i odtwarza się przez 10 sekund. Element <gx:Wait> jest potrzebny do przedłużenia trasy wycieczki, dzięki czemu klipy audio będą miały wystarczająco dużo czasu.

soundcue_example.json

<?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>

Przełączanie dymków opisu

Dymek opisu oznaczenia miejsca można otworzyć lub zamknąć podczas wycieczki przy użyciu <gx:balloonVisibility> w animowanej aktualizacji. Zmiany widoczności dymków zostaną wprowadzone na końcu określonego czasu trwania. Nie będą animowane w określonym czasie. Pominięcie wartości <gx:duration> spowoduje przypisanie wartości domyślnej 0.0 (dymek zostanie otwarty lub zamknięty natychmiast).

Przykład

balloonvisability_tourexample.json

<?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>

Uwzględnianie zdjęć historycznych

Jeśli użytkownik włączył w swoim kliencie zdjęcia historyczne, możesz wskazać datę, z której mają być pobierane zdjęcia. Aby określić datę wyświetlenia zdjęcia, umieść element <gx:TimeStamp> w polu AbstractView. Pamiętaj, że parametr <gx:TimeStamp> ma też wpływ na pliki KML w określonym czasie i słońce.

Na wszystkich kolejnych zdjęciach zostanie użyta data określona jako ostatnia.

Przykład

historicalimagery_example.json

<?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>

Znane problemy

Klient Google Earth nie jest obecnie w pełni zgodny z KML. Poniżej wymieniliśmy niektóre znane problemy. Naprawimy je w kolejnych wersjach.

  • Elementy <gx:AnimatedUpdate> i <gx:TourControl> zniekształcą krzywą utworzoną przez serię gładkich elementów FlyTos. Punkty FlyTo znajdujące się po obu stronach tych elementów zostaną połączone ścieżką liniową.
  • Pliki dźwiękowe wczytane z urządzeniem <gx:SoundCue> są nadal odtwarzane podczas wstrzymania aplikacji <gx:TourControl>. Po wznowieniu wycieczki Google Earth przeskoczy do punktu w pliku dźwiękowym, w którym nastąpiło wstrzymanie.
  • Gdy używasz trybów wysokości innych niż bezwzględne, ścieżka między elementami FlyTos może przeskakiwać w górę lub w dół, gdy aparat zbliża się do punktu. Wynika to z wczytywania przez klienta zaktualizowanych danych terenu – gdy kamera zbliża się do punktu, informacje o tym punkcie stają się coraz bardziej szczegółowe. W związku z tym wysokość terenu w punkcie poniżej może zostać zmieniona, co wymaga wprowadzenia poprawek na ścieżce do tego punktu.

    Mechanizm nagrywania w Google Earth określa bezwzględne tryby wysokości dla wszystkich elementów FlyTo. Należy również przekształcić wysokości do wartości bezwzględnych, jeśli te poprawki ścieżki zakłócają wycieczkę.