שכבות KML ו-GeoRSS

בחירת פלטפורמה: Android iOS JavaScript

הפונקציה KmlLayer מבצעת עיבוד (רנדור) של רכיבי KML ו-GeoRSS לשכבת-על של משבצות ב-Maps JavaScript API.

סקירה כללית

Maps JavaScript API תומך בפורמטים של נתוני KML ו-GeoRSS להצגת מידע גיאוגרפי. פורמטים הנתונים האלה מוצגים במפה באמצעות אובייקט KmlLayer, שהמבנה שלו מקבל את כתובת ה-URL של קובץ KML או GeoRSS שגלוי לכולם.

הערה: הכיתה KmlLayer שיוצרת שכבות-על של KML בממשק API של JavaScript במפות Google משתמשת בשירות שמתארח ב-Google כדי לאחזר ולנתח קובצי KML לצורך רינדור. לכן, אפשר להציג קבצי KML רק אם הם מתארחים בכתובת URL שנגישה לכולם ולא נדרשת אימות כדי לגשת אליה.

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

ממשק ה-API של JavaScript במפות Google ממיר את נתוני ה-XML הגיאוגרפיים שסופקו לייצוג KML, שמוצג במפה באמצעות שכבת-על של משבצות של ממשק ה-API של JavaScript במפות Google. קובץ ה-KML הזה נראה (ומתנהג במידה מסוימת) כמו רכיבי שכבת-על מוכרים של Maps JavaScript API. רכיבי KML‏ <Placemark> ו-GeoRSS‏ point מוצגים בתור סמנים. לדוגמה, רכיבי <LineString> מוצגים בתור קווים פוליגוניים ורכיבי <Polygon> מוצגים בתור פוליגונים. באופן דומה, רכיבי <GroundOverlay> מוצגים במפה כתמונות מלבניות. עם זאת, חשוב לדעת שהאובייקטים האלה לא הם Markers,‏ Polylines,‏ Polygons או GroundOverlays של Maps JavaScript API. במקום זאת, הם מוצגים כאובייקט יחיד במפה.

אובייקטים מסוג KmlLayer מופיעים במפה אחרי שהנכס map שלהם מוגדר. כדי להסיר אותם מהמפה, צריך להפעיל את הפונקציה setMap() ולהעביר את הערך null. האובייקט KmlLayer מנהל את הרינדור של אלמנטי הצאצאים האלה על ידי אחזור אוטומטי של תכונות מתאימות לגבולות המפה. כשהגבולות משתנים, התכונות באזור התצוגה הנוכחי מוצגות באופן אוטומטי.

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

אפשרויות שכבה ב-KML

ה-constructor של KmlLayer() מעביר מספר KmlLayerOptions (אופציונלי):

  • map מציין את ה-Map שבו KmlLayer יומר. כדי להסתיר KmlLayer, מגדירים את הערך הזה ל-null בשיטה setMap().
  • preserveViewport מציין שאסור לשנות את המפה בהתאם לגבולות התוכן של KmlLayer כשמציגים את השכבה. כברירת מחדל, כשמציגים KmlLayer, המפה מתקרבת וממוקמת כך שתוכלו לראות את כל התוכן של השכבה.
  • הערך suppressInfoWindows מציין שתכונות שניתן ללחוץ עליהן ב-KmlLayer לא אמורות להפעיל את הצגת האובייקטים מסוג InfoWindow.

בנוסף, אחרי שה-KmlLayer עבר עיבוד, הוא מכיל מאפיין metadata לא ניתן לשינוי שמכיל את השם, התיאור, קטע הטקסט והמחבר של השכבה בתוך ליטרל אובייקט KmlLayerMetadata. אפשר לבדוק את המידע הזה באמצעות השיטה getMetadata(). מאחר שהעיבוד של אובייקטים מסוג KmlLayer מחייב תקשורת אסינכררונית לשרת חיצוני, מומלץ להאזין לאירוע metadata_changed, שיציין שהנכס מאוכלס.

בדוגמה הבאה נוצר KmlLayer מהפיד הנתון של GeoRSS:

TypeScript

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 4,
      center: { lat: 49.496675, lng: -102.65625 },
    }
  );

  const georssLayer = new google.maps.KmlLayer({
    url:
      "http://api.flickr.com/services/feeds/geo/?g=322338@N20&lang=en-us&format=feed-georss",
  });
  georssLayer.setMap(map);
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 4,
    center: { lat: 49.496675, lng: -102.65625 },
  });
  const georssLayer = new google.maps.KmlLayer({
    url: "http://api.flickr.com/services/feeds/geo/?g=322338@N20&lang=en-us&format=feed-georss",
  });

  georssLayer.setMap(map);
}

window.initMap = initMap;

CSS

/* 
 * Always set the map height explicitly to define the size of the div element
 * that contains the map. 
 */
#map {
  height: 100%;
}

/* 
 * Optional: Makes the sample page fill the window. 
 */
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

HTML

<html>
  <head>
    <title>GeoRSS Layers</title>

    <link rel="stylesheet" type="text/css" href="./style.css" />
    <script type="module" src="./index.js"></script>
  </head>
  <body>
    <div id="map"></div>

    <!-- 
      The `defer` attribute causes the script to execute after the full HTML
      document has been parsed. For non-blocking uses, avoiding race conditions,
      and consistent behavior across browsers, consider loading using Promises. See
      https://developers.google.com/maps/documentation/javascript/load-maps-js-api
      for more information.
      -->
    <script
      src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=weekly"
      defer
    ></script>
  </body>
</html>

ניסיון של דוגמה

בדוגמה הבאה נוצר KmlLayer מהפיד הנתון של KML:

TypeScript

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 11,
      center: { lat: 41.876, lng: -87.624 },
    }
  );

  const ctaLayer = new google.maps.KmlLayer({
    url: "https://googlearchive.github.io/js-v2-samples/ggeoxml/cta.kml",
    map: map,
  });
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 11,
    center: { lat: 41.876, lng: -87.624 },
  });
  const ctaLayer = new google.maps.KmlLayer({
    url: "https://googlearchive.github.io/js-v2-samples/ggeoxml/cta.kml",
    map: map,
  });
}

window.initMap = initMap;

CSS

/* 
 * Always set the map height explicitly to define the size of the div element
 * that contains the map. 
 */
#map {
  height: 100%;
}

/* 
 * Optional: Makes the sample page fill the window. 
 */
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

HTML

<html>
  <head>
    <title>KML Layers</title>

    <link rel="stylesheet" type="text/css" href="./style.css" />
    <script type="module" src="./index.js"></script>
  </head>
  <body>
    <div id="map"></div>

    <!-- 
      The `defer` attribute causes the script to execute after the full HTML
      document has been parsed. For non-blocking uses, avoiding race conditions,
      and consistent behavior across browsers, consider loading using Promises. See
      https://developers.google.com/maps/documentation/javascript/load-maps-js-api
      for more information.
      -->
    <script
      src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=weekly"
      defer
    ></script>
  </body>
</html>

ניסיון של דוגמה

פרטי התכונות של KML

מאחר שקובץ KML עשוי לכלול מספר רב של תכונות, יכול להיות שלא תוכלו לגשת ישירות לנתוני התכונות מהאובייקט KmlLayer. במקום זאת, כשהתכונות מוצגות, הן מוצגות כשכבות-על של Maps JavaScript API שניתן ללחוץ עליהן. לחיצה על תכונות ספציפיות תציג כברירת מחדל InfoWindow שמכיל את קובץ ה-KML <title> ואת המידע <description> של התכונה הנתונה. בנוסף, לחיצה על תכונה של KML יוצרת אירוע KmlMouseEvent, שמעביר את המידע הבא:

  • position מציין את קואורדינטות קו הרוחב/האורך שבהן צריך לאבטח את InfoWindow של תכונת ה-KML הזו. המיקום הזה הוא בדרך כלל המיקום שבו לחצתם על פוליגונים, קווים פוליגונליים ושכבות-על של קרקע, אבל המקור האמיתי של סמנים.
  • הערך pixelOffset מציין את ההיסט מ-position שלמעלה כדי לאתחל את "הזנב" של InfoWindow. באובייקטים פוליגונליים, ההיסט הזה הוא בדרך כלל 0,0, אבל בסימנים הוא כולל את הגובה של הסמן.
  • השדה featureData מכיל מבנה JSON של KmlFeatureData.

אובייקט KmlFeatureData לדוגמה מוצג בהמשך:

{
  author: {
    email: "nobody@google.com",
    name: "Mr Nobody",
    uri: "http://example.com"
  },
  description: "description",
  id: "id",
  infoWindowHtml: "html",
  name: "name",
  snippet: "snippet"
}

בדוגמה הבאה מוצג טקסט של תכונה <Description> ב-KML בצד <div> כשלוחצים על התכונה:

TypeScript

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 12,
      center: { lat: 37.06, lng: -95.68 },
    }
  );

  const kmlLayer = new google.maps.KmlLayer({
    url: "https://raw.githubusercontent.com/googlearchive/kml-samples/gh-pages/kml/Placemark/placemark.kml",
    suppressInfoWindows: true,
    map: map,
  });

  kmlLayer.addListener("click", (kmlEvent) => {
    const text = kmlEvent.featureData.description;

    showInContentWindow(text);
  });

  function showInContentWindow(text: string) {
    const sidebar = document.getElementById("sidebar") as HTMLElement;

    sidebar.innerHTML = text;
  }
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 12,
    center: { lat: 37.06, lng: -95.68 },
  });
  const kmlLayer = new google.maps.KmlLayer({
    url: "https://raw.githubusercontent.com/googlearchive/kml-samples/gh-pages/kml/Placemark/placemark.kml",
    suppressInfoWindows: true,
    map: map,
  });

  kmlLayer.addListener("click", (kmlEvent) => {
    const text = kmlEvent.featureData.description;

    showInContentWindow(text);
  });

  function showInContentWindow(text) {
    const sidebar = document.getElementById("sidebar");

    sidebar.innerHTML = text;
  }
}

window.initMap = initMap;

CSS

/* Optional: Makes the sample page fill the window. */
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

#container {
  height: 100%;
  display: flex;
}

#sidebar {
  flex-basis: 15rem;
  flex-grow: 1;
  padding: 1rem;
  max-width: 30rem;
  height: 100%;
  box-sizing: border-box;
  overflow: auto;
}

#map {
  flex-basis: 0;
  flex-grow: 4;
  height: 100%;
}

HTML

<html>
  <head>
    <title>KML Feature Details</title>

    <link rel="stylesheet" type="text/css" href="./style.css" />
    <script type="module" src="./index.js"></script>
  </head>
  <body>
    <div id="container">
      <div id="map"></div>
      <div id="sidebar"></div>
    </div>

    <!-- 
      The `defer` attribute causes the script to execute after the full HTML
      document has been parsed. For non-blocking uses, avoiding race conditions,
      and consistent behavior across browsers, consider loading using Promises. See
      https://developers.google.com/maps/documentation/javascript/load-maps-js-api
      for more information.
      -->
    <script
      src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=weekly"
      defer
    ></script>
  </body>
</html>

ניסיון של דוגמה

הגבלות על גודל ומורכבות של עיבוד KML

ל-Maps JavaScript API יש מגבלות על הגודל והמורכבות של קובצי KML טעונים. בהמשך מופיע סיכום של המגבלות הנוכחיות.

הערה: המגבלות האלה עשויות להשתנות בכל שלב.

גודל הקובץ המרבי שאותו ניתן לטעון (KML גולמי, GeoRSS גולמי או KMZ דחוס)
3MB
הגודל המרבי של קובץ KML לא דחוס
10MB
הגודל המקסימלי של קובץ תמונה ללא דחיסה בקובצי KMZ
‎500KB לכל קובץ
מספר הקישורים המקסימלי לרשת
10
המספר המרבי של פריטים במסמך
1,000
מספר השכבות ב-KML
יש הגבלה על מספר שכבות ה-KML שאפשר להציג במפה אחת של Google. אם תחרגו מהמגבלה הזו, אף שכבת-על לא תופיע במפה ותופיע הודעה על שגיאה במסוף JavaScript של דפדפן האינטרנט. המגבלה מבוססת על שילוב של מספר הכיתות מסוג KmlLayer שנוצרו והאורך הכולל של כל כתובות ה-URL ששימשו ליצירת השכבות האלה. כל KmlLayer חדש שתיצרו יתפוס חלק מהמגבלה של השכבה וחלק נוסף מהמגבלה, בהתאם לאורך כתובת ה-URL שממנה קובץ ה-KML נטען. לכן, מספר השכבות שאפשר להוסיף משתנה בהתאם לאפליקציה. בממוצע, אפשר לטעון בין 10 ל-20 שכבות בלי להגיע למגבלה. אם עדיין תגיעו למגבלה, תוכלו להשתמש בשירות לקצר כתובות URL כדי לקצר את כתובות ה-KML. לחלופין, תוכלו ליצור קובץ KML אחד שמכיל NetworkLinks לכתובות ה-KML הנפרדות.

שיקולים לגבי ביצועים ושמירה במטמון

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

כדי לשפר את הביצועים, מומלץ:

  • משתמשים בתג <expires> מתאים ב-KML.

    KmlLayer לא ישתמש בכותרות HTTP כדי להחליט איך לשמור קובצי KML במטמון.
  • לא ליצור קבצים באופן דינמי בזמן שליחת הבקשה.

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

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

    הוא יכול גם לגרום לכך שהמטמון יציג למשתמשים נתונים לא עדכניים, אם השעון של משתמש כלשהו שגוי והתג <expires> לא הוגדר בצורה נכונה.

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

    אם הגודל הכולל של כל הקבצים הוא יותר מ-1MB (לא דחוסים), המגבלה משתנה לפעולה אחת בכל 5 דקות.
  • כשמשתמשים בשרת נתונים גיאו-מרחביים, כדאי להימנע משימוש בפרמטרים של שאילתות כדי להגביל את אזור התצוגה של השכבות.

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

    אם יש כמות גדולה של נתונים בשרת הנתונים הגיאו-מרחביים, מומלץ להשתמש בשכבות נתונים במקום זאת.
  • כשמשתמשים בשרת נתונים גיאו-מרחביים, צריך להשתמש בכמה KmlLayers לכל קבוצה של תכונות שרוצים לאפשר למשתמשים להפעיל או להשבית, במקום ב-KmlLayer יחיד עם פרמטרים שונים של שאילתות.
  • שימוש בקובצי KMZ דחוסים כדי להקטין את גודל הקובץ.
  • אם אתם משתמשים ב-Google Cloud Storage או בפתרון אחר לאחסון בענן, הימנעו משימוש בתכונות כמו כתובות URL חתומות או אסימונים זמניים כדי לאכוף אמצעי בקרת גישה. הן עלולות למנוע בטעות את האחסון במטמון.
  • מפחיתים את הדיוק של כל הנקודות לרמת דיוק מתאימה.
  • למזג ולפשט את הגיאומטריה של ישויות דומות, כמו פוליגונים וקווים פוליגוניים.
  • מסירים רכיבים או משאבי תמונות שלא בשימוש.
  • מסירים רכיבים לא נתמכים.

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

רכיבי KML נתמכים

ב-Maps JavaScript API יש תמיכה ברכיבי ה-KML הבאים. המנתח של KML מתעלם בדרך כלל מתגי XML שהוא לא מבין, ואינו מציג על כך הודעה.

  • סמנים
  • סמלים
  • תיקיות
  • HTML תיאורי – החלפת ישות באמצעות <BalloonStyle> ו-<text>
  • KMZ (compressed KML, כולל תמונות מצורפות)
  • קווים שבורים ומצולעים
  • סגנונות עבור קווים שבורים ומצולעים, כולל צבע, מילוי ושקיפות
  • קישורי רשת לייבוא נתונים באופן דינמי
  • שכבות על של קרקע ושכבות על להצגה על המסך

בטבלה הבאה מפורטים פרטים מלאים על רכיבי ה-KML הנתמכים.

רכיב KML האם האפשרות הזו נתמכת ב-API? תגובה
<address> לא
<AddressDetails> לא
<Alias> לא רלוונטי אין תמיכה ב-<Model>
<altitude> לא
<altitudeMode> לא
<atom:author> כן
<atom:link> כן
<atom:name> כן
<BalloonStyle> באופן חלקי יש תמיכה רק ב-<text>
<begin> לא רלוונטי אין תמיכה ב-<TimeSpan>
<bgColor> לא
<bottomFov> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<Camera> לא
<Change> באופן חלקי יש תמיכה רק בשינויי סגנון
<color> באופן חלקי כולל #AABBGGRR ו-#BBGGRR. לא נתמך ב-<IconStyle>,‏ <ScreenOverlay> ו-<GroundOverlay>
<colorMode> לא
<cookie> לא
<coordinates> כן
<Create> לא
<Data> כן
<Delete> לא
<description> כן מותר להשתמש בתוכן HTML, אבל הוא עובר ניטרול כדי להגן מפני התקפות בדפדפנים שונים. אין תמיכה בהחלפות ישויות מהצורה $[dataName].
<displayMode> לא
<displayName> לא
<Document> באופן חלקי תמיכה משתמעת בצאצאים, ללא השפעה כצאצא של תכונות אחרות
<drawOrder> לא
<east> כן
<end> לא רלוונטי אין תמיכה ב-<TimeSpan>
<expires> כן פרטים נוספים מופיעים בקטע 'סיכום'
<ExtendedData> באופן חלקי <Data> ללא סוג בלבד, ללא <SimpleData> או <Schema>, ואי אפשר להחליף ישויות בטופס $[dataName].
<extrude> לא
<fill> כן
<flyToView> לא
<Folder> כן
<geomColor> לא הוצא משימוש
<GeometryCollection> לא הוצא משימוש
<geomScale> לא הוצא משימוש
<gridOrigin> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<GroundOverlay> כן לא ניתן לסובב אותם
<h> כן הוצא משימוש
<heading> כן
רמז כן target=... נתמכים
<hotSpot> כן
<href> כן
<httpQuery> לא
<Icon> כן לא ניתן לסובב אותם
<IconStyle> כן
<ImagePyramid> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<innerBoundaryIs> כן באופן משתמע מהסדר של <LinearRing>
<ItemIcon> לא רלוונטי אין תמיכה ב-<ListStyle>
<key> לא רלוונטי אין תמיכה ב-<StyleMap>
<kml> כן
<labelColor> לא הוצא משימוש
<LabelStyle> לא
<latitude> כן
<LatLonAltBox> כן
<LatLonBox> כן
<leftFov> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<LinearRing> כן
<LineString> כן
<LineStyle> כן
<Link> כן
<linkDescription> לא
<linkName> לא
<linkSnippet> לא
<listItemType> לא רלוונטי אין תמיכה ב-<ListStyle>
<ListStyle> לא
<Location> לא רלוונטי אין תמיכה ב-<Model>
<Lod> כן
<longitude> כן
<LookAt> לא
<maxAltitude> כן
<maxFadeExtent> כן
<maxHeight> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<maxLodPixels> כן
<maxSessionLength> לא
<maxWidth> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<message> לא
<Metadata> לא הוצא משימוש
<minAltitude> כן
<minFadeExtent> כן
<minLodPixels> כן
<minRefreshPeriod> לא <NetworkLink>
<Model> לא
<MultiGeometry> באופן חלקי מוצגות כתכונות נפרדות בחלונית הימנית
<name> כן
<near> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<NetworkLink> כן  
<NetworkLinkControl> באופן חלקי יש תמיכה חלקית ב-<Update> וב-<expires>. ה-API מתעלם מהגדרות התפוגה בכותרות ה-HTTP, אבל משתמש בהגדרות התפוגה שצוינו ב-KML. אם לא מוגדרות הגדרות תפוגה, או במהלך טווח התוקף, ייתכן שמפות Google יאחסנו במטמון נתונים שאוחזרו מהאינטרנט למשך פרקי זמן לא ידועים. כדי לאלץ אחזור מחדש של הנתונים מהאינטרנט, אפשר לשנות את שם המסמך ולאחזר אותו בכתובת URL אחרת, או לוודא שהמסמך מכיל הגדרות תפוגה מתאימות.
<north> כן
<open> כן
<Orientation> לא רלוונטי אין תמיכה ב-<Model>
<outerBoundaryIs> כן באופן משתמע מהסדר של <LinearRing>
<outline> כן
<overlayXY> לא
<Pair> לא רלוונטי אין תמיכה ב-<StyleMap>
<phoneNumber> לא
<PhotoOverlay> לא
<Placemark> כן
<Point> כן
<Polygon> כן
<PolyStyle> כן
<range> כן
<refreshInterval> באופן חלקי רק ב-<Link>, לא ב-<Icon>
<refreshMode> כן כותרות HTTP לא נתמכות במצב 'onExpire'. ראו את ההערות לגבי <Update> ו-<expires> למעלה.
<refreshVisibility> לא
<Region> כן
<ResourceMap> לא רלוונטי אין תמיכה ב-<Model>
<rightFov> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<roll> לא רלוונטי אין תמיכה ב-<Camera> וב-<Model>
<rotation> לא
<rotationXY> לא
<Scale> לא רלוונטי אין תמיכה ב-<Model>
<scale> לא
<Schema> לא
<SchemaData> לא
<ScreenOverlay> כן לא ניתן לסובב אותם
<screenXY> לא
<shape> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<SimpleData> לא רלוונטי אין תמיכה ב-<SchemaData>
<SimpleField> לא רלוונטי אין תמיכה ב-<Schema>
<size> כן
<Snippet> כן
<south> כן
<state> לא רלוונטי אין תמיכה ב-<ListStyle>
<Style> כן
<StyleMap> לא אין תמיכה באפקטים של גלילה מעל (הדגשה)
<styleUrl> לא רלוונטי אין תמיכה ב-<StyleMap>
<targetHref> באופן חלקי נתמכת ב-<Update>, לא ב-<Alias>
<tessellate> לא
<text> כן אין תמיכה בהחלפת $[geDirections]
<textColor> לא
<tileSize> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<tilt> לא
<TimeSpan> לא
<TimeStamp> לא
<topFov> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<Update> באופן חלקי רק שינויים בסגנון, לא <Create> או <Delete>
<Url> כן הוצא משימוש
<value> כן
<viewBoundScale> לא
<viewFormat> לא
<viewRefreshMode> באופן חלקי יש תמיכה ב-'onStop'
<viewRefreshTime> כן
<ViewVolume> לא רלוונטי אין תמיכה ב-<PhotoOverlay>
<visibility> באופן חלקי כן ב-<Folder> – סימני המקום הצאצאים יורשים את החשיפה שלהם
<w> כן הוצא משימוש
<west> כן
<when> לא רלוונטי אין תמיכה ב-<TimeStamp>
<width> כן
<x> כן הוצא משימוש
<y> כן הוצא משימוש