סיור ב-KML

תוכן העניינים

הקדמה

סיור חדש ב-Google Earth 5.0 מאפשר סיור מבוקר באמצעות נתונים גיאו-מרחביים, כולל:

  • משכי טיסות ספציפיים בין מיקומים
  • טיסה חלקה על פני מיקומים, ללא עצירות
  • הפעלת קובצי שמע בזמנים מוגדרים מראש במהלך הסיור
  • עדכונים זמניים של תכונות KML במסגרת הסיור

לקבלת מידע נוסף על סיורים מנקודת מבט של לקוח Google Earth, יש לעיין במדריך למשתמש של Google Earth.

מרחב השמות של התוסף של Google

רכיבי ה-KML שמגדירים סיורים נכללים בקבוצת תוספים אל תקן OGC KML, עם הקידומת gx. כדי להשתמש בהם צריך לכלול את ה-URI הנכון של מרחב השמות ברכיב הפותח <kml> בקובץ ה-KML:

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

הרכיבים הקשורים לסיורים בקבוצת התוספים של gx כוללים:

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

סיור נתמך ב-Google Earth 5.0, אך ייתכן שאינו נתמך בדפדפנים גיאוגרפיים אחרים. אם הדפדפן לא תומך בתוספים מסוימים, יש להתעלם בשקט מהנתונים שבתוספים האלה ושאר קובץ ה-KML אמור להיטען ללא שגיאות.

טרמינולוגיה

סיור ראשוני: אחד מקבוצה של רכיבים שמגדירים פעולה בסיור. דוגמה ל-Pritomitry היא הרכיב Flato, שמוגדר על ידי הרכיב <gx:FlyTo> והצאצאים שלו.

playlist: מאגר הרשימה של העקרונות הבסיסיים של הסיור שמגדירים סיור. ניתן להציג את הפלייליסט בתצוגה לאורך ציר זמן (למידע נוסף, אפשר לעיין בסיורים בציר הזמן).

מבנה הסיור

סיורים נוצרים על ידי הצבת רכיבים ספציפיים, לפי הסדר, בקובץ KML. קובץ ה-KML יכול לכלול רכיבי KML חוקיים אחרים יחד עם הסיור.

הדוגמה הבאה מציגה סיור מלא ותיקייה שמכילה כמה סמנים. הסיור מתחיל באי הדרומי של ניו זילנד, לפני טיסה צפונית דרך הר טאראנקי, ומדגים גם את השיפור של flyToModes וחלק וגם את השיטה <gx:balloonVisibility> לפתיחת בלון תיאור. רכיבי הסיור מתוארים בפירוט רב יותר בהמשך.

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>

לוחות זמנים לסיורים

הסיורים מורכבים מסדרה של סיורים בסיסיים בסיסיים – FlyTos, Waits, TControlControls, PopUpdates ו-SoundCues. חלק מהפרימטיביים האלה משחקים אחד אחרי השני, וממתינים לציפוי אחד של השנייה לפני שיתחילו אחריו. אחרים פועלים במקביל למערכים אחרים, כך שפעולות מרובות יכולות להתרחש בו-זמנית.

ערכים ראשוניים שמתרחשים בסדרה

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

היסודות האלה מתקיימים אחד אחרי השני, ועליהם להשלים אותם במלואם לפני שהפלייליסט יעבור לרכיב אחר כלשהו, מכל סוג שהוא. כלומר, רק סוג אחד מהסדרה פרימיטיבי (FlyTo, Wait או ToControl) יכול להתבצע בו-זמנית, ולא ניתן להתחיל מופעים נוספים של עוצמת שמע או עדכון מונפש.

תנאים ראשוניים שמתרחשים במקביל

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

הסברים האלו יישמרו כאשר הם יופיעו בפלייליסט. לאחר ההפעלה, הפלייליסט עובר מיד לרכיב ה-primitive הבא, בלי לחכות שה-CeCue או ה-אנימציה יושלמו. פירוש הדבר:

  • כל מספר של אותות צלילים ו/או מונפשים עשוי להתבצע בו-זמנית על ידי סימון שלהם אחד אחרי השני בפלייליסט
  • התראות CV ו/או MusicUpdates יכולות להתרחש במהלך הפעלות של סדרות ראשוניות מסוג סדרות (למרות שלא ניתן להתחיל אותן בזמן שהמאפיינים הבסיסיים של הסדרה פועלים)

התרשים הבא ממחיש זאת. לוחצים על התמונה כדי לקבל תצוגה מפורטת יותר, כולל תוכן ה-KML שמגדיר כל פרימיטיבי בפלייליסט.


 

בתרשים מוצגת השלמת כל פרק זמן של טיסה מסוימת (כפי שצוין ברכיב <gx:duration> שלו). רק לאחר שחלף הזמן, הפריים הראשון יתחיל.

מצד שני, ה-SoundCue מתרחש במקביל. הפריים החדש בציר הזמן מתרחש באופן מיידי, במקביל לתחילת ההפעלה של קובץ האודיו. קובץ הצליל ממשיך עד שנגיע לסוף הקובץ, או עד לסוף הסיור, הראשון מביניהם. אם הסיור מסתיים לפני שקובץ האודיו הסתיים, קובץ הצליל נפסק. אפשר להפעיל כל מספר של קובצי צלילים בכל פעם, כי כל קובץ נטען בציר זמן משלו.

עדכוני אנימציה פועלים באותו אופן. אם הסמל של סמן מוגדר להיות גדול יותר במשך 5 שניות, הדבר נעשה תוך כדי התפתחות הפריים בציר הזמן הראשי.

FlyTo ו-flyToMode

הסיורים עוברים ממיקום למיקום, וכל אחד מהם מצוין באמצעות רכיב <gx:FlyTo>. היא מכילה AbsstructView (<Camera> או <LookAt>) שמגדירה את המיקום, הזווית והגובה של התצוגה ב-Google Earth.

בנוסף, אפשר לציין flyToMode, שמסביר לדפדפן איך לגשת לנקודה. לפני ההשקה של <gx:Tour>, נפתחו 'סיורים' בדפדפן באמצעות מעבר מסמן לסמן. מהירות הטיסה (שהוגדרה על ידי הדפדפן) הייתה איטית ככל שהדפדפן התקרב לסמן, והסתיים במהירות אפס לפני המשך לסמן. עדיין אפשר לציין את ההתנהגות הזו בסיורים באמצעות מאפיין הרכיב <gx:flyToMode>bounce</gx:flyToMode>.

ה-flyToMode החלק מאפשר טיסה חלקה ומבוקרת בחלל. המהירות בין הנקודות נשלטת על ידי הכללת רכיב <gx:duration>, שמגדיר את הזמן שלוקח לדפדפן לעבור מהנקודה הנוכחית לתצוגה המפורטת הבאה. טיסה לא שבורה מורכבת מסדרה של טיסות ישירות עם flyToModes חלק – דפדפן Earth מאט את המהירות ואת הנתיב המעוקל בין נקודות, כך שניתן להגיע לכל סמן בדיוק בזמן שצוין ב-KML. בניגוד ל-עזיבה flyToMode, המהירות אף פעם לא מגיעה לאפס עד שהטיסה נשברת באמצעות אחד מהאירועים הבאים:

  • בסוף הסיור,
  • נקודה עם חזרה עם flyToMode, או
  • רגע.

השהיות, עדכונים מונפשים וצלילי צליל אינם גורמים לכשלים בטיסה.

טיסה אל

הטיסה הראשונה של <gx:FlyTo> שנכללת בפלייליסט מוטסת מהתצפית הנוכחית של הצופה ב-Google Earth. משך הזמן נצפה, כך שהמהירות עד לנקודה הראשונה תשתנה במידה רבה, בהתאם למיקום של הצופה ב-Google Earth כשהסיור יתחיל. מומלץ שה-FtoTo הראשוני הזה יהיה באורך 5 שניות לפחות, ויוגדר כמצב עזיבה כדי ליהנות מחוויית הצפייה הטובה ביותר.

אם הערך של <gx:flyToMode> מוגדר כחלק עבור ה-FtoTos הראשון, ולאחר מכן יש לו ב-FtoTos חלקים נוספים, המיקום הראשוני של הצופה ייחשב כנקודה בעקומה החלקת, והוא ישפיע על עקומת הנתיב בין הנקודה הראשונה לנקודה העוקבת. פירוש הדבר שהסדרה הראשונית של FlyToTos שונה תהיה שונה עבור כל צופה, בהתאם למה שהוא צפה בלקוח Earth כאשר הסיור התחיל. אם יש צורך ב-FlyTo חלק עד לנקודה הראשונה, ניתן להוסיף <gx:Wait> לקוד הסיור לאחר ה-FtoTo הראשון. הפעולה הזו תפריד בין המיקום הראשוני לבין שאר הסיור.

דוגמאות

הדוגמאות הבאות מציגות את ההבדל בין יציאה מדף כניסה לבין flyToModes חלק. כל סיור מבקר באותם סמנים, אבל משתמש ב-flyToModes שונה. כדי להציג את הסיורים ב-Google Earth, לוחצים על הקישורים שמעל לכל קטע קוד ולאחר מכן לוחצים לחיצה כפולה על שם הסיור בחלונית מקומות ב-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... -->

השהיה והשהיה

המתנה מפסיקה את התנועה בחלל בסיור, אבל מאפשרת להמשיך את קובצי הצלילים והאנימציה. משך ההמתנה מצוין בקובץ ה-KML.

השהיה מפסיקה את הסיור במיקום הנוכחי שלו, כאילו המשתמש לחץ על הלחצן השהיה ומשפיע על כל העקרונות הבסיסיים. הסיור יופעל רק כשהמשתמש יבחר בלחצן הפעלה שבפקד הסיור ב-Google Earth.

ממתינים

רכיב זה משפיע רק על המצלמה. היא מציינת את פרק הזמן של הזמן שבו המצלמה פועלת. קובצי אודיו שמופעלים כרגע ו/או עדכוני אנימציה לא מושפעים, וממשיכים בזמן ההמתנה. אפשר להשתמש בהמתנה כדי לתת לקובצי קול או לעדכן עדכונים לזמן הסיום, לפני תחילת ה-FtoTo הבא או לפני שהסיור יסתיים.

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

משך הזמן של ההמתנה מצוין בשניות, באמצעות הרכיב <gx:duration>. לאחר שעבר הזמן, הסיור ממשיך בפעולה הבאה שצוינה בפלייליסט. המתנה של נתיב טיסה חלקה כדי שתנועת המצלמה תאט את מהירות המהירות בכל נקודה שמתרחשת לפני ההמתנה, ללא קשר ל-flyToMode.

השהיות

השהיות המנוהלות על ידי המשתמש מפורטות באמצעות <gx:TourControl> ורכיב הצאצא שלו, <gx:playMode>. המסנן האחרון מוגדר לערך pause (השהיה). הפעלת הפעולה הזו דומה ללחיצה על לחצן ההשהיה ב-Google Earth. הסיור מושהה בשלב זה ונשאר מושהה עד ללחיצה על הלחצן הפעלה. במהלך ההשהיה, המשתמש יכול לנוע בכל מקום בסביבה של כדור הארץ. כאשר לוחצים על הפעלה, הם מוחזרים אל הנקודה שממנה הסיור הושהה.

בהפסקות לא עוברים מעברים בין מסלולי טיסה בצורה חלקה, כך שהמהירות בין נקודות משני צידי ההשהיה מחושבת בדפדפן כאילו ההשהיה לא קיימת.

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

דוגמאות

בהמשך מופיעה דוגמה להמתנה. קובץ צליל נוצר, המכיל 10 שניות של נאום היכרות. המתנה של עשר שניות מוכנסת מיד אחרי סימן הצליל, וכך נמנעת ההפעלה של ה-FToTo הבא עד שהדיבור מסתיים.

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>

הדוגמה הבאה ממחישה את השימוש בהשהיה. הצופה טס למיקום ספציפי ב-Earth ולאחר מכן הסיור מושהה. המשתמש יכול לנוע בסביבה של Earth למשך כל פרק זמן. כשהם מוכנים להמשיך בסיור, הם חייבים לבחור בהפעלה מפקדי הסיור - Google Earth קופץ חזרה למיקום האחרון של הסיור וממשיך לשחק.

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>

עדכונים

ניתן לשנות, לשנות או ליצור תכונות KML בסביבת Earth במהלך סיור, כולל גודל, סגנון ומיקום של הסמנים, הוספת שכבות-על של קרקע, גיאומטריה ועוד. למידע נוסף על עדכון KML, קראו את הקטע עדכונים במדריך למפתחים.

עדכונים לקובץ ה-KML יכולים להתרחש במהלך סיור, והם מופעלים באמצעות הרכיב <gx:AnimatedUpdate>. אופן הפעולה של העדכונים בסיור שונה מעדכון העדכונים ב-NetworkLink בכך:

  • העדכונים ל-KML מתבטלים עם היציאה מהסיור,
  • עדכונים ל-KML לא נכללים במצב הנוכחי.

בנוסף, שינויים שמובילים לאינטרפולציה (כלומר, שמכילים מצבי ביניים, כמו שינויים בגודל) מונפשים במהלך פרק הזמן שצוין. שינויים שלא כוללים שלבי ביניים (כגון בלוני תיאור הפותחים או סוגרים אותם) מתעדכנים רק בסוף משך הזמן שצוין. אם לא הוגדר משך זמן, העדכון יתבצע באופן מיידי (ערך ברירת המחדל של <gx:duration> הוא 0.0).

מלבד ההבדלים שצוינו למעלה, אופן הפעולה של עדכון בתוך רכיב <gx:AnimatedUpdate> זהה לאופן הפעולה של עדכון בתוך <NetworkLinkControl>. ניתן להשתמש בו כדי לשנות את גודל הסמן, המיקום והמראה שלו, להוסיף שכבות-על או מודלים של קרקע, ולהשתמש ברכיב <gx:balloonVisibility> כדי להחליף מצב של בלוני מידע.

<gx:AnimatedUpdate> וציר הזמן של הסיור

עדכוני האנימציה פועלים במקביל לציר הזמן – כלומר, הסיור ממשיך ישירות לסיור הבא שכולל את רשימת ההשמעה בפלייליסט, בזמן שהעדכון המונפש מתרחש. ל-<gx:duration> יש שליטה על משך הזמן שחולף עד שהעדכון יתבצע, אבל לא יעכב את הסיור הבא.

כדי לאפשר עדכון של אנימציה לפני ביצוע הפעולה הבאה, יש להוסיף <gx:Wait>, עם משך זמן זהה למשך העדכון, בין העדכון המונפש לבין הסיור הקודם.

בנוסף, עדכון של אנימציה ייקטע אם משך הזמן שלו יחרוג ממשך רכיב <gx:FlyTo> או <gx:Wait> האחרון. אפשר לשנות את ערכי <gx:duration> המתאימים או להוסיף רכיב <gx:Wait> נוסף בסוף הפלייליסט, כדי לתת לזמן המונפש את עדכון העדכון.

מידע נוסף על ציר הזמן זמין במאמר סיורים בציר הזמן למעלה.

דוגמה

קטע הקוד הבא מציג שינוי בגודל של סמל מסוים של סמן, מסולם של 1.0 לקנה מידה 10.0. השינוי מתבצע במשך יותר מ-6.5 שניות, שבמהלכם הסמל מתרחב בהדרגה מהאות הראשונה ועד לגודלו הסופי.

שימו לב שהכלי <gx:Wait> כלול בדור הישן בסוף הסיור. עדכוני אנימציה כשלעצמם לא מבטיחים סיור - רק סיורים בסיסיים מסוג סיור מגדירים את משך הסיור. לכן נוספה המתנה של 2.4 שניות. בשילוב עם ה-FlyTo באורך 4.1 שניות, ההמתנה ממתינה להשלמת העדכון לפני סיום הסיור.

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

הוספת אודיו

אפשר לכלול קובצי אודיו בסיורים ולהשמיע אותם בכל שלב באמצעות הרכיב <gx:SoundCue>. רכיב צאצא <href> מציין את קובץ הצליל. הפורמטים הנתמכים תלויים ברכיבי ה-Codec שמותקנים במערכת שלכם, והם כוללים, בין השאר:

  • mp3
  • Aac

לא צוין משך זמן.

קובצי השמע מופעלים במקביל לציר הזמן הראשי. כלומר, הפלייליסט עובר אל הסיורים הבאים בזמן שקובץ האודיו מופעל. מידע נוסף זמין במאמר סיורים בצירי זמן. הערה: בדומה לעדכוני אנימציה, קובצי קול לא מחזיקים סיור פתוח - רק תורמי הסיורים מסוג מסוים מגדירים את משך הסיור. אם הסיור מסתיים לפני השלמת קובץ האודיו, קובץ האודיו יפסיק לפעול.

קובצי מוזיקה מרובים מופעלים

ניתן להפעיל קובצי קול רבים בו-זמנית - Google Earth ישלב את הקבצים ביחד. האפשרות הזו שימושית במקרים שבהם נטען קובץ מוזיקה ברקע בתחילת הסיור, והקריינות מסופקות בנקודות ספציפיות במהלך הסיור.

אישור להשלמה של קובץ אודיו לפני ההפעלה של הפרמטר הישן

אם רוצים שהסיור ימתין בזמן הפעלת קובץ צליל, יש לכלול רכיב <gx:Wait> מיד לאחר סביבת <gx:SoundCue> מהדור הקודם. הערך <gx:Wait> מציין את משך הזמן בשניות שהסיור ימתין לפני המשך ההפעלה מהדור הקודם.

קובץ צליל לא יכול להמשיך לפעול לאחר סיום הסיור. אפשר להשתמש בהמתנה כדי להאריך את משך הזמן של הסיור בזמן שקובץ אודיו מסתיים.

דוגמה

הסיור לדוגמה הוא באורך 15 שניות, המוגדר על ידי משך הזמן המשולב של <gx:FlyTo> ושל <gx:Wait>. הקליפ הראשון נמשך עד 15 שניות, והוא מופעל לכל אורך הסיור. הקובץ השני נצמד ל-5 שניות, משולב בקובץ הראשון ומופעל למשך 10 שניות. צריך להגדיר את <gx:Wait> כדי להאריך את משך הזמן להפעלת הקליפים המושמעים.

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>

החלפת בלוני התיאור

ניתן לפתוח או לסגור את בלון התיאור של סמן במהלך סיור באמצעות <gx:balloonVisibility> עם עדכון מונפש. שינויים בהרשאות בבלון יבוצעו בסיום כל משך זמן שצוין - הם לא יונפשו במשך הזמן שצוין. השמטת ערך <gx:duration> תקצה את ערך ברירת המחדל של 0.0 (הבלון ייפתח או ייסגר באופן מיידי).

דוגמה

oonהרשאות_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>

שילוב תמונות היסטוריות

אם המשתמש הפעיל תמונות היסטוריות בלקוח, הסיור יכול לציין את התאריך שממנו יש לשלוף תמונות. כדי לציין את התאריך של התמונה להצגה, יש לכלול רכיב <gx:TimeStamp> ב-AbstractView. יש לשים לב שהפונקציה <gx:TimeStamp> משפיעה גם על KML מבוסס זמן ועל אור שמש.

התאריך האחרון שהגדרת ישמש לכל התמונות.

דוגמה

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

בעיות ידועות

בשלב זה, הלקוח של Google Earth אינו מציית לגמרי ל-KML. ברשימה הבאה מתוארות כמה בעיות מוכרות. ייתכן שהבעיות האלה יתוקנו בגרסאות הבאות.

  • רכיבי <gx:AnimatedUpdate> ו-<gx:TourControl> יגרמו לשבירת העקומה שנוצרה על ידי סדרה של רכיבי ToTos חלקים. הנקודות של טיסה אל שני הצדדים של הרכיבים האלה יחוברו בנתיב לינארי.
  • קובצי אודיו שנטענו עם <gx:SoundCue> ממשיכים לפעול במהלך השהיה ביוזמת <gx:TourControl>. כאשר הסיור ממשיך, Google Earth ידלג בחזרה לנקודה בקובץ הקול שבה מופעלת ההשהיה.
  • כשמשתמשים במצבי גובה שאינם מוחלטים, הנתיב בין ToTos עשוי לקפוץ למעלה או למטה בזמן שהמצלמה מתקרבת לנקודה. המצב הזה נגרם עקב טעינת נתונים מעודכנים של פני השטח לתוך הלקוח – ככל שהמצלמה מתקרבת לנקודה, המידע על הנקודה הזו הופך יותר ויותר מפורט. כתוצאה מכך, גובה הקרקע מתחת לנקודה עשוי להתעדכן, ויש צורך בתיקון בנתיב לנקודה זו.

    לכן, מנגנון ההקלטה ב-Google Earth מציין מצבי גובה מוחלטים עבור כל ה-FtoTos מסיבה זו. כמו כן, כדאי להמיר את הגבהים לערכים מוחלטים אם התיקונים במסלול משפיעים על הסיור.