Hướng dẫn về KML

KML là một định dạng tệp dùng để hiển thị dữ liệu địa lý trong trình duyệt Earth như Google Earth. KML sử dụng cấu trúc dựa trên thẻ có các phần tử và thuộc tính lồng nhau và dựa trên tiêu chuẩn XML. Tất cả các thẻ đều phân biệt chữ hoa chữ thường và phải xuất hiện chính xác như được nêu trong Tài liệu tham khảo KML. Tệp đối chiếu cho biết các thẻ không bắt buộc. Trong một phần tử nhất định, thẻ phải xuất hiện theo thứ tự hiển thị trong Tham chiếu.

Nếu bạn mới sử dụng KML, hãy khám phá tài liệu này và các tệp mẫu đi kèm (SamplesIn Earth) để bắt đầu tìm hiểu về cấu trúc cơ bản của tệp KML và các thẻ thường dùng nhất. Phần đầu tiên mô tả các tính năng có thể được tạo bằng giao diện người dùng Google Earth. Những tính năng này bao gồm dấu vị trí, mô tả, lớp phủ mặt đất, đường dẫn và đa giác. Phần thứ hai mô tả các tính năng yêu cầu tác giả KML bằng trình chỉnh sửa văn bản. Khi tệp văn bản được lưu bằng tiện ích .SSH hoặc .SRC, trình duyệt Earth sẽ biết cách hiển thị tệp đó.

Mẹo: Để xem "mã" KML của một tính năng trong Google Earth, bạn chỉ cần nhấp chuột phải vào tính năng đó trong Trình xem 3D của Google Earth rồi chọn Sao chép. Sau đó, dán nội dung của bảng nhớ tạm vào bất kỳ trình chỉnh sửa văn bản nào. Tính năng hình ảnh hiển thị trong Google Earth sẽ được chuyển đổi thành văn bản KML tương đương. Hãy nhớ thử nghiệm tính năng này.

Tất cả ví dụ mô tả ở đây đều nằm trong tệp Mẫu KML. Hãy bắt đầu bằng cách tải tệp đó xuống để xem các ví dụ trong Google Earth.

Để biết thêm thông tin

Tài liệu tham khảo KML 2.2 cung cấp thông tin chi tiết về định dạng tệp KML. Nếu đã quen thuộc với XML, bạn cũng sẽ quan tâm đến Giản đồ KML 2.2.

Để thảo luận về cách sử dụng một số tính năng chính trong KML, hãy xem Hướng dẫn dành cho nhà phát triển.

Mục lục

Tài liệu KML cơ bản

Loại tài liệu KML đơn giản nhất là những tài liệu có thể được tạo trực tiếp trong Google Earth – tức là bạn không cần chỉnh sửa hoặc tạo bất kỳ KML nào trong trình chỉnh sửa văn bản. Bạn có thể tạo trực tiếp dấu vị trí, lớp phủ mặt đất, đường dẫn và đa giác, trong Google Earth.

Dấu vị trí

Dấu vị trí là một trong những tính năng thường dùng trong Google Earth. Nó đánh dấu một vị trí trên bề mặt Trái Đất, sử dụng đinh ghim màu vàng làm biểu tượng. Dấu vị trí đơn giản nhất chỉ bao gồm phần tử <Point>. Phần tử này chỉ định vị trí của Dấu vị trí. Bạn có thể chỉ định tên và biểu tượng tuỳ chỉnh cho Dấu vị trí, và bạn cũng có thể thêm các phần tử hình học khác vào Dấu vị trí.

Mở tệp Mẫu KML trong Google Earth và mở rộng thư mục con Dấu vị trí. Thư mục này bao gồm ba loại dấu vị trí khác nhau: đơn giản, nổiđẩy. Mã KML cho dấu vị trí đơn giản trông như sau:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>Simple placemark</name>
<description>Attached to the ground. Intelligently places itself at the height of the underlying terrain.</description>
<Point>
<coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
</Point>
</Placemark> </kml>

Cấu trúc của tệp này chia nhỏ như sau:

  • Tiêu đề XML. Đây là dòng 1 trong mọi tệp KML. Không có khoảng trắng hoặc ký tự khác có thể xuất hiện trước dòng này.
  • Khai báo vùng chứa tên KML. Đây là dòng 2 trong mọi tệp KML 2.2.
  • Đối tượng Dấu vị trí chứa các phần tử sau:
    • Tên được dùng làm nhãn cho Dấu vị trí
    • Nội dung mô tả xuất hiện trong "bong bóng" được đính kèm vào Dấu vị trí
    • Một Điểm chỉ định vị trí của Dấu vị trí trên bề mặt Trái đất (kinh độ, vĩ độđộ cao không bắt buộc)

Nếu bạn muốn biết Dấu vị trí là ở đâu, nó nằm ngay trên Toà nhà 41 của Google, nơi chúng tôi đã phát triển Google Earth!

Những gì người dùng thường nghĩ là một "dấu vị trí" trong Google Earth thực tế là một phần tử <Dấu vị trí> có phần tử con <Point> trong KML. Dấu vị trí điểm là cách duy nhất để vẽ biểu tượng và nhãn trong Trình xem 3D của Google Earth. Theo mặc định, biểu tượng này là chiếc đinh ghim màu vàng quen thuộc. Trong KML, <Dấu vị trí> có thể chứa một hoặc nhiều phần tử hình học, chẳng hạn như Chuỗi đường thẳng, Đa giác hoặc Mô hình. Nhưng chỉ <Dấu vị trí> có Điểm mới có thể có biểu tượng và nhãn. Điểm được dùng để đặt biểu tượng, nhưng không có hình ảnh biểu thị của Điểm.

HTML mô tả trong dấu vị trí

Tệp Mẫu KML có ví dụ về hầu hết mọi việc bạn có thể làm với văn bản Dấu vị trí. Bạn có thể thêm đường liên kết, kích thước phông chữ, kiểu và màu sắc cũng như chỉ định cách căn chỉnh văn bản và bảng. Nếu bạn muốn xem danh sách đầy đủ, hãy sao chép và dán ví dụ về Dấu vị trí "HTML mô tả" (trong thư mục Kiểu và Đánh dấu ) vào trình chỉnh sửa văn bản.

Tự động đánh dấu trong Google Earth (Bản phát hành 4.0 trở lên)

Google Earth 4.0 có tính năng tự động đánh dấu tự động chuyển đổi văn bản như www.google.com.vn thành các siêu liên kết đang hoạt động mà người dùng có thể nhấp vào. Văn bản bên trong thẻ <description>, thẻ <snippet> và phần tử <text> của <BalloonStyle> đều tự động chuyển đổi thành các siêu liên kết HTTP chuẩn. Bạn không cần tự thêm thẻ <a href= ...>.

Sử dụng phần tử đề xuất có liên quan

Nếu muốn viết HTML chuẩn bên trong thẻ <description>, bạn có thể đặt thẻ này bên trong thẻ InMobi. Nếu không, dấu ngoặc nhọn cần được viết dưới dạng tham chiếu thực thể để ngăn Google Earth phân tích cú pháp HTML không chính xác (ví dụ: biểu tượng > được viết là &gt; và ký hiệu < được viết là &lt;). Đây là một tính năng chuẩn của XML và không phải là duy nhất đối với Google Earth.

Xem xét sự khác biệt giữa mã đánh dấu HTML có thẻ CUE và không có DRM. Trước tiên, hãy xem <description> với các thẻ InMobi:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>CDATA example</name> <description> <![CDATA[ <h1>CDATA Tags are useful!</h1> <p><font color="red">Text is <i>more readable</i> and <b>easier to write</b> when you can avoid using entity references.</font></p> ]]> </description> <Point> <coordinates>102.595626,14.996729</coordinates> </Point> </Placemark> </Document> </kml>

Và đây là <description> không có thẻ InMobi để các ký tự đặc biệt phải sử dụng giá trị tham chiếu thực thể:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>Entity references example</name> <description> &lt;h1&gt;Entity references are hard to type!&lt;/h1&gt; &lt;p&gt;&lt;font color="green"&gt;Text is &lt;i&gt;more readable&lt;/i&gt; and &lt;b&gt;easier to write&lt;/b&gt; when you can avoid using entity references.&lt;/font&gt;&lt;/p&gt; </description> <Point> <coordinates>102.594411,14.998518</coordinates> </Point> </Placemark> </Document> </kml>

Lớp phủ mặt đất

Lớp phủ mặt đất cho phép bạn "hiển thị" một hình ảnh lên địa hình của Trái đất. Phần tử <Icon> chứa đường liên kết đến tệp .jpg có hình ảnh lớp phủ. Dưới đây là ví dụ về lớp phủ mặt đất trong tệp Mẫu KML, cho thấy núi Etna phun trào vào năm 2001:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Folder>
<name>Ground Overlays</name>
<description>Examples of ground overlays</description>
<GroundOverlay>
<name>Large-scale overlay on terrain</name>
<description>Overlay shows Mount Etna erupting on July 13th, 2001.</description>
<Icon>
<href>https://developers.google.com/kml/documentation/images/etna.jpg</href>
</Icon>
<LatLonBox>
<north>37.91904192681665</north>
<south>37.46543388598137</south>
<east>15.35832653742206</east>
<west>14.60128369746704</west>
<rotation>-0.1556640799496235</rotation>
</LatLonBox>
</GroundOverlay>
</Folder> </kml>

Lưu ý rằng tệp bắt đầu bằng hai dòng giống như ví dụ đầu tiên: khai báo tiêu đề XML và không gian tên KML.

Ví dụ này sử dụng Thư mục (có tiêu đề là "Lớp phủ mặt đất") làm cơ chế để nhóm và gắn nhãn nội dung trong đó. Lưu ý cách Thư mục xuất hiện trong bảng điều khiển Địa điểm khi bạn tải tệp Mẫu KML vào Google Earth.

Vị trí của lớp phủ mặt đất do thẻ <LatLonBox> kiểm soát. Các giá trị giới hạn được đưa ra cho vĩ độ bắc và nam, cũng như kinh độ đông và tây. Ngoài ra, các giá trị xoay vòng được cung cấp cho hình ảnh có trục y không khớp với lưới về phía bắc. Ví dụ này sử dụng hình ảnh JPEG cho lớp phủ. Google Earth cũng hỗ trợ các định dạng BMP, GIF, TIFF, TGA và PNG.

Đường dẫn

Bạn có thể tạo nhiều loại đường dẫn khác nhau trong Google Earth và dễ dàng sáng tạo cùng dữ liệu của mình. Trong KML, một đường dẫn được tạo bởi phần tử <LineString>. Hãy xem ví dụ "Absolute Extruded" (Mở rộng tuyệt đối) trong thư mục Path (Đường dẫn) để biết cách tạo hình đã được tạo bằng mã sau:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document>
<name>Paths</name>
<description>Examples of paths. Note that the tessellate tag is by default
set to 0. If you want to create tessellated lines, they must be authored
(or edited) directly in KML.</description> <Style id="yellowLineGreenPoly">
<LineStyle>
<color>7f00ffff</color>
<width>4</width>
</LineStyle>
<PolyStyle>
<color>7f00ff00</color>
</PolyStyle>
</Style> <Placemark>
<name>Absolute Extruded</name>
<description>Transparent green wall with yellow outlines</description>
<styleUrl>#yellowLineGreenPoly</styleUrl>
<LineString>
<extrude>1</extrude>
<tessellate>1</tessellate>

<altitudeMode>absolute</altitudeMode>
<coordinates> -112.2550785337791,36.07954952145647,2357
-112.2549277039738,36.08117083492122,2357
-112.2552505069063,36.08260761307279,2357
-112.2564540158376,36.08395660588506,2357
-112.2580238976449,36.08511401044813,2357
-112.2595218489022,36.08584355239394,2357
-112.2608216347552,36.08612634548589,2357
-112.262073428656,36.08626019085147,2357
-112.2633204928495,36.08621519860091,2357
-112.2644963846444,36.08627897945274,2357
-112.2656969554589,36.08649599090644,2357 </coordinates>
</LineString> </Placemark>
</Document> </kml>

Hãy lưu ý cách thực sự chỉ là một đường được vẽ ở độ cao so với mặt đất. Thẻ <tessellate> chia dòng thành các đoạn nhỏ hơn và thẻ <extrude> mở rộng dòng xuống mặt đất.

Đa giác

Bạn có thể sử dụng Đa giác để tạo toà nhà đơn giản và các hình dạng khác. Hãy kiểm tra thư mục Đa giác trong tệp Mẫu KML để xem ví dụ.

Ví dụ về Hình ngũ giác được tạo bằng cách vẽ các vỏ đơn giản bên trong và bên ngoài, sau đó đẩy chúng xuống đất. Sau đây là mã :

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>The Pentagon</name>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-77.05788457660967,38.87253259892824,100
-77.05465973756702,38.87291016281703,100
-77.05315536854791,38.87053267794386,100
-77.05552622493516,38.868757801256,100
-77.05844056290393,38.86996206506943,100
-77.05788457660967,38.87253259892824,100
</coordinates>
</LinearRing>
</outerBoundaryIs>
<innerBoundaryIs>
<LinearRing>
<coordinates>
-77.05668055019126,38.87154239798456,100
-77.05542625960818,38.87167890344077,100
-77.05485125901024,38.87076535397792,100
-77.05577677433152,38.87008686581446,100
-77.05691162017543,38.87054446963351,100
-77.05668055019126,38.87154239798456,100
</coordinates>
</LinearRing>
</innerBoundaryIs>
</Polygon>
</Placemark> </kml>

2 Tài liệu KML nâng cao

Phần này mô tả một số phần tử KML phải được biên soạn bằng trình chỉnh sửa văn bản, chẳng hạn như kiểu được chia sẻ cho hình học, biểu tượng được đánh dấu cho Dấu vị trí và lớp phủ màn hình. Việc tạo KML "theo cách thủ công" sẽ nâng cao hơn một chút so với việc sử dụng giao diện Google Earth để tạo và sửa đổi tính năng, nhưng với số lượng thực hành ít, hầu hết người dùng đều cảm thấy thoải mái khi chỉnh sửa tệp KML để thêm những hiệu ứng này.

Kiểu cho Hình học

Sau khi tạo các tính năng trong Google Earth và kiểm tra mã KML mà Google Earth tạo, bạn sẽ nhận thấy cách các kiểu là một phần quan trọng trong cách dữ liệu của bạn được hiển thị. Người dùng thành thạo sẽ muốn tìm hiểu cách xác định phong cách của riêng họ.

Nếu bạn xác định Kiểu ở đầu Tài liệu KML và cũng xác định ID cho kiểu đó, bạn có thể sử dụng kiểu này trong Hình học, Dấu vị trí và Lớp phủ được xác định ở nơi khác trong Tài liệu. Vì nhiều phần tử có thể sử dụng cùng một Kiểu, nên các kiểu được xác định và sử dụng theo cách này được gọi là kiểu được chia sẻ. Bạn xác định một Kiểu nhất định một lần, sau đó có thể tham chiếu đến kiểu đó nhiều lần bằng cách sử dụng phần tử <styleUrl>. Nếu định nghĩa Kiểu nằm trong cùng một tệp, hãy đứng trước Mã kiểu có dấu #. Nếu định nghĩa Kiểu nằm trong một tệp bên ngoài, hãy thêm URL hoàn chỉnh vào phần tử <styleUrl>.

Tệp Mẫu KML chứa nhiều kiểu dùng chung, mỗi kiểu được xác định bằng một mã nhận dạng ở đầu tệp. Lưu ý rằng dễ nhất nếu ID của bạn là chuỗi mô tả để bạn có thể dễ dàng nhận biết hiệu ứng của chúng là gì. Dưới đây là ví dụ về kiểu ("transBluePoly") xác định màu xanh lam trong suốt cho các mặt đa giác và chiều rộng đường kẻ là 1.5 (và màu mặc định của màu trắng) cho các cạnh của đa giác. Kiểu này được Xây dựng 41 trong ví dụ của Google Campus (trong thư mục Đa giác) sử dụng:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Style id="transBluePoly">
<LineStyle>
<width>1.5</width>
</LineStyle>
<PolyStyle>
<color>7dff0000</color>
</PolyStyle>
</Style> <Placemark>
<name>Building 41</name>
<styleUrl>#transBluePoly</styleUrl>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates> -122.0857412771483,37.42227033155257,17
-122.0858169768481,37.42231408832346,17
-122.085852582875,37.42230337469744,17
-122.0858799945639,37.42225686138789,17
-122.0858860101409,37.4222311076138,17
-122.0858069157288,37.42220250173855,17
-122.0858379542653,37.42214027058678,17
-122.0856732640519,37.42208690214408,17
-122.0856022926407,37.42214885429042,17
-122.0855902778436,37.422128290487,17
-122.0855841672237,37.42208171967246,17
-122.0854852065741,37.42210455874995,17
-122.0855067264352,37.42214267949824,17
-122.0854430712915,37.42212783846172,17
-122.0850990714904,37.42251282407603,17
-122.0856769818632,37.42281815323651,17
-122.0860162273783,37.42244918858722,17
-122.0857260327004,37.42229239604253,17
-122.0857412771483,37.42227033155257,17 </coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</kml>

Xin lưu ý rằng phần tử <styleUrl> là phần tử con của <Dấu vị trí> (không phải Hình học mà phần tử này ảnh hưởng).

Kiểu cho các biểu tượng được đánh dấu

"Biểu tượng được đánh dấu " trong thư mục Kiểu và đánh dấu cho bạn biết cách tạo hiệu ứng cuộn lên với KML. Tài liệu xác định hai kiểu, một kiểu cho "Dấu vị trí thông thường" và một cho "Dấu vị trí đánh dấu" (được hiển thị khi con trỏ cuộn trên Biểu tượng). Phần tử <StyleMap> có hai cặp khoá/giá trị ánh xạ từng kiểu biểu tượng cho một trạng thái biểu tượng. Có hai trạng thái biểu tượng: bình thườngđánh dấu.

Sau đây là các bước cơ bản:

  1. Xác định <Kiểu> cho biểu tượng dấu vị trí thông thường của dấu vị trí, và chỉ định ID cho nó (ở đây là "Dấu vị trí thông thường"). <Style> bao gồm <Icon> có <href> đối với hình ảnh thực tế để sử dụng, như minh hoạ dưới đây.
  2. Xác định <Kiểu> cho biểu tượng đánh dấu của Dấu vị trí và chỉ định ID cho nó (tại đây, "làm nổi bật Dấu vị trí").
  3. Tạo phần tử <StyleMap> và chỉ định một ID cho phần tử đó (exampleStyleMap). Dấu vị trí sẽ tham chiếu đến ID này.
  4. Trong phần tử <StyleMap>, hãy chỉ định "#canonical" cho trạng thái bình thường.
  5. Trong phần tử <StyleMap>, hãy chỉ định "#highlightSlot" cho trạng thái highlight (đánh dấu).
  6. Trong Dấu vị trí, hãy thêm một phần tử <styleUrl> tham chiếu đến "#exampleStyleMap."
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Highlighted Icon</name>
<description>Place your mouse over the icon to see it display the new icon</description>
<Style id="highlightPlacemark">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/red-stars.png</href>
</Icon>
</IconStyle>
</Style>
<Style id="normalPlacemark">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href>
</Icon>
</IconStyle>
</Style>
<StyleMap id="exampleStyleMap">
<Pair>
<key>normal</key>
<styleUrl>#normalPlacemark</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#highlightPlacemark</styleUrl>
</Pair>
</StyleMap>
<Placemark>
<name>Roll over this icon</name>
<styleUrl>#exampleStyleMap</styleUrl>
<Point>
<coordinates>-122.0856545755255,37.42243077405461,0</coordinates>
</Point>
</Placemark>
</Document>
</kml>

Lớp phủ màn hình

Không thể tạo lớp phủ màn hình trực tiếp trong Google Earth và do đó khó tạo hơn lớp phủ mặt đất. Một bộ mẫu toàn diện có trong thư mục Lớp phủ màn hình trong tệp Mẫu KML.

Ví dụ: bật thư mục "Vị trí tuyệt đối: Trên cùng bên trái" trong tệp Mẫu KML và bạn sẽ thấy lớp phủ màn hình ở trên cùng bên trái cửa sổ chế độ xem. Đoạn mã này được tạo bằng mã KML sau:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<ScreenOverlay>
<name>Absolute Positioning: Top left</name>
<Icon>
<href>http://developers.google.com/kml/documentation/images/top_left.jpg</href>
</Icon>
<overlayXY x="0" y="1" xunits="fraction" yunits="fraction"/>
<screenXY x="0" y="1" xunits="fraction" yunits="fraction"/>
<rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
<size x="0" y="0" xunits="fraction" yunits="fraction"/>
</ScreenOverlay>
</kml>

Vị trí được kiểm soát bằng cách ánh xạ một điểm trong hình ảnh do <OverlayXY> chỉ định tới một điểm trên màn hình do <screenXY> chỉ định. Trong trường hợp này, góc trên cùng bên trái của hình ảnh (0,1) được tạo ngẫu nhiên với cùng một điểm trên màn hình.

Hãy xem các ví dụ khác trong thư mục để biết cách lấy các vị trí cố định khác và tạo hình ảnh có kích thước động với kích thước màn hình. (Xin lưu ý rằng bạn cũng có thể chỉ định xunityunit là "pixel" để kiểm soát độ chính xác.) Để biết thêm chi tiết, hãy xem Tài liệu tham khảo KML 2.2.

Đường liên kết mạng chứa phần tử <Link> với <href> (tham chiếu siêu văn bản) tải tệp. <href> có thể là một quy cách tệp cục bộ hoặc một URL tuyệt đối. Dù có tên, <NetworkLink> không nhất thiết phải tải tệp từ mạng lên.

<href> trong một đường liên kết chỉ định vị trí của bất kỳ địa điểm nào sau đây:

  • Tệp hình ảnh dùng trong các biểu tượng ở kiểu biểu tượng, lớp phủ mặt đất và lớp phủ màn hình
  • Tệp mô hình được sử dụng trong phần tử <Model>
  • Tệp KML hoặc MRSS được tải bởi Liên kết mạng

Tệp được chỉ định có thể là tệp cục bộ hoặc tệp trên máy chủ từ xa. Ở dạng đơn giản nhất, liên kết mạng là cách hữu ích để chia một tệp KML lớn thành các tệp nhỏ hơn, dễ quản lý hơn trên cùng một máy tính.

Cho đến nay, tất cả ví dụ của chúng tôi đều yêu cầu mã KML phải được gửi đến Google Earth từ máy cục bộ. Đường liên kết mạng cho phép bạn phân phát nội dung từ một vị trí từ xa và thường dùng để phân phối dữ liệu cho một số lượng lớn người dùng. Bằng cách này, nếu cần sửa đổi dữ liệu, bạn chỉ cần thay đổi dữ liệu đó tại vị trí nguồn và tất cả người dùng sẽ tự động nhận được dữ liệu đã cập nhật.

CGI Scripting cho KML

Ngoài việc trỏ đến các tệp chứa dữ liệu tĩnh, <href> của một đường liên kết mạng có thể trỏ đến dữ liệu được tạo động — ví dụ: bằng một tập lệnh CGI nằm trên máy chủ mạng. Với một số kiến thức về ngôn ngữ kịch bản như PHP, Python hoặc Perl, bạn có thể tạo một tập lệnh phân phối luồng (hoặc tệp) dữ liệu KML tới mỗi liên kết mạng.

Cần có hai thứ để phân phối KML thông qua CGI mạng:

Khi một lệnh gọi được thực hiện từ máy khách (Google Earth) đến máy chủ, máy chủ đó phải (1) trả về mã phản hồi HTTP 200 và (2) đặt loại nội dung của phản hồi thành text/plain hoặc application/vnd.google-earth.kml+xml.

Phản hồi phải là KML hợp lệ. Đối với các ứng dụng phức tạp, việc xử lý lỗi thích hợp là rất quan trọng.

Mẹo: Một cách đơn giản để xử lý lỗi là phân tích cú pháp lỗi của máy chủ dưới dạng văn bản cho tên thư mục. Ví dụ: bạn có thể yêu cầu máy chủ trả về <Folder><name>database inaccessible</name></Folder> dưới dạng một chuỗi. Cách này sẽ hữu ích (và thân thiện với người dùng hơn) so với việc huỷ kết nối.

Những ví dụ sau đây sử dụng Python nhưng hợp lệ như nhau trong mọi ngôn ngữ kịch bản khác.

Tạo dấu vị trí ngẫu nhiên

Tập lệnh Python sau đây tạo ra các giá trị số nguyên ngẫu nhiên cho macrokinh độ, sau đó chèn các giá trị đó vào phần tử <Coordinates> của một <Point>. Bất cứ khi nào đường liên kết mạng được làm mới, tập lệnh Python sẽ chạy lại và tạo KML với các giá trị vĩ độ và kinh độ mới.

#!/usr/bin/python

import random

latitude = random.randrange(-90, 90)
longitude = random.randrange(-180, 180)
kml = (
   '<?xml version="1.0" encoding="UTF-8"?>\n'
   '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
   '<Placemark>\n'
   '<name>Random Placemark</name>\n'
   '<Point>\n'
   '<coordinates>%d,%d</coordinates>\n'
   '</Point>\n'
   '</Placemark>\n'
   '</kml>'
   ) %(longitude, latitude)
print 'Content-Type: application/vnd.google-earth.kml+xml\n'
print kml

Sau đây là ví dụ về một tệp KML chứa Đường liên kết mạng tải tập lệnh Python này:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>
<name>Network Links</name>
<visibility>0</visibility>
<open>0</open>
<description>Network link example 1</description>
<NetworkLink>
<name>Random Placemark</name>
<visibility>0</visibility>
<open>0</open>
<description>A simple server-side script that generates a new random
placemark on each call</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://yourserver.com/cgi-bin/randomPlacemark.py</href>
</Link>
</NetworkLink>
</Folder>
</kml>

Truy vấn làm mới dựa trên chế độ xem

Đường liên kết mạng chuẩn là đường liên kết một chiều: dữ liệu chỉ lưu chuyển từ máy chủ đến Google Earth. Làm mới dựa trên chế độ xem cho phép giao tiếp hai chiều. Khi làm mới dựa trên chế độ xem đang hoạt động, Google Earth sẽ trả về toạ độ chế độ xem cho máy chủ vào thời điểm được chỉ định. Điều này có thể là mỗi n giây, phút hoặc giờ hoặc khi một khoảng thời gian nhất định đã trôi qua kể từ khi chế độ xem ngừng di chuyển. Xem <viewRefreshMode> trong Tài liệu tham khảo KML 2.2.

Toạ độ được trả về máy chủ bằng phương thức GET HTTP nối thêm toạ độ như sau (đây là thông tin hộp giới hạn mặc định):

GET /path/to/server/script/query?BBOX=[longitude_west, latitude_south, longitude_east, latitude_north] HTTP/1.1

Nếu yêu cầu được đưa ra trong khi người dùng đang nhìn xuống San Francisco, các toạ độ có thể trông như sau:

GET /path/to/server/script/query?BBOX=-122.497790,37.730385,-122.380087,37.812331 HTTP/1.1

Bạn có thể sử dụng tính năng này cho một số ứng dụng sáng tạo, nhưng để làm quen, bạn sẽ thấy một ví dụ đơn giản bên dưới.

Theo dõi một điểm ngay trong chế độ xem

Tập lệnh Python phía máy chủ sau đây sẽ phân tích cú pháp thông báo trả về do Google Earth gửi và phản hồi bằng Dấu vị trí ở giữa màn hình. Mỗi khi Liên kết mạng được làm mới, một Dấu vị trí mới sẽ được tạo.

#!/usr/bin/python

import cgi

url = cgi.FieldStorage()
bbox = url['BBOX'].value
bbox = bbox.split(',')
west = float(bbox[0])
south = float(bbox[1])
east = float(bbox[2])
north = float(bbox[3])

center_lng = ((east - west) / 2) + west
center_lat = ((north - south) / 2) + south

kml = ( 
   '<?xml version="1.0" encoding="UTF-8"?>\n'
   '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
   '<Placemark>\n'
   '<name>View-centered placemark</name>\n'
   '<Point>\n'
   '<coordinates>%.6f,%.6f</coordinates>\n'
   '</Point>\n'
   '</Placemark>\n'
   '</kml>'
   ) %(center_lng, center_lat)

print 'Content-Type: application/vnd.google-earth.kml+xml\n'
print kml

Và đây là KML cho Liên kết mạng tải tập lệnh Python:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>
<name>Network Links</name>
<visibility>0</visibility>
<open>0</open>
<description>Network link example 2</description>
<NetworkLink>
<name>View Centered Placemark</name>
<visibility>0</visibility>
<open>0</open>
<description>The view-based refresh allows the remote server to calculate
the center of your screen and return a placemark.</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://yourserver.com/cgi-bin/viewCenteredPlacemark.py</href>

<refreshInterval>2</refreshInterval>
<viewRefreshMode>onStop</viewRefreshMode>
<viewRefreshTime>1</viewRefreshTime>
</Link>
</NetworkLink>
</Folder>
</kml>

Nguyên tắc minh hoạ trong ví dụ này có thể dùng cho một số ứng dụng rất phức tạp. Ví dụ: nếu có cơ sở dữ liệu về thông tin địa lý, bạn có thể trích xuất toạ độ của trình xem, gọi lệnh cho cơ sở dữ liệu để xem dữ liệu cụ thể cho thành phần hiển thị rồi trả về Google Earth dưới dạng KML.

3 loại MIME KML

Khi phản hồi một yêu cầu từ Google Earth (hoặc bất kỳ trình duyệt Earth nào), máy chủ KML phải tuân theo một bộ quy tắc nhất định để Google Earth có thể diễn giải chính xác phản hồi của ứng dụng.

Khi thành công, máy chủ phải trả về mã phản hồi HTTP 200 và đặt loại nội dung của phản hồi thành loại MIME thích hợp, như được mô tả ở đây.

Google Earth đọc các tệp KML và MRSS. Loại MIME cho tệp KML là

  • application/vnd.google-earth.kml+xml

Loại MIME cho tệp MRSS là

  • application/vnd.google-earth.kmz

Đối với Apache, hãy thêm các dòng sau vào tệp httpd.conf:

  • AddType application/vnd.google-earth.kml+xml .kml
  • AddType application/vnd.google-earth.kmz .kmz

Xem tài liệu của Microsoft để biết chi tiết về cách thiết lập loại MIME trên IIS của Microsoft.

Phần nội dung của phản hồi phải chứa dữ liệu KML hợp lệ, bao gồm cả phần khai báo XML (<?xml version="1.0" encoding="UTF-8"?>). Nếu máy chủ trả về KML không hợp lệ, thì Đường liên kết mạng sẽ dừng, hủy kích hoạt và xuất ra thông báo lỗi.

Tiếp theo là gì?

Sẵn sàng cho nhiều điều hơn? Xem Hướng dẫn dành cho nhà phát triển, trong đó mô tả các tính năng KML chính. Ngoài ra, hãy duyệt Tài liệu tham khảo KML để biết thông tin về những phần tử cụ thể.