Home > WEB | javascript | millon > GoogleMaps にカスタムウィンドウを表示する。

GoogleMaps にカスタムウィンドウを表示する。

ここで書いた記事の転載と、補足

Google Maps API には、InfoWindowという、
地図上にウィンドウを表示するための機能が備わっています。

このウィンドウは地図上に情報を表示する分には、
十分な機能を持っています。

しかしmillon.jpで使用するにあたって、サイトのイメージと
表示されるウィンドウのイメージが若干合わなかったため、
自分でデザインしたウィンドウを表示しました。
g1
google maps のinfowindow
自分でつくったウィンドウ
自分で作ったウィンドウを表示

GoogleMaps は画像やHTML要素を、オーバーレイ要素として
地図上に貼り付けることができます。

その機能を用いて、DIV要素を独自のウィンドウとしてGoogleMaps上に貼り付けます。

実行テスト

カスタムウィンドウの表示のための手順ですが、
まずは地図や、カスタムウィンドウとして表示するDIVを準備しておきます。

HTML:
  1. <div style="position:relative">
  2. <div id="map" style="width:400px;height:400px;">
  3. </div>
  4. <div id="ci_div" style="position:absolute;width:100px;height:100px;border:solid 1px;background-color:#FFF;">カスタムウィンドウです!</div>
  5. </div>

* ピクセル位置でカスタムウィンドウの位置を指定する必要があるため、
一番外側を position="relative"を指定したDIVで囲む必要があります。

GoogleMaps APIで定義されているGOverLayインターフェースを実装したクラスを作成します。
このクラスのインスタンスをaddOverlayすることで、
GoogleMap上にオーバーレイとして貼り付けることができます。

JAVASCRIPT:
  1. // 地図の表示
  2.     map = new GMap2(document.getElementById("map"));
  3.     map.setCenter(new GLatLng(35.67431, 139.69082),13);
  4.  
  5.     // オーバーレイ用のDIV
  6.     var customInfoDIV = document.getElementById("ci_div");
  7.     // GOverlayインターフェースを実装するcustomBoxクラスを作成
  8.     function customBox(){}
  9.     customBox.prototype = new GOverlay();
  10.     customBox.prototype.initialize = function(map){
  11.         // GoogleMap上に定義されているPaneのうち、マーカーと同じ高さに
  12.         // カスタムウィンドウ用のDIVを追加。
  13.         map.getPane(G_MAP_MARKER_PANE).appendChild(customInfoDIV);
  14.         customInfoDIV.style.zIndex = 300000;
  15.     }
  16.     customBox.prototype.remove = function() {
  17.         map.getPane(G_MAP_MARKER_PANE).removeChild(customInfoDIV);
  18.     }
  19.     customBox.prototype.copy = function() {
  20.         return new customBox();
  21.     }
  22.     customBox.prototype.redraw = function(force){}
  23.     // customBoxをオーバーレイとして貼り付ける
  24.     customInfoWindow = new customBox();
  25.     map.addOverlay(customInfoWindow);

GMap2.getPaneでGoogleMaps上で定義されているレイアにアクセスすることができますので、
今回は、マーカーが表示されるレイアと同じ高さにウィンドウが表示されるようにしています。
では、この貼り付けたオーバーレイを操作できる関数を用意して、
InfoWindowのような動きをさせれば完成です。

JAVASCRIPT:
  1. // 指定位置の緯度経度にウィンドウ表示
  2. function openWindowLatLng(msg, lat, lng){
  3.     var marker_pixls = map.fromLatLngToDivPixel(new GLatLng(lat, lng));
  4.     var x = marker_pixls.x ;
  5.     var y = marker_pixls.y ;
  6.     openWindowXY(msg, marker_pixls.x, marker_pixls.y);
  7. }
  8.  
  9. // 指定のピクセル位置にウィンドウ表示
  10. function openWindowXY(msg, x, y){
  11.    map.removeOverlay(customInfoWindow);
  12.    customInfoDIV.style.display = "block";
  13.    customInfoDIV.style.zIndex = 4000000;
  14.    customInfoDIV.style.postion = "absolute";
  15.    customInfoDIV.style.top = y + "px";
  16.    customInfoDIV.style.left = x + "px";
  17.    customInfoDIV.innerHTML = msg;
  18.    map.addOverlay(customInfoWindow);
  19. }
  20.  
  21. // ウィンドウ閉じる
  22. function closeWindow(){
  23.    map.removeOverlay(customInfoWindow);
  24. }

DIVを装飾してウィンドウとし、好きな位置に表示することができるようになります。

*ただし、このウィンドウは地図のスクロールには追従しますが、
拡大率が変わった場合には、ピクセル位置の指定が緯度経度とずれてしまいます。
そのため、ズームのイベント時に再表示する必要があります。

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://parpue.net/web/71/trackback
Listed below are links to weblogs that reference
GoogleMaps にカスタムウィンドウを表示する。 from parpue.net

Home > WEB | javascript | millon > GoogleMaps にカスタムウィンドウを表示する。

リンク
chocolataste-planner
millon

サーチ
Feeds
Meta
blog ranking ブログランキング・にほんブログ村へ
にほんブログ村 テクノラティのお気に入りに追加する

Return to page top