เลเยอร์ KML และ GeoRSS

เลือกแพลตฟอร์ม: Android iOS JavaScript

KmlLayer แสดงผลองค์ประกอบ KML และ GeoRSS เป็นการวางซ้อนชิ้นส่วน Maps JavaScript API

ภาพรวม

Maps JavaScript API รองรับรูปแบบข้อมูล KML และ GeoRSS สำหรับการแสดงข้อมูลทางภูมิศาสตร์ รูปแบบข้อมูลเหล่านี้จะแสดงบนแผนที่โดยใช้ออบเจ็กต์ KmlLayer ซึ่งตัวสร้างใช้ URL ของไฟล์ KML หรือ GeoRSS ที่เข้าถึงได้แบบสาธารณะ

หมายเหตุ: คลาส KmlLayer ที่สร้างการวางซ้อน KML ใน Maps JavaScript API จะใช้บริการที่ Google โฮสต์เพื่อดึงและแยกวิเคราะห์ไฟล์ KML เพื่อแสดงผล ดังนั้น คุณจะสามารถแสดงไฟล์ KML ได้ก็ต่อเมื่อโฮสต์ไว้ที่ URL ที่เข้าถึงได้แบบสาธารณะซึ่งไม่ต้องมีการตรวจสอบสิทธิ์ในการเข้าถึง

หากคุณต้องการเข้าถึงไฟล์ส่วนตัว การควบคุมแคชแบบละเอียด หรือส่งวิวพอร์ตของเบราว์เซอร์ไปยังเซิร์ฟเวอร์ข้อมูลภูมิสารสนเทศเป็นพารามิเตอร์การค้นหา เราขอแนะนําให้ใช้ชั้นข้อมูลแทน KmlLayer การดำเนินการนี้จะสั่งให้เบราว์เซอร์ของผู้ใช้ขอทรัพยากรจากเว็บเซิร์ฟเวอร์ของคุณโดยตรง

Maps JavaScript API จะแปลงข้อมูล XML ทางภูมิศาสตร์ที่ให้ไว้เป็นการแทนค่า KML ซึ่งแสดงบนแผนที่โดยใช้การวางซ้อนชิ้นส่วน Maps JavaScript API KML นี้มีลักษณะ (และพฤติกรรมบางอย่าง) เหมือนองค์ประกอบการวางซ้อน Maps JavaScript API ที่คุ้นเคย องค์ประกอบ KML <Placemark> และ GeoRSS point จะแสดงผลเป็นเครื่องหมาย เช่น องค์ประกอบ <LineString> จะแสดงผลเป็นโพลีไลน์ ส่วนองค์ประกอบ <Polygon> จะแสดงผลเป็นรูปหลายเหลี่ยม ในทำนองเดียวกัน องค์ประกอบ <GroundOverlay> จะแสดงผลเป็นรูปภาพสี่เหลี่ยมผืนผ้าบนแผนที่ แต่ที่สำคัญ วัตถุเหล่านี้ไม่ใช่ Maps JavaScript API Markers, Polylines, Polygons หรือ GroundOverlays แต่จะแสดงผลเป็นวัตถุเดี่ยวในแผนที่

วัตถุ KmlLayer รายการปรากฏในแผนที่เมื่อตั้งค่าพร็อพเพอร์ตี้ map แล้ว คุณนำบุคคลดังกล่าวออกจากแผนที่ได้โดยโทรไปที่ setMap() ผ่าน null ออบเจ็กต์ KmlLayer จะจัดการการแสดงผลขององค์ประกอบย่อยเหล่านี้ด้วยการดึงข้อมูลฟีเจอร์ที่เหมาะสมสำหรับขอบเขตที่ระบุของแผนที่โดยอัตโนมัติ เมื่อขอบเขตเปลี่ยนไป ฟีเจอร์ในวิวพอร์ตปัจจุบันจะแสดงผลโดยอัตโนมัติ

เนื่องจากคอมโพเนนต์ใน KmlLayer จะแสดงผลแบบออนดีมานด์ เลเยอร์จึงช่วยให้คุณจัดการการแสดงผลของเครื่องหมาย เส้นประกอบ และรูปหลายเหลี่ยมนับพันได้โดยง่าย โปรดทราบว่าคุณเข้าถึงออบเจ็กต์ส่วนประกอบเหล่านี้โดยตรงไม่ได้ แม้ว่าออบเจ็กต์แต่ละรายการจะมีเหตุการณ์การคลิกซึ่งแสดงผลข้อมูลบนออบเจ็กต์แต่ละรายการก็ตาม

ตัวเลือกเลเยอร์ KML

ตัวสร้าง 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>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>

    <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 callback 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>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>

    <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 callback 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 นี้ โดยทั่วไป ตำแหน่งนี้จะเป็นตำแหน่งที่ผู้ใช้คลิกสำหรับรูปหลายเหลี่ยม เส้นประกอบ และ GroundOverlays แต่เป็นที่มาที่แท้จริงของเครื่องหมาย
  • 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"
}

ตัวอย่างต่อไปนี้แสดงข้อความของฟีเจอร์ KML <Description> ภายในด้าน <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>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>

    <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 callback 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
500 KB ต่อไฟล์
จำนวนลิงก์เครือข่ายสูงสุด
10 คน
จำนวนสูงสุดของจุดสนใจทั้งหมดที่มีอยู่ในทั้งเอกสาร
1,000 คน
จำนวนเลเยอร์ KML
เราจำกัดจำนวนเลเยอร์ KML ที่แสดงใน Google Maps เดียว หากเกินขีดจำกัดนี้ เลเยอร์ของคุณจะไม่ปรากฏบนแผนที่ และจะมีการรายงานข้อผิดพลาดในคอนโซล JavaScript ของเว็บเบราว์เซอร์ จำนวนสูงสุดนี้ขึ้นอยู่กับจำนวนคลาส KmlLayer ที่สร้างขึ้น และความยาวรวมของ URL ทั้งหมดที่ใช้ในการสร้างเลเยอร์เหล่านั้น KmlLayer ใหม่แต่ละรายการที่คุณสร้างจะใช้พื้นที่ส่วนหนึ่งในขีดจำกัดเลเยอร์ และอีกส่วนหนึ่งเพิ่มเติมของขีดจำกัด ทั้งนี้ขึ้นอยู่กับความยาวของ URL ที่โหลดไฟล์ KML มา ดังนั้น จำนวนเลเยอร์ที่คุณเพิ่มได้จะแตกต่างกันไปตามแอปพลิเคชัน โดยเฉลี่ยแล้วคุณควรโหลดได้ระหว่าง 10 ถึง 20 เลเยอร์โดยไม่เกินขีดจำกัด หากยังถึงขีดจำกัดอยู่ ให้ใช้เครื่องมือย่อ URL เพื่อตัด URL ของ KML ให้สั้นลง หรือสร้างไฟล์ KML เดียวที่ประกอบด้วย NetworkLinks ให้กับ URL ของ KML แต่ละรายการ

ข้อควรพิจารณาด้านประสิทธิภาพและการแคช

เซิร์ฟเวอร์ของ Google จะแคชไฟล์ KML ไว้ชั่วคราวเพื่อลดภาระงานของเซิร์ฟเวอร์ การทำเช่นนี้ยังช่วยปรับปรุงประสิทธิภาพสำหรับผู้ใช้ด้วยการแสดง การแสดงส่วนที่เหมาะสมของไฟล์ KML อย่างมีประสิทธิภาพขณะที่ผู้ใช้คลิก เลื่อน และซูมแผนที่

เพื่อประสิทธิภาพที่ดีที่สุด เราขอแนะนำให้คุณดำเนินการดังนี้

  • ใช้แท็ก <expires> ที่เหมาะสมใน KML

    KmlLayer จะไม่ใช้ส่วนหัว HTTP เมื่อเลือกวิธีแคชไฟล์ KML
  • อย่าสร้างไฟล์แบบไดนามิกในเวลาที่ขอ

    แต่ให้สร้างไฟล์ก่อนที่จะจำเป็นต้องใช้ และแสดงไฟล์แบบคงที่แทน หากเซิร์ฟเวอร์ของคุณใช้เวลาในการส่งไฟล์ KML นาน KmlLayer อาจไม่แสดง
  • อย่าพยายามข้ามแคชเว้นแต่คุณจะทราบแน่ชัดว่าไฟล์ได้รับการอัปเดตแล้ว

    การข้ามแคชทุกครั้ง (เช่น การใส่ตัวเลขสุ่มหรือเวลานาฬิกาของผู้ใช้เป็นพารามิเตอร์การค้นหา) อาจทำให้เซิร์ฟเวอร์ของคุณทำงานหนักเกินไปได้ง่ายๆ หากเว็บไซต์ได้รับความนิยมอย่างกะทันหัน และคุณกำลังแสดงไฟล์ KML ขนาดใหญ่

    และอาจทำให้แคชแสดงข้อมูลที่ไม่มีอัปเดตแก่ผู้ใช้ หากนาฬิกาของผู้ใช้ไม่ถูกต้อง และแท็ก <expires> ไม่ได้ตั้งค่าอย่างถูกต้อง

    แต่ให้เผยแพร่ไฟล์แบบคงที่ที่อัปเดตแล้วด้วยหมายเลขการแก้ไขใหม่ที่ไม่ต่อเนื่อง และใช้รหัสฝั่งเซิร์ฟเวอร์เพื่ออัปเดต URL ที่ส่งไปยัง KmlLayer แบบไดนามิกด้วยเวอร์ชันปัจจุบัน
  • จำกัดการเปลี่ยนแปลงไฟล์ KML ไว้ที่ 1 ครั้งต่อนาที

    หากไฟล์ทั้งหมดมีขนาดรวมแล้วมากกว่า 1 MB (ไม่บีบอัด) โปรดจำกัดการเปลี่ยนแปลงไว้ที่ 1 ครั้งต่อ 5 นาที
  • เมื่อใช้เซิร์ฟเวอร์ข้อมูลภูมิสารสนเทศ ให้หลีกเลี่ยงการใช้พารามิเตอร์การค้นหาเพื่อจำกัดวิวพอร์ตของเลเยอร์

    แต่คุณสามารถจำกัดวิวพอร์ตของแผนที่ด้วยเหตุการณ์ bounds_changed แทนได้ ผู้ใช้จะได้รับเฉพาะฟีเจอร์ที่แสดงได้โดยอัตโนมัติเท่านั้น

    หากเซิร์ฟเวอร์ข้อมูลภูมิสารสนเทศมีข้อมูลจำนวนมาก ให้ลองใช้ชั้นข้อมูลแทน
  • เมื่อใช้เซิร์ฟเวอร์ข้อมูลเชิงพื้นที่ ให้ใช้ KmlLayer หลายรายการสำหรับกลุ่มฟีเจอร์แต่ละกลุ่มที่ต้องการอนุญาตให้ผู้ใช้สลับโหมดได้ แทนที่จะใช้ KmlLayer รายการเดียวที่มีพารามิเตอร์การค้นหาต่างกัน
  • ใช้ไฟล์ KMZ ที่บีบอัดเพื่อลดขนาดไฟล์
  • หากคุณใช้ Google Cloud Storage หรือโซลูชันพื้นที่เก็บข้อมูลระบบคลาวด์อื่น ให้หลีกเลี่ยงการใช้ฟีเจอร์ต่างๆ เช่น URL ที่ลงนามหรือโทเค็นชั่วคราวเพื่อบังคับใช้การควบคุมการเข้าถึง ซึ่งอาจป้องกันการแคชโดยไม่ได้ตั้งใจ
  • ลดความแม่นยำของจุดทั้งหมดให้เป็นความแม่นยำที่เหมาะสม
  • ผสานและทำให้เรขาคณิตของฟีเจอร์ที่คล้ายกันง่ายขึ้น เช่น รูปหลายเหลี่ยมและโพลีไลน์
  • นำองค์ประกอบหรือทรัพยากรรูปภาพที่ไม่ได้ใช้ออก
  • นำองค์ประกอบที่ไม่รองรับออก

หากคุณต้องการเข้าถึงข้อมูลส่วนตัว ป้องกันการแคช หรือส่งวิวพอร์ตของเบราว์เซอร์ไปยังเซิร์ฟเวอร์ข้อมูลภูมิสารสนเทศเป็นพารามิเตอร์การค้นหา เราขอแนะนำให้ใช้ชั้นข้อมูลแทน KmlLayer การดำเนินการนี้จะสั่งให้เบราว์เซอร์ของผู้ใช้ขอทรัพยากรจากเว็บเซิร์ฟเวอร์ของคุณโดยตรง

องค์ประกอบ KML ที่รองรับ

Maps JavaScript API รองรับองค์ประกอบ KML ต่อไปนี้ ปกติแล้ว โปรแกรมแยกวิเคราะห์ KML จะละเลยแท็กที่โปรแกรมไม่เข้าใจโดยไม่มีผลอะไร

  • หมุด
  • ไอคอน
  • โฟลเดอร์
  • HTML ที่สื่อความหมาย—การแทนที่เอนทิตีผ่าน <BalloonStyle> และ <text>
  • KMZ (KML ที่มีการบีบอัด รวมถึงรูปภาพที่แนบมา)
  • โพลีไลน์และรูปหลายเหลี่ยม
  • ลักษณะของโพลีไลน์และรูปหลายเหลี่ยม รวมถึง สี สีเติม และความโปร่งแสง
  • ลิงก์ของเครือข่ายเพื่อนำเข้าข้อมูลแบบไดนามิก
  • Ground Overlay และ Screen Overlay

ตารางต่อไปนี้จะแสดงรายละเอียดทั้งหมดขององค์ประกอบ KML ที่สนับสนุน

องค์ประกอบ KML รองรับใน API ไหม ความคิดเห็น
<address> ไม่
<AddressDetails> ไม่
<Alias> ไม่มีข้อมูล ไม่รองรับ <Model>
<altitude> ไม่
<altitudeMode> ไม่
<atom:author> ใช่
<atom:link> ใช่
<atom:name> ใช่
<BalloonStyle> บางส่วน รองรับเฉพาะ <text>
<begin> ไม่มีข้อมูล ไม่รองรับ <TimeSpan>
<bgColor> ไม่
<bottomFov> ไม่มีข้อมูล ไม่รองรับ <PhotoOverlay>
<Camera> ไม่
<เปลี่ยน> บางส่วน รองรับเฉพาะการเปลี่ยนแปลงรูปแบบ
<color> บางส่วน รวม #AABBGGRR และ #BBGGRR แต่ไม่รองรับใน <IconStyle>, <ScreenOverlay> และ <GroundOverlay>
<colorMode> ไม่
<cookie> ไม่
<coordinates> ใช่
<สร้าง> ไม่
<Data> ใช่
<ลบ> ไม่
<description> ใช่ เนื้อหา HTML ได้รับอนุญาต แต่มีการล้างรหัสผ่านเพื่อป้องกันการโจมตีในหลายเบราว์เซอร์ ระบบไม่รองรับการแทนที่เอนทิตีของแบบฟอร์ม $[dataName]
<displayMode> ไม่
<displayName> ไม่
<Document> บางส่วน พูดง่ายๆ คือ ระบบจะรองรับเด็กๆ ด้วย ไม่มีผลใดๆ ในฐานะที่เป็นบุตรหลานของฟีเจอร์อื่นๆ
<drawOrder> ไม่
<east> ใช่
<end> ไม่มีข้อมูล ไม่รองรับ <TimeSpan>
<expires> ใช่ ดูรายละเอียดในส่วนสรุป
<ExtendedData> บางส่วน เฉพาะ <Data> ที่ไม่ได้พิมพ์เท่านั้น ไม่รองรับ <SimpleData> หรือ <Schema> และระบบไม่รองรับ การแทนที่เอนทิตีของแบบฟอร์ม $[dataName]
<extrude> ไม่
<fill> ใช่
<flyToView> ไม่
<โฟลเดอร์> ใช่
<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> ไม่
<สถานที่ตั้ง> ไม่มีข้อมูล ไม่รองรับ <Model>
<Lod> ใช่
<longitude> ใช่
<LookAt> ไม่
<maxAltitude> ใช่
<maxFadeExtent> ใช่
<maxHeight> ไม่มีข้อมูล ไม่รองรับ <PhotoOverlay>
<maxLodPixels> ใช่
<maxSessionLength> ไม่
<maxWidth> ไม่มีข้อมูล ไม่รองรับ <PhotoOverlay>
<message> ไม่
<Metadata> ไม่ เลิกใช้งานแล้ว
<minAltitude> ใช่
<minFadeExtent> ใช่
<minLodPixels> ใช่
<minRefreshPeriod> ไม่ <NetworkLink>
<รุ่น> ไม่
<MultiGeometry> บางส่วน แสดงผลแต่แสดงเป็นฟีเจอร์แยกต่างหากในแผงด้านซ้าย
<name> ใช่
<ใกล้> ไม่มีข้อมูล ไม่รองรับ <PhotoOverlay>
<NetworkLink> ใช่  
<NetworkLinkControl> บางส่วน รองรับ <Update> และ <expires> บางส่วน API จะไม่สนใจการตั้งค่าการหมดอายุในส่วนหัว HTTP แต่ใช้การตั้งค่าการหมดอายุที่ระบุใน KML ในกรณีที่ไม่มีการตั้งค่าวันหมดอายุหรืออยู่ภายในช่วงเวลาที่ถูกต้อง Google Maps อาจแคชข้อมูลที่ดึงมาจากอินเทอร์เน็ตเป็นระยะเวลาที่ไม่ได้ระบุ คุณบังคับการดึงข้อมูลใหม่จากอินเทอร์เน็ตได้โดยการเปลี่ยนชื่อเอกสารและดึงข้อมูลผ่าน 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>
<โรลล์> ไม่มีข้อมูล ไม่รองรับ <camera> และ <Model>
<rotation> ไม่
<rotationXY> ไม่
<สเกล> ไม่มีข้อมูล ไม่รองรับ <Model>
<scale> ไม่
<Schema> ไม่
<SchemaData> ไม่
<ScreenOverlay> ใช่ ไม่สามารถหมุนได้
<screenXY> ไม่
<shape> ไม่มีข้อมูล ไม่รองรับ <PhotoOverlay>
<SimpleData> ไม่มีข้อมูล ไม่รองรับ <SchemaData>
<SimpleField> ไม่มีข้อมูล ไม่รองรับ <สคีมา>
<size> ใช่
<Snippet> ใช่
<south> ใช่
<state> ไม่มีข้อมูล ไม่รองรับ <ListStyle>
<Style> ใช่
<StyleMap> ไม่ ไม่สนับสนุนเอฟเฟ็กต์โรลโอเวอร์ (ไฮไลต์)
<styleUrl> ไม่มีข้อมูล ไม่รองรับ <StyleMap>
<targetHref> บางส่วน สนับสนุนใน <Update> แต่ไม่ใช่ใน <Alias>
<tessellate> ไม่
<text> ใช่ ไม่รองรับการแทนที่ $[geDirections]
<textColor> ไม่
<tileSize> ไม่มีข้อมูล ไม่รองรับ <PhotoOverlay>
<tilt> ไม่
<TimeSpan> ไม่
<TimeStamp> ไม่
<topFov> ไม่มีข้อมูล ไม่รองรับ <PhotoOverlay>
<อัปเดต> บางส่วน การเปลี่ยนแปลงรูปแบบเท่านั้น ไม่ใช่ <สร้าง> หรือ <ลบ>
<Url> ใช่ เลิกใช้งานแล้ว
<value> ใช่
<viewBoundScale> ไม่
<viewFormat> ไม่
<viewRefreshMode> บางส่วน รองรับ "onStop"
<viewRefreshTime> ใช่
<ViewVolume> ไม่มีข้อมูล ไม่รองรับ <PhotoOverlay>
<visibility> บางส่วน ใช่ ใน <โฟลเดอร์> - หมุดย่อยจะรับค่า การเปิดเผย
<w> ใช่ เลิกใช้งานแล้ว
<west> ใช่
<when> ไม่มีข้อมูล ไม่รองรับ <TimeStamp>
<width> ใช่
<x> ใช่ เลิกใช้งานแล้ว
<y> ใช่ เลิกใช้งานแล้ว