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>
    <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 Map รายการเดียวมีขีดจำกัด หากเกินขีดจํากัดนี้ เลเยอร์ทั้งหมดจะไม่ปรากฏบนแผนที่ และระบบจะรายงานข้อผิดพลาดในคอนโซล JavaScript ของเบราว์เซอร์ ขีดจํากัดจะอิงตามจํานวนชั้น KmlLayerที่สร้างขึ้นและความยาวรวมของ URL ทั้งหมดที่ใช้สร้างเลเยอร์เหล่านั้นKmlLayerใหม่แต่ละรายการที่คุณสร้างจะใช้พื้นที่บางส่วนของขีดจํากัดสําหรับเลเยอร์ และอีกส่วนหนึ่งของขีดจํากัดจะขึ้นอยู่กับความยาวของ URL ที่โหลดไฟล์ KML ดังนั้น จำนวนเลเยอร์ที่คุณเพิ่มได้จะแตกต่างกันไปตามแอปพลิเคชัน โดยเฉลี่ยแล้ว คุณควรโหลดเลเยอร์ได้ 10-20 เลเยอร์โดยไม่ถึงขีดจำกัด หากยังใช้ URL เกินขีดจํากัดอยู่ ให้ใช้ตัวย่อ URL เพื่อย่อ URL ของ KML หรือสร้างไฟล์ KML ไฟล์เดียวที่มี NetworkLinks ไปยัง URL ของ KML แต่ละรายการ
ข้อควรพิจารณาด้านประสิทธิภาพและการแคช
เซิร์ฟเวอร์ของ Google จะแคชไฟล์ KML ไว้ชั่วคราวเพื่อลดภาระงานในเซิร์ฟเวอร์ของคุณ วิธีนี้ยังช่วยปรับปรุงประสิทธิภาพให้กับผู้ใช้ด้วยการแสดงกลุ่มที่เหมาะสมของไฟล์ KML โดยใช้พื้นที่อย่างมีประสิทธิภาพ เมื่อผู้ใช้คลิก เลื่อน และซูมแผนที่
เราขอแนะนําให้ทําดังนี้เพื่อให้ได้ประสิทธิภาพที่ดีที่สุด
- ใช้แท็ก <expires>ที่เหมาะสมใน KML
 
 KmlLayerจะไม่ใช้ส่วนหัว HTTP เมื่อตัดสินใจวิธีแคชไฟล์ KML
- อย่าสร้างไฟล์แบบไดนามิกเมื่อได้รับคําขอ
 
 ให้สร้างไฟล์ไว้ก่อนถึงเวลาใช้งาน แล้วแสดงไฟล์แบบคงที่ หากเซิร์ฟเวอร์ใช้เวลานานในการส่งไฟล์ KMLKmlLayerอาจไม่แสดง
- อย่าพยายามข้ามแคช เว้นแต่คุณจะแน่ใจว่าไฟล์ได้รับการอัปเดตแล้ว
 
 การข้ามแคชเสมอ (เช่น โดยการต่อท้ายตัวเลขสุ่มหรือเวลาตามนาฬิกาของผู้ใช้เป็นพารามิเตอร์การค้นหา) อาจทําให้เซิร์ฟเวอร์ของคุณทำงานหนักเกินไปได้ง่ายๆ หากเว็บไซต์ของคุณได้รับความนิยมอย่างฉับพลันและคุณแสดงไฟล์ 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> | ไม่ | |
| <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 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> | 
| <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> | บางส่วน | yes on <Folder> - หมุดย่อยจะรับค่าการแสดงผลจากหมุดหลัก | 
| <w> | ใช่ | เลิกใช้งานแล้ว | 
| <west> | ใช่ | |
| <when> | ไม่มี | ระบบไม่รองรับ <TimeStamp> | 
| <width> | ใช่ | |
| <x> | ใช่ | เลิกใช้งานแล้ว | 
| <y> | ใช่ | เลิกใช้งานแล้ว |