シリーズ第4弾
いつもは、地図とかで使っているGoogle MaGoogle Mps APIだけど、
使い方によっては、色んな事考えられるぞ。という例のメモ
オリジナルの画像や写真とかをGoogle MaGoogle Mps APIを使って表示できるようにする。
参考にしたところ
- Google Maps API を使って大きい画像を表示(前編) —takanory.net
- Google Maps API を使って大きい画像を表示(中編) —takanory.net
- タイルレイヤの作成(GTileLayerインターフェース) – タイルレイヤ – Google Maps入門
- タイルレイヤからオーバーレイを作成(GTileLayerOverlayクラス) – タイルレイヤ – Google Maps入門
- #Tile_Overlays マップ オーバーレイ – Google Maps API – Google Code
- #GTileLayer Google Maps API リファレンス – Google Maps API – Google Code
タイル画像の切り出しについて
タイル1枚は、256*256pxらしい。
FireBugで確認してみた画面↓
- ズームレベル0でタイル1*1枚
- ズームレベル1でタイル2*2枚
- ズームレベル2でタイル4*4枚
- ズームレベル3でタイル8*8枚
ということらしい。
じゃあ、横長や縦長の画像の場合は、どうなるんだ?とも思って実際に試してもみたが、
ズームレベル0だとやはりタイル1枚のみが表示される状態。
ということは、タイル画像を作成するときに、正方形にちょうど収まるように作ってやればいいみたい。
まずは、Sampleを見てみてください。
Fireworksでの作業手順メモ
- タイルの最大サイズを決めて、ファイル作成
(Sampleは、8*8枚、2048*2048pxとした。)
丁度メモリの容量みたいな数字ですね。 - 最大サイズでスライスレイヤー(Webレイヤー)作る
- レイヤーフォルダ分けながら、半分のサイズにしながら、そのサイズの中でセンタリングする。
※レイヤーの名前は、ズームレベルと合わせとくと、わかりやすいかも。 - スクリプトで、
"tiles/"+zoom+"/"+x+"_"+y+".png"とかで画像を読み込ますので、それに合わせて、画像を書き出す。 - いちいちFireworksのWebレイヤーに名前を付けるのがめんどうな時は、
- 一度、Webレイヤーに名前を付けたファイルからコピペする
- もしくはFireworks-ファイル-書き出しのオプションを変更して、Webレイヤーを削除しながら書き出す
画像の切り出しをやってくれるツールもあるみたいです。
実際にオリジナルのマップを作成する場合には、文字を入れたりもするでしょうから、縮尺によって文字サイズを変更したい場合も出るはずです。
ちなみに、Sampleもクレジット表記部分は、ズームレベルによって大きさを変えている
スクリプト
function createCustomTileLayer(){ var dataLayer = new GTileLayer(new GCopyrightCollection(),0,3); //0,3はズームレベルの範囲 dataLayer.getOpacity=CustomTileLayer_getOpacity; dataLayer.isPng=CustomTileLayer_isPng; dataLayer.getTileUrl=CustomTileLayer_getTileUrl; return dataLayer; } var CustomTileLayer_opacity = 1.0; var CustomTileLayer_png = true; var CustomTileLayer_getOpacity = function getOpacity() { return CustomTileLayer_opacity; } var CustomTileLayer_isPng = function getOpacity() { return CustomTileLayer_png; } var CustomTileLayer_getTileUrl = function(tile, zoom) { var x = tile.x; var y = tile.y; return "tiles/"+zoom+"/"+x+"_"+y+".png"; } function createCustomProjection() { var myProjection = G_NORMAL_MAP.getProjection(); myProjection.tileCheckRange = function (tile, zoom, tilesize) { var mapsize = 256*Math.pow(2,zoom); if (tile.y < 0 || tile.y * tilesize >= mapsize) { return false; } if (tile.x < 0 || tile.x * tilesize >= mapsize) { return false; } return true; } return myProjection; } function initialize(){ if(GBrowserIsCompatible()){ var mapCustom = new GMapType([createCustomTileLayer()],createCustomProjection(),"") var map = new GMap2(document.getElementById("gMap"),{mapTypes:[mapCustom]}); map.addControl(new GSmallMapControl()); map.enableDoubleClickZoom(); map.enableScrollWheelZoom(); map.setCenter(new GLatLng(0,0),1); } }
サンプル
スペシャルサンクス
Sampleで使用しているイラストは、高田さんに無理言って借りちゃいました。
ありがとうございます。
プロジェクト管理ツールBacklog(バックログ)の本体、告知サイト、Subversionページのインターフェースデザインも高田さんです。
関連エントリー
- Nishiaki’s Log: Google Maps APIメモ(v2) #1 超基本
- Nishiaki’s Log: Google Maps APIメモ(v2) #2 簡単コントローラーの追加
- Nishiaki’s Log: Google Maps APIメモ(v2) #3 マーカーがクリックされたら情報ウインドウを表示する
- Nishiaki’s Log: Google Maps APIメモ(v2) #4 オリジナルの画像をタイルレイヤーで表示
- Nishiaki’s Log: Google Maps APIメモ(v2) #5 オリジナルのマーカーを追加する(まずは1種類1個だけ)
- Nishiaki’s Log: Google Maps APIメモ(v2) #6 オリジナルマーカー情報をjsonデータで読み込み