お気に入り | 日本語 | ログイン

写真オーバーレイの追加

KML の以前のリリースでも、Google Earth の目印に付けられた説明バルーンに小さな写真を挿入することは可能でした。Panoramio のようにユーザーから投稿された位置情報付きの写真で構成されたレイヤ全体を追加できるようになりました。これらの写真を見るには、目印アイコンをクリックするか、[一覧] パネルで名前をクリックして、写真が挿入されているバルーンを開く必要があります。

写真オーバーレイとは、Earth の景観に直接埋め込む写真です。たとえば、ベースとなる Earth の航空画像に、2D の長方形の風景写真を埋め込むことができます。また、写真オーバーレイを円筒や球体に投影して仮想パノラマを作成し、ユーザーがその中を探索できるように設置することも可能です。KML 2.2 は、画素数が非常に多い写真のオーバーレイにも対応しています。非常に大きな画像については、解像度を下げたバージョンをいくつか作成しておき、Google Earth が現在のビューに合わせて適度の解像度の画像を効率的に読み込めるようにしておく必要があります。

このページ以外では、カメラ ページの KML に関する説明も、写真オーバーレイを使用する際には非常に参考になりますのでぜひお読みください。写真オーバーレイに非常に大きな画像を使用する場合は、<ImagePyramid> も作成する必要があります。

写真オーバーレイの機能

新たに追加された <PhotoOverlay> 要素を使用すると、Earth 上の特定の地点に写真を配置して、この写真オーバーレイを表示するカメラの場所と方向を指定できます。写真オーバーレイは、単純な 2D の長方形だけでなく、一部または全体を円筒状にしたり、全体を球体にしたりしてパノラマを作成できます。オーバーレイは、指定した場所に配置され、カメラの方向に向けられます。

""

この新機能の最も魅力的な点は、画素数が多い非常に大きな写真にも対応していること、そして、すばやくズームインしたりパンしたりして画像の細かい部分まで鮮明に表示できることです。この高度な機能については、非常に大きい写真の追加をご覧ください。

主な概念

以降のセクションでは、写真オーバーレイに関わる重要な概念について説明します:

  • <Feature> および <AbstractView> からの継承
  • <Overlay> からの継承
  • 形状
  • 視界
  • <rotation> によるビューの調整
  • アイコンによる写真オーバーレイのマーキング
  • 画像ピラミッド(上級者向け。非常に大きい写真の追加をご覧ください)

構文

次に、<PhotoOverlay> の構文を示します。主な概念の説明を読む際に参照してください。

<PhotoOverlay>
  <!-- inherited from Feature element -->   
  <name>...</name>                      <!-- string -->   
  <visibility>1</visibility>            <!-- boolean -->   
  <open>0</open>                        <!-- boolean -->
  <atom:author>...<atom:author>         <!-- xmlns:atom -->   
  <atom:link>...</atom:link>            <!-- xmlns:atom -->   
  <address>...</address>                <!-- string -->   
  <AddressDetails xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">...
</AddressDetails> <!-- string --> <phoneNumber>...</phoneNumber> <!-- string -->
<Snippet maxLines="2">...</Snippet> <!-- string --> <description>...</description> <!-- string --> <AbstractView>...</AbstractView> <!-- Camera or LookAt --> <TimePrimitive>...</TimePrimitive> <styleUrl>...</styleUrl> <!-- anyURI --> <StyleSelector>...</StyleSelector> <Region>...</Region> <ExtendedData>...</ExtendedData> <!-- inherited from Overlay element --> <color>ffffffff</color> <!-- kml:color --> <drawOrder>0</drawOrder> <!-- int --> <Icon> <href>...</href> <!-- anyURI --> ... </Icon> <!-- specific to PhotoOverlay --> <rotation>0</rotation> <!-- kml:angle180 --> <ViewVolume> <leftFov>0</leftFov> <!-- kml:angle180 --> <rightFov>0</rightFov> <!-- kml:angle180 --> <bottomFov>0</bottomFov> <!-- kml:angle90 --> <topFov>0</topFov> <!-- kml:angle90 --> <near>0</near> <!-- double --> </ViewVolume> <ImagePyramid> <tileSize>256</tileSize> <!-- int --> <maxWidth>...</maxWidth> <!-- int --> <maxHeight>...</maxHeight> <!-- int --> <gridOrigin>lowerLeft</gridOrigin> <!-- lowerLeft or upperLeft--> </ImagePyramid> <Point> <coordinates>...</coordinates> <!-- lon,lat[,alt] --> </Point> <shape>rectangle</shape> <!-- kml:shape --> </PhotoOverlay>

<Feature> からの継承

<PhotoOverlay> は <Feature> から派生するため、<AbstractView> から派生する 2 つの要素(<Camera> と <LookAt>)のいずれかを含むことができます。Camera(または LookAt)では、「視点」と「表示方向」(「ビュー ベクトル」とも呼びます)を指定します。写真オーバーレイは、視点からの相対位置に配置されます。たとえば、2D の長方形の画像の平面は、ビュー ベクトルと直交(直角に交差)します。この平面(つまり、前面であり、写真が表示される部分)の垂線は、視点を指します。

<Overlay> からの継承

写真オーバーレイ画像の URL は、<Overlay> から継承した <Icon> で指定します。<Icon> タグには、写真オーバーレイで使用する画像ファイルを指定する <href> 要素が含まれている必要があります。ギガピクセル サイズの画像の場合は、さまざまな解像度の画像からなるピラミッドのインデックスを指す特殊な URL を <href> に指定します(非常に大きい写真の追加をご覧ください)。

形状

写真オーバーレイは、特定の「shape(形状)」に投影されます。<shape> には、以下の値を指定できます:

  • rectangle - 普通の写真
  • cylinder - 一部または全体が円筒状のパノラマ
  • sphere - 球体のパノラマ
""

視界

カメラを空中に配置して方向を合わせたら、現在のシーンのうちどの範囲を表示するかを定義する必要があります。「視界」を指定することは、実際のカメラの絞り値を調節することに似ています。視界を狭くすると、望遠レンズのようにシーンの一部分のみを表示できます。視界を広げると、広角レンズのようにシーンの大部分を表示できます。

写真オーバーレイの表示範囲は、4 つの面によって定義されます。それぞれの面はビュー ベクトルに対する角度で指定します。上下左右 4 つの平面で視界を定義すると、次の図に示すようにピラミッドのような形状になります:

view volume for a camera

次の図に、このピラミッドを「上」から見たときの角度を定義する <rightFov> と <leftFov>、「横」から見たときの角度を定義する <topFov> と <bottomFov> を図示します:

""

本物のカメラの場合、通常は視界が左右対称、上下対称になります。その場合は、

bottomFov = -topFov 

および

leftFov = -rightFov

となります。標準的な値は次のとおりです:

<ViewVolume>
  <near>1000</near>
  <leftFov>-60</leftFov>
  <rightFov>60</rightFov>
  <bottomFov>-60</bottomFov>
  <topFov>60</topFov>
</ViewVolume>

写真オーバーレイを投影する <shape> は、<near>(視点またはカメラの位置から数メートルの距離)に配置されます。視界の 4 つの平面は形状と交差します。形状のうち、視界内に収まっている部分のみが表示されます。視界の外にはみ出している部分は、「切り取られた」ものとみなされ表示されません。

長方形用の視界

長方形の画像の場合は、<topFov> を 90 度未満、<bottomFov> を -90 度超に設定する必要があります。これらの制限のどちらかを超えると、視界の平面は画像とまったく交差しません。<bottomFov> 要素と <leftFov> 要素は、通常は負の値になります。

円筒用の視界

円筒状の画像の場合は、円筒の軸とビューの上ベクトル(Y 軸)が合致します。円筒の半径は <near> と同じ値になります。

円筒の場合、視界の範囲は次のとおりです。

-90 < bottomFov < topFov < 90
-180 < leftFov < rightFov < 180 

球体用の視界

球体の画像は、カメラ(または視点)の原点が中心に合うように配置されます。球体の半径は、<near> と同じ値になります。球体の場合、視界の範囲は次のとおりです:

-90 < bottomFov < topFov < 90
-180 < leftFov < rightFov < 180 

<rotation> によるビューの調整

視界内での写真の配置を調整するには、<PhotoOverlay> の子要素として <rotation> を使用します。この要素は、写真が傾いていて水平ビューから少しずれている場合に便利です。

アイコンによる写真オーバーレイのマーキング

<PhotoOverlay> では、<Point> 要素も使用できます。この要素は、<Placemark> の <Point> 要素と同じように機能しますので、Google Earth 上にアイコンを描画して、写真オーバーレイの位置に目印を付けることができます。どのアイコンを描画するかは、<Placemark> の場合と同じように、<styleUrl> および <StyleSelector> フィールドで指定します。

非常に大きい写真の追加

サイズの非常に大きい画像の場合、「画像ピラミッド」を作成する必要があります。画像ピラミッドとは、元の画像の解像度を少しずつ下げた複数の画像を階層状に設定したものです。ピラミッド内の各画像は「タイル」に再分割されており、ビューの必要な部分だけを読み込めるようになっています。Google Earth では、現在の視点に基づいて画像とユーザー間の距離を計算し、その距離に合ったタイルを読み込みます。PhotoOverlay に視点が近付くと、Google Earth はより高い解像度のタイルを読み込みます。元の画像のすべてのピクセルを、画面上に一度に表示することはできません。この前処理によって、画像全体のうちビューに表示される部分のみを選択し、現在の視点に合わせてユーザーが識別できる程度の解像度で読み込むことにより、Google Earth のパフォーマンスを最大限まで高めることができます。

画像が非常に大きい場合は、その画像ピラミッドを作成し、<Icon> 要素の <href> にどのタイルを読み込むかを指定する必要があります。以降では、ギガピクセルの画像の画像ピラミッドを作成して <href> を指定する方法について説明します。

<ImagePyramid> 要素

<ImagePyramid> 要素の構文は次のとおりです:

<ImagePyramid>
  <tileSize>256</tileSize>              <!-- int -->
  <maxWidth>...</maxWidth>              <!-- int -->
  <maxHeight>...</maxHeight>            <!-- int -->
  <gridOrigin>lowerLeft</gridOrigin>    <!-- lowerLeft or upperLeft -->
</ImagePyramid>

画像の本来のピクセル サイズは、<maxWidth> および <maxHeight> 要素で指定します。幅と高さに制限はなく、2 の累乗である必要もありません。空のピクセルが含まれているタイルは、画像への充てんピクセルの追加に従ってピクセルを充てんできます。

タイルは正方形とし、<tileSize> は 2 の累乗にする必要があります。タイルのサイズは、256(デフォルト)または 512 にすることをおすすめします。

画像ピラミッドの作成

次に示す手順では、使用する画像のピクセル寸法が 2 の累乗であることを前提としています(使用する画像のピクセル寸法が 2 の累乗でない場合は、あらかじめ充てんピクセルを追加しておく必要があります。詳細については、画像への充てんピクセルの追加をご覧ください)。画像ピラミッドを作成する方法は次のとおりです:

  1. 本来のフルサイズ画像を「タイル」に分割します。たとえば、各タイルのサイズが 256 x 256 ピクセルになるようにします。
  2. 画像を係数 2 で縮小します。
  3. この新しい画像をタイルに分割します。
  4. 縮小した画像がタイルのサイズ(たとえば 256 x 256 ピクセル)に収まるまで手順 2 と 3 を繰り返します。

画像への充てんピクセルの追加

各行の最後のタイルが正方形でない場合は、透明な充てんピクセルを追加してタイルを正方形にする必要があります。(0,0) のタイルを原点に合わせて画像を配置します(たとえば、原点が左下の場合は、画像をタイル グリッドの左下の角に合わせて配置します)。その場合、充てんが必要な行と列は、画像の右側と上部になります。適切に充てんするため、画像の端にある最後の行(または列)を複製します。次に、行(または列)のタイル内の残りのピクセルに、たとえば黒の充てんピクセルを追加します。

サイズが 3600 x 2700 ピクセル(約 10 メガピクセル)の画像があるとします。この画像の画像ピラミッドを作成する手順は次のとおりです。

  1. タイル サイズとして 256 ピクセルを選択した場合、元の画像を 16 x 16 ピクセルのグリッドまで再分割できます。(最終的にはレベル 4 まで再分割されます)。
  2. 最後の列(<gridOrigin> が lowerLeft の場合は一番右)および最後の行(一番上)で、画像が一部分にしか表示されてないタイルにピクセルを充てんして正方形にします(画像への充てんピクセルの追加をご覧ください)。
  3. 係数 2 で画像を縮小します。
  4. この画像を 256 ピクセルのタイルに再分割します。このレベルの画像は、8 x 8 タイルのグリッドで構成されます(レベル 3)。
  5. レベル 3 の画像を係数 2 で縮小します。
  6. タイルに再分割します。このレベルの画像は、4 x 4 タイルのグリッドで構成されます(レベル 2)。
  7. レベル 2 の画像を係数 2 で縮小します。
  8. タイルに再分割します。このレベルの画像は、2 x 2 タイルのグリッドで構成されます(レベル 1)。
  9. レベル 1 の画像を係数 2 で縮小します。
  10. その結果、画像のサイズが 256 x 256 ピクセルとなり、これが画像ピラミッドの最終レベルの画像になります(レベル 0)。

次の表に示すように、4096 x 4096 の画像の画像ピラミッドは 5 つのレベルで構成されます。

レベル
タイルの数
画像のサイズ(ピクセル)
0
1
256 x 256
1
4(2 x 2 グリッド)
512 x 512
2
16(4 x 4 グリッド)
1024 x 1024
3
64(8 x 8 グリッド)
2048 x 2048
4
256(16 x 16 グリッド)
4096 x 4096

レベルが n である場合、一辺のタイル数は 2n となります。

次の図に、レベル 0、1、2 からなる画像ピラミッドのサンプルを示します。

"" ""

タイルへの番号付け

Google Earth では、各レベルのタイルに番号を付けることで、現在の視点に適合するタイルのみを取得できるようにしています。各タイルは、次の 3 つの値で識別されます:

  • x 値 - グリッド内の行の位置
  • y値 - グリッド内の列の位置
  • level - 画像ピラミッド内のレベル(0 が最上位)

デフォルトでは、原点 (0,0) はグリッドの左下になります。画像の原点を左上にする場合は、<gridOrigin> に topLeft を指定します。

次の図に、左下を原点とする 10 メガピクセルの画像を再分割した場合の、レベル 2 のタイルの番号付けを示します。

非常に大きな画像の URL の指定

ギガピクセルの画像の場合、<Icon> 要素の <href>には、Google Earth で取得する必要のあるタイルの levelx 値、y 値を指定する特別なエントリを含めます。たとえば、画像の URL は次のように指定できます:

http://server.company.com/bigphoto/$[level]/row_$[x]_column_[$y].jpg 

レベル 3 の行 2、列 1 のタイルを要求する場合、Google Earth は次のような URL を取得します:

http://server.company.com/bigphoto/3/row_2_column_1.jpg

透過度

画像全体が不透明である場合は、JPEG 形式を使用してください。画像の一部が不透明で、一部が透明である場合は、PNG と JPEG のタイルを混在させることができます。透過値のあるタイルについては PNG 形式のみを使用してください。形式を混在させる必要がある場合は、画像ファイルを指定する <href> から拡張子を削除し、各タイルのファイル名に拡張子を付けます。

トップへ戻る