読者です 読者をやめる 読者になる 読者になる

waigani's diary

QGISを中心にFOSS4Gをいじくる

QGISを利用して地図教材(KML)を作ろう その2

QGISを利用して地図教材(KML)を作ろうの続きです。
ここからは題名とはうらはらにQGISは関係なく、テキストエディタでがんばってKMLを編集していきます。
実際は、繰り返す処理は簡単なプログラムを書いてやっていますが、手作業前提で説明します。

ポリゴンの塗り

QGISで書き出したKMLのうち、

  <Placemark>
  ....
  </Placemark>

で囲まれているのが、各国の図形になります。
囲まれているうち、

  <Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>

が描画のための設定になります。これを個別に書き換えていくのですが、ここでは全部の国に一括で描画設定をするとしてしまいましょう。スタイルをファイルの最初に設定して、それを各国の内に反映します。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://earth.google.com/kml/ext/2.2">
<Document>
  <name>国際交流マップ</name>

  <Style id="countryArea">
    <PolyStyle>
      <color>88ff00ff</color>
      <colorMode>normal</colorMode>
      <fill>1</fill>
      <outline>1</outline>
    </PolyStyle>
  </Style>
  ....
</Document>

と最初にスタイルを設定します。はaabbggrrの順ですので注意ください。各内の

  <Style>...</Style>

を消してしまい、

  <styleUrl>#countryArea</styleUrl>

のように書き換えます。の中で設定済みstyleのidを#を付けて指名します。
ここまでで一旦KMLをGoogleEarthで開いていただき、塗りの設定が反映されていることを確認してみてください。

姉妹都市・関係都市間の線

各国の塗りと同じく、描画の設定をファイルの最初に追加しておきます。

  <Style id="sisterCity">
    <LineStyle>
      <color>ffff0000</color>
      <colorMode>normal</colorMode>
      <width>2</width>
    </LineStyle>
    <IconStyle>
      <Icon><href>http://maps.google.com/mapfiles/kml/paddle/blu-stars.png</href></Icon>
    </IconStyle>
  </Style>

姉妹都市旭川市との間に引く線の描画設定と、姉妹都市に置くiconの設定をしています。
次にを追加します。

    <Placemark>
      <name>ブルーミントン市</name>
      <description><![CDATA[1962年(昭和37年)10月11日提携<br><a href="http://en.wikipedia.org/wiki/Bloomington,_Illinois">wikipediaへ</a><br><a href="http://www.city.asahikawa.hokkaido.jp/files/kokusaikouryu/bloomington%20normal%202.html">旭川市国際交流課の姉妹都市・友好都市説明メージへ</a>]]></description>
      <styleUrl>#sisterCity</styleUrl>
      <MultiGeometry>
        <Point>
          <coordinates>-88.9936111111,40.4841666667,5000</coordinates>
        </Point>
        <LineString>
         <tessellate>1</tessellate>
          <altitudeMode>clampToSeaFloor</altitudeMode> 
          <coordinates>
            -88.9936111111,40.4841666667,5000
            142.2154,43.462,5000
          </coordinates>
        </LineString>
      </MultiGeometry>
    </Placemark>
  <description><![CDATA[ ... ]]></description>

内はhtmlを記述出来ますので、各都市の説明を記述してください。クリックした際に表示されます。
各都市の座標はぐぐるなりして、自分で調べましょう。
ここまでを記述しGoogleEarthで表示して、各都市間に線が引かれることを確認してください。

凡例

を利用して常に決まった位置に表示される凡例を作成します。

  <ScreenOverlay>
    <name>凡例</name>
    <Icon>
      <href>index.png</href>
    </Icon>
    <overlayXY x="0" y="0" xunits="fraction" yunits="fraction"/>
    <screenXY x="0" y="0" xunits="fraction" yunits="fraction"/>
    <rotation>0</rotation>
    <size x="0" y="0" xunits="pixels" yunits="pixels"/>
    <visibility>1</visibility>
  </ScreenOverlay>

上記は、位置を左下に固定した例になります。
問題はindex.pngをどうやって用意しようかになります。GIMPというフリーの画像編集・加工ソフトウェアをお勧めしておきます。
詳しい使い方は割愛しますが、それっぽく作るポイントとしては、下記をあげておきます。

背景を透過しておく

新しい画像を適当なピクセル数で作成した後に、メニューから"色"→"色を透明度に"を選択して背景を透明にしてしまいます。

ぼかす

メニューから"ツール"→"テキスト"でテキストを追加したとします。

  • レイヤー一覧から追加したテキストのレイヤーを選択して、メニューから"レイヤー"→"レイヤーの複製"を選択
  • 複製したレイヤーを最初のテキストレイヤーの下に持っていく
  • 複製したレイヤーのテキストを選択して色を白などに変更
  • 複製したレイヤーを選択して、メニューから"フィルター"→"ぼかし"→"ガウスぼかし"等を選択してぼかす

KMZにする

kmlファイルと凡例用の画像ファイルの2ファイルでコンテンツが構成されています。これを1ファイルにまとめましょう。

  • 2ファイルをまとめてzipにする
  • zipファイルの拡張子をkmzに変更する

という手順になります。

その他

をグループ化したいときは、

  <Folder>
    <name>適当に名称を</name>
    <visibility>1</visibility>
    ...
  </Folder>

のように囲んであげましょう。GoogleEarthで表示したときに、

のように階層表示してくれます。

以上です。