GoogleMapsAPIを記事や静的ページで表示する

提供: GeeklogJpWiki

※ 現在では,高機能なGoogleMapsAPIプラグイン(tkgmaps)が公開され,複数ポイント,バルーン自由指定が可能になり,以下のハックをする必要がなくなりました。GoogleMapsAPIプラグインは,Geeklog1.5日本語拡張版パッケージで標準となりましたので,そちらをご利用ください。その場合,以下のハックは不要です。


作者:豆腐屋(Geeklog Japanese 掲示板より)

GoogleMapsAPIを iframe を使用しないで直接記述できます。また, iframe を使う場合でも緯度経度や大きさを引数で指定できるHTMLを設置すると便利です。

目次

準備

緯度・軽度の算出

住所やランドマーク名から経度、緯度を検索します。世界測地系(WGS84)に対応。 日本測地系(TOKYO97)っぽい座標出力、携帯用QRコード出力、Google Earth連携、はてなマップ連携などが行なえます。

Google Maps API

Google Maps API key を次のリンクから取得します。
http://www.google.com/apis/maps/signup.html

header.thtml

変更前:

<body class="js_off" >

変更後:

<body class="js_off" onload="OnloadBody()">
<script type="text/javascript"> function OnloadBody(){ } </script>

静的ページの場合には以上の修正で動作します。

記事の場合には,さらに次の本体ソース2つを修正します。

(記事本文に限ります。冒頭文はjavascriptが干渉するので不可です)

非公開ディレクトリ/system/lib-story.php

変更前:

 $bodytext = str_replace( '{', '&#123;', $bodytext );
 $bodytext = str_replace( '}', '&#125;', $bodytext );

変更後:

 $bodytext = preg_replace('/{([^ \t\r\n}]+)}/','&#123;\\1&#125;',$bodytext);

公開ディレクトリ/admin/story.php

変更前:

 $newbody = str_replace('{','&#123;',$newbody);
 $newbody = str_replace('}','&#125;',$newbody);

変更後:

 $newbody = preg_replace('/{([^ \t\r\n}]+)}/','&#123;\\1&#125;',$newbody);

記事の本文で利用する方法

<script src="http://maps.google.com/maps?file=api&v=2.x&key=@@@@@" type="text/javascript" charset="utf-8"></script>
   <!--// key=@@@@の値は各自のキーを使用してください//-->
   <div id="map" style="padding:0px;"></div>
   <script type="text/javascript">
    //<![CDATA[
    
    var lat = 35.658725884775244; //緯度
    var lng = 139.74541783332825; //経度
    var zoom = 16; //ズーム
    var wid = "400"; //地図の幅
    var hei = "400"; //地図の高さ
    var mar = "0"; //地図の余白
    var title =''; //情報ウィンドウに表示

    var mapstyle = document.getElementById("map").style;
    mapstyle.width = wid + "px";
    mapstyle.height = hei + "px";
    mapstyle.margin = mar + "px";
    
function OnloadBody(){
     var point = new GLatLng(lat,lng);
     var map = new GMap2(document.getElementById("map"));
      map.setCenter( point , zoom );
      map.addControl(new GLargeMapControl());
      map.addControl(new GMapTypeControl());
      map.addControl(new GOverviewMapControl());
      var marker = new GMarker( point );
      map.addOverlay(marker);
      if(title){
      	GEvent.addListener(marker,"click",function(){
      		marker.openInfoWindowHtml(title);});
      }
}
     //]]>
	</script>

事例

記事の本文に地図を設置した例

http://sample.ivywe.jp/article.php/20070505125938570

スタティックページに地図を設置した例

http://www.ivywe.co.jp/staticpages/index.php/access

自動タグで便利な利用法

自動タグ(Autotags)プラグインを利用すると,記事や静的ページに簡素なコードでGoogleMapsを利用できます。

まず,自動タグプラグインをインストールして,googlemapsの名前で自動タグを作成します。 自動タグ本文には,以下の記述を行っておきます。

<script src="http://maps.google.com/maps?file=api&v=2.x&key=@@@@" type="text/javascript" charset="utf-8"></script>    <!--// key=@@@@の値は各自のキーを使用してください//-->

<script type="text/javascript">
    //<![CDATA[
    
    var lat = #1; //緯度
    var lng = #2; //経度
    var zoom = 16; //ズーム
    var wid = "400"; //地図の幅
    var hei = "400"; //地図の高さ
    var mar = "0"; //地図の余白
    var title =''; //情報ウィンドウに表示

    var mapstyle = document.getElementById("map").style;
    mapstyle.width = wid + "px";
    mapstyle.height = hei + "px";
    mapstyle.margin = mar + "px";
    
function OnloadBody(){
     var point = new GLatLng(lat,lng);
     var map = new GMap2(document.getElementById("map"));
      map.setCenter( point , zoom );
      map.addControl(new GLargeMapControl());
      map.addControl(new GMapTypeControl());
      map.addControl(new GOverviewMapControl());
      var marker = new GMarker( point );
      map.addOverlay(marker);
      if(title){
      	GEvent.addListener(marker,"click",function(){
      		marker.openInfoWindowHtml(title);});
      }
}
//]]>
</script>

これで,記事や静的ページには,

[googlemaps:35.12345 139.12345]

のように,簡素なコードを追加するだけでどこにでも貼り付けることが可能です。

個人用ツール