10分で終わるGoogle Map公開(GoogleMapAPI + PHP + MySQL)
2006年12月26日今更ながら、Google Mapを簡単に作成した時のメモ。
普通はJavaScriptをガリx2書いてやるところなんでしょうが、面倒なのもあってタイトル通り10分でやる方法。
想定環境として、PHPとMySQLがあることが前提条件。
という感じで、メモ。
Google Maps API Keyの取得
まずは、Google Mapを使用するに当たって「Google Maps API キー」を取得する必要があります。
スクリプト側でrefererのURLをチェックしているようなので、公開(作成テスト)するURL(IP)でキーを取得します。
>> Google Maps API Key取得
簡単な英語で書いてありますが、「Sign up for a Google Maps API Key」からAPIキー取得ページへ移動します。
Google Map APIの取得
次に、「GoogleMap API」をダウンロードします。
>> PHP GoogleMapAPI by Monte Ohrt
このページが合わせて、APIのドキュメントにもなっているので、プロパティやメソッドも参照可能。
環境確認
入手した「GoogleMapAPI.class.php」は、内部でPEAR::DBを利用して、MySQLへ座標情報(GEOCODEなど)を保存しています。PEAR::DBを適切にダウンロードして、パスが通るようにしておく必要があります。
(PostgreSQLでもOKだと思いますが、とりあえずMySQLで)
MySQLにGEOCODESテーブルの作成
ここではデータベースも、テーブルも作成できる権限があるものとして想定。
$mysql -p password: mysql> create database geocodes; mysql> CREATE TABLE `GEOCODES` ( mysql> `address` varchar(255) NOT NULL default '', mysql> `lon` float default NULL, mysql> `lat` float default NULL, mysql> PRIMARY KEY (`address`) mysql> ) TYPE=MyISAM;
このgeocode.GEOCODESテーブル内に、座標データが保存されます。
googlemap.phpの作成
GoogleMapAPIのダウンロードが終われば、次のようなPHPを作成します。
<?php /* httpoutput */ mb_http_output('UTF-8'); //スクリプトをEUCで保存する場合のみ指定 /* include */ require('GoogleMapAPI.class.php'); // オブジェクト生成 $Gmap = new GoogleMapAPI('map'); // DB接続設定(PEAR::DB) $Gmap->setDSN('mysql://ユーザー名:パスワード@localhost/データベース名'); //データベース名は'geocodes'で生成 // Google Map Key セット + ギミック(世界で統一されるようなのでdatum指定) $Gmap->setAPIKey('ここにGoogle Maps API Key&datum=wgs84'); // Google Mapレイアウト設定など $Gmap->setWidth(350); //横幅を350pxに $Gmap->setHeight(300); //高さを300pxに $Gmap->zoom = 15; //地図のズームレベル(1~20?) $Gmap->enableOverviewControl(); //地図右下に「オーバービュー」を表示 $Gmap->setInfoWindowTrigger('mouseover'); //マーカーマウスオーバー時にInfoWindowを表示 // 地図マーカーセット(GEOCODEで指定する場合は、addMarkerByCoords()メソッド使用) $Gmap->addMarkerByAddress('621 N 48th St # 6 Lincoln NE 68502','PJ Pizza','<b>PJ Pizza</b>'); $Gmap->addMarkerByAddress('826 P St Lincoln NE 68502','Old Chicago','<b>Old Chicago</b>'); $Gmap->addMarkerByAddress('3457 Holdrege St Lincoln NE 68502',"Valentino's","<b>Valentino's</b>"); // Google Map用ソース $googlemap_headerJS = $Gmap->pringHeaderJS(); // Google Map用HTMLヘッダー $googlemap_printmapJS = $Gmap->printMapJS(); // Google Map描画用JS $googlemap_map = $Gmap->printMap(); // Google Mapの描画 $google_map_sidebar = $Gmap->printSidebar(); // GoogleMap用サイドバーの出力(要らないかも) // HTML出力 print<<<EOF <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"> <head> {$googlemap_headerJS} {$googlemap_printmapJS} <!-- necessary for google maps polyline drawing in IE --> <style type="text/css"> v\:* { behavior:url(#default#VML); } </style> </head> <body onload="onLoad()"> <table border=1> <tr> <td>{$googlemap_map}</td> <td>{$googlemap_sidebar}</td> </tr> </table> </body> </html> EOF; ?>
このGoogleMapAPIは、Smartyでも使用可能。
なかなか便利なので、効率的かも。