ここからは早速サイトに地図を表示する方法を紹介する。ここでお決まりのコードブロックが2つ出てくる。最初のブロックはPHPクラスのインクルード、gmapsオブジェクトの生成、Google Maps APIキーの設定を行う。2番目のブロックでは、生成したgmapsオブジェクトの各メソッドを呼び出して必要なHTMLコードおよびJavaScriptをHTMLページに配置する。特に興味深いと思われるのが、addMarkerByAddressメソッドを呼び出す部分だ。このコードを変更するなら、この部分だけでいいだろう。
# cd /var/www/html
# mkdir gmaptest
# chown root.apache gmaptest
# chmod +s gmaptest
# cd gmaptest
# vi index.php
<?php
require('GoogleMapAPI.class.php');
$map = new GoogleMapAPI('map');
$map->setAPIKey('........INSERT YOUR KEY HERE.......');
$map->addMarkerByAddress('eiffel tower, paris','Eiffel Tower','<b>One fine Sunday...</b>');
?>
<html>
<head>
<?php $map->printHeaderJS(); ?>
<?php $map->printMapJS(); ?>
</head>
<body onload="onLoad()">
<table border=1>
<tr><td>
<?php $map->printMap(); ?>
</td><td>
<?php $map->printSidebar(); ?>
</td></tr>
</table>
</body>
</html>
|
| エッフェル塔周辺の地図 |
GoogleMapAPIオブジェクトには、ほかにも便利なメソッドが数多くある。たとえばsetDSNメソッドでは、ジオコーディング(緯度経度情報の取得処理)情報のキャッシュに使われるリレーショナルデータベースの接続情報が得られる。なお、ジオコードのキャッシュを利用するにはPEAR::DBパッケージをインストールしておく必要がある。ジオコーディング・クエリの利用頻度と1日あたりの最大件数に対するGoogleの制限は非常に緩いが、同じ住所について何度も問い合わせるのであれば結果をキャッシュしておいたほうがよいだろう。
setLookupServiceを使えば、別のプロバイダを選択してジオコードの検索を行うことができる。対応プロバイダにはYahoo!も含まれている。また、getGeocodeを使えば、地図に影響を与えずにジオコードを検索することができ、検索に成功した場合は指定した住所の緯度と経度が返ってくる。さらに、自分の利用したジオコード情報をputCacheによってデータベースのキャッシュに追加したり、geoGetCoordsでキャッシュを無視して検索を行ったりすることもできる。
Googleマップのサイズ変更には、setWidthとsetHeightを使う。地図の表示形態を変えるメソッドとしては、地図の移動と拡大/縮小を無効にするdisableMapControls、航空写真および街路表示ボタンを非表示にするdisableTypeControls、すべてのマーカーのタイトルが表示されるサイドバーを隠すdisableSidebar、ルート案内の表示をオフにするdisableDirections、すべてのマーカーを画面内に表示するための自動ズームを無効にするdisableZoomEncompassがある。また、setMapTypeメソッドには、使用する地図の表示タイプを表す文字列(satellite、hybrid、mapのいずれか)を指定する。Googleマップ表示時のさまざまな要素を無効にできるメソッドはほかにもたくさんあるので、どんな設定が可能なのか、またその結果どのような表示になるのかを確認したうえで表示方法を決めるとよい。
地図の拡大/縮小レベルを設定するメソッド(setZoomLevel)や最初の表示位置を設定するメソッド(adjustCenterCoords)もある。こうした位置決めに関するメソッドは、主としてマーカーを地図に追加していない場合に重要になる。マーカーを追加するメソッドとしては、先ほど紹介したaddMarkerByAddress以外にも、緯度と経度を指定してマーカーを追加するaddMarkerByCoordsが用意されている。住所あるいは緯度と経度の組を指定して地図上の2つの地点を線で結ぶには、それぞれaddPolyLineByAddress、addPolyLineByCoordsが使える。地図に表示されるマーカーのイメージを変えたければ、すべてのマーカーを変更するsetMarkerIconか個々のマーカーに作用するaddMarkerIconが使える。
