Google Earthのコンテンツでリッチな表現を

第2回プレイスマーク整理術

フォルダの管理

通常のPCでもGoogle Earth上でも、フォルダでの管理は重要です。とりわけGoogle Earth上では、それぞれのコンテンツをまとめて移動させるためにはフォルダを使うしかありません(複数のコンテンツを選んで移動ができないためです⁠⁠。また、Google Earthの特性上、親元となるフォルダのチェックボックスをチェックしてしまうと、すべてのコンテンツが有効になってしまい、閲覧上支障を来す場合も多々あります。

そこで今回は、Google Earth上でフォルダ管理をするテクニックを実践に基づいて紹介していきたいと思います。使いどころを押さえることで、より利用者本位のコンテンツを作成することができるでしょう。

通常のフォルダ

Google Earthはツリー状のコンテンツ管理となっています。単純に整理するという意味だけでなく、フォルダをチェックすることで、そのフォルダ以下の全てのコンテンツが有効となります。

よって、コンテンツの量が多ければ多いほど、フォルダでの管理は求められます。主にフォルダ分けで管理する目的は、ジャンルや目的別が主です。Google Earth上ではさらに、エリア毎に分けるという目的も出てくることでしょう。ですが、この場合には、この後紹介するRegion設定で管理するのが通常です。通常のフォルダのサンプルを見てみましょう。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
<Document>
  <name>普通のフォルダ.kml</name>
  <Folder>
    <name>普通のフォルダ</name>
    <open>1</open>
    <<description>test</description>
    <Style>
      <ListStyle>
        <listItemType>check</listItemType>
        <bgColor>7fff0000</bgColor>
      </ListStyle>
    </Style>
    <Placemark>
      <<name>testicon</name>
      <Point>
        <coordinates>139.62863,35.87999390026555,0</coordinates>
      </Point>
    </Placemark>
  </Folder>
</Document>
</kml>

上記のコードはこれでもっとも単純なフォルダ、そしてその中にあるもっとも単純なプレイスマークの構造です。プレイスマークのスタイル設定もありません。ここで最も重要なのは、<Folder>タグの中にある<Style>タグと、その孫要素である<listItemType>タグです。

checkが指定されている状態が通常のフォルダとなります。フォルダが開かれた状態にしておくか否かは、<Folder> タグ直下の<open>タグの数値にあります。0ならばクローズ、1ならばオープンの状態となります。<Style><ListStyle>は常にこの形で使われるので、欠くことのないようにしてください。なお、このは、通常のフォルダでは必要不可欠ではありません。実行すると以下のような画面になります。

図1 通常のフォルダを設定したKMLを開いてみた
図1 通常のフォルダを設定したKMLを開いてみた

ラジオボタンフォルダ

ラジオボタンフォルダは、利用者本位に立って表示をさせるという目的ではよく利用されるフォルダです。複数のオーバーレイを同時に表示させた場合には閲覧に支障が出てしまったり、切り替えを目的とした場合(たとえば、複数のパターンのモデルデータを切り替えるなど)に利用されます。同一フォルダ内では、いずれか1つのフォルダしか有効にできない仕組みとなっています。

ラジオボタンの直下には、いかなるコンテンツもラジオボタン化されますので、オーバーレイやプレイスマークだけでなく、ポリゴンやフォルダ、ネットワークリンクすらもラジオボタン化されます。では、もっともシンプルなコードを見てみましょう。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
<Document>
  <Folder>
    <name>ラジオボタンフォルダ</name>
    <visibility>0</visibility>
    <open>1</open>
    <Style>
      <ListStyle>
        <listItemType>radioFolder</listItemType>
      </ListStyle>
    </Style>
    <Placemark>
      <name>南鳥島</name>
      <Point>
        <coordinates>153.9804136787218,24.28675068577222,0</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>沖ノ鳥島</name>
      <visibility>0</visibility>
      <Point>
        <coordinates>136.0751602735146,20.42271295321212,0</coordinates>
      </Point>
    </Placemark>
  </Folder>
</Document>
</kml>

上記の例は、2つのプレイスマークをラジオボタン化したものです。この場合、<Folder>直下にある<Style>タグの孫要素である<listItemType>タグの値は、radioFolderと指定するだけです。</Folder>タグまでの間有効となります。

今回の場合はデフォルトで開く状態にしており、デフォルトで選択された状態になるのは、南鳥島のプレイスマークとなります。これは、沖ノ鳥島のプレイスマークが<Visibility>タグで0が指定されているためです。

もちろん、オーバーレイやフォルダなども同じレベルにあれば、混在した形で、ラジオボタン化が可能です。ラジオボタンフォルダを入れ子の状態にすることも可能で、その場合も同じく<Visibility>でデフォルトで開くラジオボタンを指定できます。

図2 ラジオボタンフォルダを開いてみた
図2 ラジオボタンフォルダを開いてみた

コンテンツを非表示にするフォルダの設定

コンテンツはすべてが表示されている姿が良いわけではありません。時には、コンテンツの多さが逆に利用者にとって不便をもたらします。とくにツリー状で管理する都合上、あまりに大量のコンテンツの場合には、1つのフォルダを1つのコンテンツとして扱ったほうが都合が良い場合もしばしばあります。これはGoogle Earth上でも簡単に設定できるものではありますが、タグについても理解しておくと後々便利です。それでは、実際にいくつかのコンテンツを1つのフォルダに入れ、コンテンツを非表示にした例を見てみることにしましょう。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
<Document>
  <Folder>
    <name>隠しフォルダ</name>
    <open>1</open>
    <Style>
      <ListStyle>
        <listItemType>checkHideChildren</listItemType>
        <bgColor>00ffffff</bgColor>
      </ListStyle>
    </Style>
    <Placemark>
      <name>渋谷駅</name>
      <Point>
        <coordinates>139.7023000573202,35.65781328069085,0</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>テストパス</name>
      <LineString>
        <tessellate>1</tessellate>
        <coordinates>
139.7006464329127,35.65871845410054,0 139.7017395889934,35.6588309535274,0 139.7026112459783,35.65740413872246,0 139.7035380753046,35.65758712935635,0 </coordinates>
      </LineString>
    </Placemark>
    <Placemark>
      <name>テストポリゴン</name>
      <Polygon>
        <extrude>1</extrude>
        <tessellate>1</tessellate>
        <altitudeMode>relativeToGround</altitudeMode>
        <outerBoundaryIs>
          <LinearRing>
            <coordinates>
139.7008640844367,35.65810184520592,99.99999999999999 139.7009208399258,35.65731706000773,99.99999999999999 139.7018203729816,35.65769644469624,99.99999999999999 139.7008640844367,35.65810184520592,99.99999999999999 </coordinates>
          </LinearRing>
        </outerBoundaryIs>
      </Polygon>
    </Placemark>
  </Folder>
</Document>
</kml>

上記の例は、プレイスマークやパス、ポリゴンの基本データをフォルダに入れてコンテンツを隠した状態です。これまでと同様に、<Style>以下の孫要素である<listItemType>の設定を、今度はcheckHideChildrenに設定するだけで、</Folder>までの間のコンテンツが対象になります。隠すといってもソースを見れば一目瞭然なので、たとえばゲームブック的な謎解きコンテンツを作る場合のネタバレを防ぐ目的には使えません。

余談ですが、そういったコンテンツをつくる場合にはKMLのみでの実現は難しいため、Flashを利用して正しい解答をすると次のシーンへのKMLを生成するプログラムを作成するか、もしくは次に紹介するリージョン設定とネットワークリンク、PHP + MySQLなどを組み合わせ、ある領域に入ってから更新をかけ、合致するデータがDBにあればPHPがKMLを生成して答えを返すといったテクニックが必要です。

非常に小技ですが、このあと紹介いたします「フォルダアイコンをカスタマイズする」をこれに応用することで、一見するとただのプレイスマーク、けれど実は隠しフォルダといった偽装を行うことで、コンテンツ隠しを高度化も可能です。

図3 隠しフォルダを開いてみた
図3 隠しフォルダを開いてみた

プレイスマークの管理 - Regionタグを使う

プレイスマークを整理するにあたり、高度で、標準装備されているレイヤでも用いられている機能がRegionタグです。また、現在Google Earth上で簡単に作ることもできないため、厳格なタグの理解が求められる管理手法となります。

Regionタグは複数の子・孫要素を持っており、パラメータの指定にも一定のルールが存在しています。Regionタグを使えば、標準装備のレイヤのように、高度によってプレイスマークの表示・非表示を管理することが可能となったり、また、指定範囲ないに入った時にだけ、プレイスマークを表示・非表示にすることが可能となります。まずは、領域外になると消えるプレイスマークのサンプルKMLを見てみましょう。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
<Document>
  <name>region_test</name>
  <open>1</open>
  <Region>
    <LatLonAltBox>
      <north>36.25</north>
      <south>34.86</south>
      <east>140.97</east>
      <west>139.02</west>
      <minAltitude>3000</minAltitude>
      <maxAltitude>5000</maxAltitude>
    </LatLonAltBox>
    <Lod>
      <minLodPixels>0</minLodPixels>
      <maxLodPixels>-1</maxLodPixels>
      <minFadeExtent>0</minFadeExtent>
      <maxFadeExtent>0</maxFadeExtent>
    </Lod>
  </Region>
  <Placemark>
    <name>消えるプレイスマーク</name>
    <LookAt>
      <longitude>174.9732008811258</longitude>
      <latitude>45.1890724369413</latitude>
      <altitude>0</altitude>
      <range>2440959.427760235</range>
      <tilt>0</tilt>
      <heading>21.2361722005395</heading>
      <altitudeMode>relativeToGround</altitudeMode>
    </LookAt>
    <Point>
      <coordinates>175.4996537251636,39.10150546779765,0</coordinates>
    </Point>
  </Placemark>
</Document>
</kml>

このサンプルは、<Region>でリージョン設定を施し、同一レベル(フォルダ内や、<Document>内)のコンテンツに影響を与えているものです。プレイスマーク自体はこの領域よりも外側に配置されています。

領域は<LatLonAltBox>の中の四隅のポイントがそれで、この領域がGoogle Earthの画面外へフレームアウトすると、プレイスマークが消滅します。通常は、リージョンで設定した領域内にコンテンツを配置するわけなのですが、領域外であっても同一フォルダ内では影響があります。これを利用して、プレイスマークの表示非表示をコントロールするわけです。また、同一フォルダや<Document>タグ内であれば、その効果が影響を受けるので、それを利用して、<Document>タグを区切りとし、いくつものプレイスマークを同一レベルでありながら、違うリージョン管理を施すことも可能です。

また、<Lod>はこの領域に対するオプション設定で、特に何も制限を設けない場合には、サンプル例にあるように、デフォルトの値を設定しておきます。Lodの設定は以下の内容に基づきます。

KML 意味 デフォルト値
<minLodPixels> 宇宙から見て、コンテンツが表示されるピクセルサイズ。 <minFadeExtent>より値が小さいことが要求されます。 0
<maxLodPixels> 宇宙から見て、コンテンツが非表示になるピクセルサイズ。 <maxFadeExtent>より値が大きいことが用久されます。 -1
<minFadeExtent> フェードインするピクセルサイズ。 この値に達すると完全にフェードインとなります。 0
<maxFadeExtent> フェードアウトするピクセルサイズ。この値に達すると完全にフェードアウトとなります。 0

※数値の指定方法は、領域サイズをピクセルで指定

領域のサイズはピクセルで指定するということなのですが、これは、ズームイン・ズームアウトすることで、画面に対して拡大・縮小した際のサイズを指します。小さなリージョン設定の場合、<minLodPixels>の値が大きいとなかなか表示されないことになります。その場合に<maxLodPixels>の値が小さいと、すぐに非表示されてしまうことになります(リージョン領域の設定の時点でそれらは決まってしまいます⁠⁠。

また、デフォルトの値の場合、コンテンツは表示され続けることとなり、その場合には領域が画面外に達した段階でコンテンツが非表示という挙動となります。また、<minLodPixels>の値は、<maxLodPixels>の値よりも小さなピクセルサイズを指定することとなります。たとえば、ズームインしていく時に一定時点で現れ、一定時点で消える典型例の場合には、以下のようになります。

<minLodPixels>512</minLodPixels>
<maxLodPixels>1024</maxLodPixels>
<minFadeExtent>256</minFadeExtent>
<maxFadeExtent>1280</maxFadeExtent>

256ピクセルずつで区切って、徐々に表示し、徐々に消えるパターン例になります。これにデフォルトの値などを組み合わせることで、3種類のパターンが実現します。

  1. ある値にズームするまで徐々に表示し、それからは常に表示する
  2. 最初から表示状態であるある値に達するまでの間徐々に非表示となる
  3. 一定時点で表示、一定時点で非表示となる

あとは、これらタグの組み合わせで数値に矛盾が生じないように気をつけて、作成することとなります。

また、高さでプレイスマークの表示・非表示をコントロールしたい方もいるかもしれませんが、ユーザによって画面解像度が異なるなどの環境的な理由から、具体的にどの高さで目標となるピクセルサイズになるのかを計算をしなければならず、簡単ではありません。高さでリージョン設定を施したい方は、少しずつ数値を変更して、丁度良い設定を見つける必要性があるでしょう。

図4 リージョン設定を施したプレイスマーク(消える前)
図4 リージョン設定を施したプレイスマーク(消える前)
図5 リージョン設定を施したプレイスマーク(消えた後)
図5 リージョン設定を施したプレイスマーク(消えた後)

静止画ではなかなかおわかりにならないかもしれませんが、図4において、日本列島側に4つのポイントがあります。これが、Region設定領域でで設定した4点を明示的にしたものです(実際にはRegion領域は設定をしてもこのように見えるわけではありません⁠⁠。そして、ズームすることでRegion設定領域が画面外に移動しアウトした段階で、図5のようにプレイスマークが消滅します。 Region設定は非常に便利な反面、設定が非常に面倒な弱点がありますが、領域外になると消える、もしくは領域内で設定した解像度に達すると消える・表示されるというのが基本的なRegionの設定です。駆使できるようになると、コンテンツの表現力はぐっと高まることになるでしょう。

アイコンのカスタマイズ

アイコンのカスタマイズは、実用上は対して利便性に貢献するものではありません。ですが、標準的なアイコンでは表現できないものもあることでしょう。よりユーザビリティあふれるコンテンツに仕上げたい方にお勧めの機能です。また、ネットワークリンクなどのように更新中のアニメーションも指定することが可能となっています。それでは、単純なフォルダのアイコンをカスタムアイコンに変更したものをみてみましょう。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
  <name>ダブル</name>
  <open>1</open>
  <Document>
    <name>カスタムアイコンフォルダ1</name>
    <styleUrl>#custom_folder</styleUrl>
    <Style id="custom_folder">
      <ListStyle>
        <ItemIcon>
          <href>http://maps.google.com/mapfiles/kml/pal3/icon47.png</href>
        </ItemIcon>
      </ListStyle>
    </Style>
    <Placemark>
      <name>テスト2</name>
      <Point>
        <coordinates>138.006557614052,35.98778125801074,0</coordinates>
      </Point>
    </Placemark>
  </Document>
  <Document>
    <name>カスタムアイコンフォルダ2</name>
    <styleUrl>#custom_folder2</styleUrl>
    <Style id="custom_folder2">
      <ListStyle>
        <ItemIcon>
          <href>http://maps.google.com/mapfiles/kml/pal3/icon46.png</href>
        </ItemIcon>
      </ListStyle>
    </Style>
    <Placemark>
      <name>テスト</name>
      <Point>
        <coordinates>138.0000000000001,36,0</coordinates>
      </Point>
    </Placemark>
  </Document>
</kml>

上記の例はきわめてシンプルなカスタムアイコンのフォルダを2つ並べた様子です。見てわかるように、実はこのKMLには<Folder>タグがありません。そのかわり、通常一つだけ存在している<Document>タグが2つあります。これがフォルダの区切りとなっています。

つまり、<Document>のタグの範囲内が<Folder>の代わりをなしており、それらを<Style>および<styleUrl>で設定を呼び出しているというKMLです。<Style>のみではうまく動きません。

ただし、<Style>の設定は一つでも可能で、呼び出す側の<styleUrl>が同じものをさしていれば、2つ目のカスタムアイコンフォルダの中にある<Style>は必要ありません。なお、呼び出しにはIDを利用しますので、<Style>にはID名、そして、呼び出し側は、#IDを使用します。おなじKML内では、IDは重複しないように気をつけて設定してください。

なお、<href>で指定するアイコンはURLだけでなく、KMZにした時のフォルダ構造から考えた相対パス(例:img/icon.png)でもかまいません。

図6 カスタムアイコンを施したフォルダ
図6 カスタムアイコンを施したフォルダ

まとめ

いかがでしたでしょうか? これらプレイスマークやオーバーレイといったコンテンツの管理術の基本です。これらは、雑然と作成したコンテンツを整理し、そしてユーザにとって使いやすい形で提供するのに必須な、地味ながらもコンテンツ作成では避けられない要素です。

これらの設定を施したスクリーンショットを見てみましょう。このサンプルはKMZ形式で提供しますので、再度、中身を見ていただき、自作コンテンツの管理術のひとつとして、取り入れていただければ幸いです。

おすすめ記事

記事・ニュース一覧