1000以上のルートを、ユーザごとの地図に投影する方法(5) - Google Map上に作成したオーバレイ用のタイル画像を表示


前回エントリで作成したオーバレイ用のタイル画像を
表示するためのJavascriptを作成します。

<script type="text/javascript" charset="utf-8">

function initialize() {

  if (GBrowserIsCompatible()) {
    
    // タイル画像のコピーライトを準備
    var myCopyright = new GCopyrightCollection("(c) ");
    myCopyright.addCopyright(new GCopyright('Demo',
      new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)),
      0,'2008 matoyan'));

    // タイル画像のファイルを、zoom, x, y の3つのパラメータで指定する。
    var tilelayer = new GTileLayer(myCopyright);
    tilelayer.getTileUrl = function(tile, zoom) {
      var url = "mapdir/tile_z"+zoom+"_y"+tile.y+"_x"+tile.x+".png";
      return url;
    };
    // タイル画像はPNG形式
    tilelayer.isPng = function() { return true;};
    // 画像を透過させて、少し地図が見えるように。
    tilelayer.getOpacity = function() { return 0.7; }

    var myTileLayer = new GTileLayerOverlay(tilelayer);
    var map = new GMap2(document.getElementById("map_canvas"));
    var mapzoom=15;
    map.addControl(new GLargeMapControl());
    map.addControl(new GOverviewMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(36.834, 138.93), mapzoom);

    // 地図の準備完了後、オーバーレイとしてタイル画像のレイヤを指定する。
    map.addOverlay(myTileLayer);
  }
}
</script>


★作成した地図はこちら★※前回エントリと同じです。


なお、マップのファイルは、前回エントリの方法で、
すべて同じフォルダ(mapdir)に突っ込んであります。

実装との差分


ルート(GPXファイル)ごとにタイル画像群を生成するために、
実際はmapdirではなく、ルートのIDごとにディレクトリを作成して
ルートごとにタイル画像群を生成します。


こうしておけば、あとで1ユーザが行ったルートを集計するときに
毎回線を引いてタイル画像を生成するのではなく、
そのユーザの行った複数のルートから生成した
タイル画像群を重ね合わせるだけでよくなります。

備考


今の状態だと、画像ファイルがない場合、404 not foundになってしまいます。
動作上は問題ないのですが、気持ち悪い場合は、
(対策1)画像ファイルがない場合用に全タイルファイルを用意する。
(対策2)プログラムを経由して、画像ファイルがない場合は空白ファイルを返答する。
などの対策を取った方がいいと思います。


次は、複数のタイル画像を重ね合わせるための方法です。
そろそろ終わりがみえてきた、、、ような気がします。