KML

KML は、Google Earth、Google マップ、モバイル Google マップなどの Earth ブラウザで、地理データの表示に使用するファイル形式です。KML は、XML 標準をベースにしており、ネストされた要素や属性を含むタグ構造を使用します。すべてのタグで大文字と小文字が区別されます。タグは KML リファレンスの定義どおりに記述する必要があります。このリファレンスには、省略できるタグが記載されています。タグは、リファレンスで記述されている順番で要素内に指定する必要があります。

KML を初めて使う場合は、このドキュメントと付属のサンプル ファイル(SamplesInEarthSamplesInMaps)を参照して、KML ファイルの基本構造とよく使われるタグについて確認してください。最初のセクションでは、Google Earth のユーザー インターフェースを使用して作成できるアイテムについて説明します。これには、目印、説明、地面オーバーレイ、パス、ポリゴンなどが含まれます。2 番目のセクションでは、テキスト エディタを使用して KML を作成する必要があるアイテムについて説明します。.kml または .kmz 拡張子を付けて保存したテキスト ファイルは、Earth ブラウザで表示できます。

ヒント: Google Earth 内にあるアイテムの KML「コード」を見るには、Google Earth の 3D ビューアでそのアイテムを右クリックして [コピー] をクリックします。次に、クリップボードのデータをテキスト エディタに貼り付けます。Google Earth で視覚的に表示されるアイテムが、対応する KML テキストに変換されます。この機能はぜひお試しください。

ここで説明されている例はすべて KML Samples ファイルに含まれています。まずこのファイルをダウンロードして、Google Earth で例としてご覧ください。

詳細情報

KML 2.2 リファレンスでは、KML ファイルのフォーマットについて詳しく説明しています。XML に精通している方は、KML 2.2 スキーマもご覧ください。

KML の主な機能の使い方については、デベロッパー ガイドをご覧ください。

目次

  1. 基本的な KML ドキュメント
    1. 目印
    2. 目印の記述的 HTML
    3. 地面オーバーレイ
    4. パス
    5. ポリゴン
  2. 高度な KML ドキュメント
    1. ジオメトリのスタイル
    2. 強調表示されたアイコンのスタイル
    3. 画面オーバーレイ
    4. ネットワーク リンク
  3. KML の MIME タイプ

基本的な KML ドキュメント

最も単純なタイプの KML ドキュメントは、Google Earth 上で直接作成するものです。テキスト エディタで KML を編集したり作成したりする必要はありません。目印、地面オーバーレイ、パス、ポリゴンはすべて Google Earth で直接作成できます。

目印

目印は、Google Earth で最もよく使われるアイテムの 1 つです。目印は Earth の地表上の特定の位置にマークを表示するもので、黄色いピンなどのアイコンで示されます。最も単純な目印は、目印の場所を指定する <Point> 要素だけを含みます。目印には名前やカスタム アイコンを指定したり、他のジオメトリ要素を追加したりできます。

Google Earth で KML Samples ファイルを開いて、Placemarks サブフォルダを展開します。このフォルダには、simplefloatingextruded の 3 種類の目印が含まれています。simple 目印の KML コードは次のとおりです:

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

このファイルの構造は次のとおりです:

  • XML ヘッダー。すべての KML ファイルの 1 行目です。この行の前にスペースや他の文字を入力することはできません。
  • KML 名前空間宣言。すべての KML 2.2 ファイルの 2 行目です。
  • 次の要素を含む目印オブジェクト:
    • name: 目印のラベルとして使用される名前
    • description: 目印の「バルーン」に表示される説明
    • Point: 地表での目印の位置を指定する(longitude、latitude、オプションの altitude

この例の目印は Google の Building 41 を指していますが、これは Google Earth が開発された場所です。

通常、Google Earth で「目印」としてユーザーに表示されるものは、KML では <Point> という子要素を持つ <Placemark> 要素になります。Google Earth の 3D ビューアでアイコンとラベルを描画するには、ポイントの目印を使う必要があります。デフォルトでは、アイコンはおなじみの黄色いピンです。KML では、<Placemark> に対して LineString、Polygon、Model などのジオメトリ要素を 1 つ以上設定できます。ただし、アイコンとラベルを設定できるのはポイントの存在する <Placemark> のみになります。ポイントはアイコンの位置設定に使われますが、ポイントそのものは画面には表示されません。

目印の記述的 HTML

KML Samples ファイルには、目印のテキストで使用できるほぼすべての機能の例があります。リンク、フォント サイズ、スタイル、色を追加したり、テキストの配置や表を指定したりできます。この一覧を参照するには、「Descriptive HTML」目印の例(Styles and Markup フォルダ内)をコピーしてテキスト エディタに貼り付けてください。

Google Earth(リリース 4.0 以降)での自動マークアップ

Google Earth 4.0 には、www.google.com のように、テキストを有効なハイパーリンクに自動変換することでユーザーがクリックできるようにする自動マークアップ機能があります。<description> タグ、<Snippet> タグ、<BalloonStyle> の <text> 要素の中のテキストは、すべて標準の HTTP ハイパーリンクに自動変換されます。自分で <a href= ...> タグを追加する必要はありません。

CDATA 要素の使用

<description> タグ内に標準 HTML を記述する場合は、CDATA タグで囲みます。CDATA タグで囲まない場合は、山かっこをエンティティ参照として記述することで、Google Earth によって HTML が不適切に解析されないようにする必要があります(たとえば、記号 >&gt;、記号 <&lt; と記述します)。これは XML の標準機能であり、Google Earth 固有の機能ではありません。

HTML マークアップで CDATA タグを使った場合と使わない場合を比較します。最初に CDATA タグを使った <description> を示します:

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

次に CDATA タグを使わない <description> を示します。この場合、特殊文字はエンティティ参照として記述します:

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

地面オーバーレイ

地面オーバーレイを使うと、Earth の地形上に画像を表示できます。<Icon> 要素に、オーバーレイする画像の .jpg ファイルへのリンクを指定します。KML Samples ファイルにある地面オーバーレイの例を次に示します。この例は 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>http://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>

このファイルの冒頭の 2 行(XML ヘッダーと KML 名前空間宣言)が最初の例と同じである点に注目してください。

この例では、コンテンツをグループ化してラベルを付けるために(「Ground Overlays」という名前の)フォルダを使っています。KML Samples ファイルを Google Earth に読み込むと、[場所] パネルにフォルダが表示されます。

地面オーバーレイの位置設定は <LatLonBox> タグでコントロールします。北端と南端の緯度、東端と西端の経度を境界値として指定します。さらに、y 軸が方眼北と一致しない画像に対して回転角度を指定します。この例では、オーバーレイに JPEG 画像を使用しています。Google Earth では BMP、GIF、TIFF、TGA、PNG の各形式もサポートされています。

パス

Google Earth ではさまざまなタイプのパスを作成して、自由にデータを加工できます。KML では <LineString> 要素を使ってパスを作成します。Paths フォルダの「Absolute Extruded」の例では、次のコードによりどのような形状が生成されるかがわかります:

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

このコードでは、地面より上方に位置する標高を基準に 1 本のラインが描画されます。このラインは <tessellate> タグによって小さく分割され、<extrude> タグによって地面まで伸びています。

ポリゴン

ポリゴンを使ってシンプルな建物やその他の形状を作成できます。例については、KML Samples ファイルの Polygons フォルダをご覧ください。

「The Pentagon」の例は、内郭と外郭を簡単に描画し、地面に押し出すことによって生成されています。コードは次のとおりです:

<?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 高度な KML ドキュメント

このセクションでは、テキスト エディタを使って作成する必要がある KML 要素をいくつか説明します。たとえば、ジオメトリの共有スタイル、目印の強調表示されたアイコン、画面オーバーレイなどがあります。KML を「手作業」で記述するのは、Google Earth インターフェース上でアイテムを作成したり修正したりするよりもやや高度ですが、ほとんどのユーザーは少し練習するだけで、問題なく KML ファイルを編集し、これらの効果を追加できるようになるでしょう。

ジオメトリのスタイル

Google Earth でアイテムを作成し、Google Earth で生成された KML コードを確認すると、データの表示においてスタイルがいかに重要かがわかります。ここでは上級ユーザーを対象に、独自のスタイルを定義する方法を説明します。

KML ドキュメントの冒頭でスタイルを定義し、このスタイルに対して ID も定義すると、このスタイルをドキュメントの他の場所で定義されるジオメトリ、目印、オーバーレイで使用できるようになります。複数の要素で同じスタイルを使用できるため、この方法で定義して使用するスタイルを「共有スタイル」と呼びます。特定のスタイルを一度定義すると、<styleUrl> 要素を使って繰り返し参照できます。スタイル定義が同一ファイル内に含まれている場合は、スタイル ID の前に # 記号を付けます。スタイル定義が外部ファイル内に含まれている場合は、<styleUrl> 要素に完全な URL を記述します。

KML Samples ファイルには、複数の共有スタイルが含まれています。各共有スタイルは、ファイルの冒頭で ID を付けて定義されています。ID はその効果を説明する文字列にしておくと判別しやすくなります。このスタイルの例(「transBluePoly」)では、ポリゴンの表面の色を透明な青、ポリゴンの境界線の幅を 1.5(色はデフォルトの白)に定義しています。このスタイルは、Google Campus の例(Polygons フォルダ内)の Building 41 で使われています:

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

<Style> 要素が、作用するジオメトリの子要素ではなく <Placemark> の子要素であることに注意してください。

強調表示されたアイコンのスタイル

Styles and Markup フォルダの「Highlighted Icon」では、KML を使ってロールオーバー効果を作成する方法を示します。このドキュメントでは、「normalPlacemark」と「highlightPlacemark」(アイコン上にカーソルを合わせたときに表示される)の 2 つのスタイルが定義されています。<StyleMap> 要素には、各アイコン スタイルをアイコンの状態にマップするキー/値ペアが 2 つあります。アイコンの状態には normal(通常)と highlight(強調表示)の 2 つがあります。

この例の基本的な手順は次のとおりです:

  1. 目印の通常アイコンの <Style> を定義し、ID(この例では「normalPlacemark」)を割り当てます。以下に示すように、<Style> には実際の画像への <href> を含む <Icon> が含まれています。
  2. 目印の強調表示アイコンの <Style> を定義し、ID(この例では「highlightPlacemark」)を割り当てます。
  3. <StyleMap> 要素を作成し、ID(「exampleStyleMap」)を割り当てます。Placemark はこの ID を参照します。
  4. <StyleMap> 要素で、normal の状態に対して「#normalPlacemark」を指定します。
  5. <StyleMap> 要素で、highlight の状態に対して「#highlightPlacemark」を指定します。
  6. Placemark の中に、「#exampleStyleMap」を参照する <styleUrl> 要素を追加します。
<?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>

画面オーバーレイ

画面オーバーレイは Google Earth で直接作成できないため、地面オーバーレイよりも作成が難しくなります。KML Samples ファイルの Screen Overlays フォルダにサンプルの包括的なコレクションが含まれています。

たとえば、KML Samples ファイルの「Absolute Positioning: Top left」フォルダを有効にすると、ビュー ウィンドウの左上に画面オーバーレイが表示されます。これは次の KML コードで作成されています:

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

位置設定は、画像内の <overlayXY> で指定したポイントを画面上の <screenXY> で指定したポイントにマップすることによってコントロールされます。この場合、画像の左上 (0,1) が画面上の同じく左上と一致します。

他の固定位置を取得する方法や、画面サイズに合わせて動的にサイズが変更される画像を作成する方法については、フォルダ内の他の例をご覧ください(xunitsyunits を「ピクセル」単位で指定して正確にコントロールすることもできます)。詳しくは KML 2.2 リファレンスをご覧ください。

ネットワーク リンク

ネットワーク リンクには、<href>(ハイパーテキスト参照)を指定した <Link> 要素が含まれており、この要素によってファイルが読み込まれます。<href> にはローカル ファイルまたは絶対 URL を指定できます。名前が <NetworkLink> であるにもかかわらず、ネットワーク以外の場所にあるファイルも読み込むことができます。

リンクの <href> で、次のいずれかのファイルの場所を指定します:

  • アイコン スタイルのアイコン、地面オーバーレイ、画面オーバーレイで使用する画像ファイル
  • <Model> 要素で使用するモデル ファイル
  • ネットワーク リンクにより読み込む KML ファイルまたは KMZ ファイル

ローカル ファイルかリモート サーバー上のファイルのどちらかを指定できます。ネットワーク リンクの簡単で便利な使用方法は、同一コンピュータ上の 1 つの大きな KML ファイルを管理しやすい小さなファイルに分割することです。

これまでの例では、使用する KML コードをローカル マシンから Google Earth にアップロードする必要がありました。ネットワーク リンクは、離れた場所からコンテンツを配信できるため、多数のユーザーにデータを配信するためによく使用されます。この方法により、データの修正が必要な場合は、ソースの場所でデータを変更するだけで、更新されたデータをすべてのユーザーが自動的に受信できます。

KML の CGI スクリプト

ネットワーク リンクの <href> は、静的データを含むファイルのほか、ネットワーク サーバーに配置された CGI スクリプトなどによって動的に生成されたデータも参照できます。PHP、Python、Perl などのスクリプト言語の知識があれば、KML データのストリーム(またはファイル)を各ネットワーク リンクに配信するスクリプトを作成できます。

ネットワーク CGI を介して KML を配信する際には、次の 2 点にご注意ください:

クライアント(Google Earth)からサーバーへの呼び出しが発生すると、サーバーは(1)応答コード HTTP 200 を返し、(2)応答のコンテンツ タイプを text/plain または application/vnd.google-earth.kml+xml に設定する必要があります。

応答は有効な KML である必要があります。複雑なアプリケーションの場合、適切にエラーを処理することが非常に重要です。

ヒント: エラーを処理する簡単な方法として、サーバーのエラーをフォルダ名のテキストとして返し、解析できるようにする方法があります。たとえば、サーバーから <Folder><name>database inaccessible</name></Folder> という文字列が返されるようにします。この処理によって、何の説明もなく接続が切断されるよりも状況を把握しやすくなり、使い勝手が向上します。

次の例では Python を使用していますが、他のスクリプト言語も同様に使用できます。

ランダム目印の生成

次の Python スクリプトでは、latitudelongitude に対して生成したランダム整数値を <Point> の <coordinates> 要素に挿入しています。ネットワーク リンクが更新されるたびに Python スクリプトが再実行され、新しい緯度と経度の値を持つ KML が生成されます。

#!/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

次に、この Python スクリプトを読み込むネットワーク リンクを含む KML ファイルの例を示します:

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

ビューベースの更新クエリ

標準のネットワーク リンクは一方向リンクです。データはサーバーから Google Earth の方向にのみ流れます。ビューベースの更新によって、双方向の通信ができるようになります。ビューベースの更新を有効にすると、指定した時間に Google Earth からサーバーにビュー座標が返されます。これは、n 秒/分/時間ごと、またはビューの停止から特定の時間の経過後を指定できます。詳しくは、KML 2.2 リファレンスの <viewRefreshMode> をご覧ください。

座標は、座標が指定された HTTP GET を介してサーバーに返されます(これはデフォルトの境界ボックス情報です)。次に例を示します:

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

ユーザーがサンフランシスコを表示しているときにリクエストが実行されると、座標は次のようになります:

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

この機能は高度なアプリケーションでも使用できますが、まずはシンプルな例を示します:

ユーザーのビューの真下にあるポイントの追跡

サーバー側の次のような Python スクリプトによって、Google Earth から返されたメッセージが解析され、その応答として画面の中央に目印が表示されます。ネットワーク リンクが更新されるたびに新しい目印が生成されます。

#!/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

次に、この Python スクリプトを読み込むネットワーク リンクの KML を示します:

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

この例で示す原理は、非常に複雑なアプリケーションにも使用できます。たとえば、地理情報のデータベースがあれば、ビューアの座標を抽出し、そのビュー固有のデータをデータベースから呼び出して、KML として Google Earth に返すことができます。

3 KML の MIME タイプ

KML サーバーは、Google Earth(または Earth ブラウザ)からのリクエストに応答する際、Google Earth が応答を正しく解釈できるように所定のルールに従う必要があります。

成功時には、サーバーは応答コード HTTP 200 を返し、次に示す適切な MIME タイプを応答のコンテンツ タイプに設定する必要があります。

Google Earth では KML ファイルと KMZ ファイルを読み込むことができます。KML ファイルの MIME タイプは次のとおりです:

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

KMZ ファイルの MIME タイプは次のとおりです:

  • application/vnd.google-earth.kmz

Apache では、次の行を httpd.conf ファイルに追加します:

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

Microsoft IIS で MIME タイプを設定する方法については、Microsoft のドキュメントをご覧ください。

応答の本文には、XML 宣言(<?xml version="1.0" encoding="UTF-8"?>)などの有効な KML データを含める必要があります。サーバーから無効な KML が返された場合、ネットワーク リンクは停止して無効になり、エラー メッセージが出力されます。

次のステップ

さらに詳しい情報については、KML の主な機能が記載されているデベロッパー ガイドをご覧ください。特定の要素について詳しくは、KML リファレンスもご覧ください。