地図蔵 ▷ 2012年までの記事「Re: MySQL + PHP + Google Maps API 復習」

Re: MySQL + PHP + Google Maps API 復習

(2008年3月 8日)

MySQL データベースに php でアクセスして Google マップを作る方法を書き直し再録します。ただし、以下の例はレンタルサーバーがロリポップのケースです。お使いの環境によって多少変わるかもしれないことをご了承下さい。

今回は、例としてこのような地図を作ります(2012年、V3に更新)。

・まず、phpMyAdmin で MySQL にアクセス。

mysql

・ひとつテーブルを設けます。

sql

・このフィールドに、以下を記述。例として、テーブル名を「MLB」とします。

CREATE TABLE MLB (
id int(11) NOT NULL auto_increment,
stadium varchar(255) NOT NULL default '',
lat decimal(10,6) NOT NULL default '0.000000',
lng decimal(10,6) NOT NULL default '0.000000',
category varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
PRIMARY KEY  (id)
) TYPE=MyISAM;

・これは、「MLB」テーブルに6つのフィールド(すなわち "id", "stadium", "lat", "lng", "category", "name")を設けるという意味です。用途によって、例えば「telephone」「address」などといったフィールドを加えればいいわけです。

そして、「追加」タブから入力していきます。「id」フィールドは自動的にナンバーが付与されますから空白で構いません。

mesa

別の方法として、既存のデータからインポートも可能です。既存データをコピー&ペーストし、エディタで置換え(各項目をセミコロン『;』で区切っています)、次のようなテキストファイルを作っておきます(フィールド順に)。

1;Oriole Park at Camden Yards;39.284091;-76.621528;ALE;ボルティモア・オリオールズ
2;Skydome;43.641534;-79.389138;ALE;トロント・ブルージェイズ
3;Tropicana Field;27.768336;-82.653387;ALE;タンパベイ・デビルレイズ
4;Fenway Park;42.346675;-71.097089;ALE;ボストン・レッドソックス
5;Yankee Stadium;40.827011;-73.927485;ALE;ニューヨーク・ヤンキース
......

add

例としてデスクトップに「import.txt」ファイルを作りました。これを実行します。

import

そうして「表示」タブをクリックすると、次のように出来上がっています。

mesa2

次にPHPファイルを2種作ります

各ファイルの保存エンコード形式はUTF-8で。まず、MySQL データベースの情報を収納するPHPファイル(例:sql-info.php)。

<?php
$hostname="mysql**.lolipop.jp";
$username="LA********";
$password="******";
$database="LA********";
?>

そして、XML を生成するPHPファイル(例:MLB.php)。※バージョンが php 5 の場合

<?php
require("sql-info.php"); //  データベース情報ファイルを要する
// 以下、XML 生成
$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node);
// 以下、MySQL への接続
$connection=mysql_connect ($hostname, $username, $password);
if (!$connection) {
die('Not connected : ' . mysql_error());
}
$db_selected = mysql_select_db($database, $connection);
mysql_set_charset('utf8');
if (!$db_selected) {
die ('Can\'t use db : ' . mysql_error());
}
// 以下、「MLB」テーブルからフィールド選択
$query = "SELECT * FROM MLB WHERE 1"; // 場合によりコマンドを応用
$result = mysql_query($query);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
header("Content-type: text/xml");
// 以下、フィールドの値をXML へ渡す
while ($row = @mysql_fetch_assoc($result)){
$node = $dom->createElement("marker");
$newnode = $parnode->appendchild($node);
$newnode->setattribute("stadium", $row['stadium']);
$newnode->setattribute("lat", $row['lat']);
$newnode->setattribute("lng", $row['lng']);
$newnode->setattribute("category", $row['category']);
$newnode->setattribute("name", $row['name']);
}
echo $dom->saveXML();
?>

応用例: $query = "SELECT....の行を、例えば

$query = "SELECT * FROM MLB WHERE 1 ORDER BY stadium LIMIT 0 , 20";

と書けば、stadium のABC順に並べて最大20件まで表示します。

最後に、PHP が生成した XML を読み込む HTML を書きます

category の分類は、「ALE」(=アメリカンリーグ東部地区)、「NLW」(=ナショナルリーグ西部地区)などとしています。

30件程度のポイント数なら単に XML ファイルを作れば充分、MySQL を使う必要性はありませんから、あくまでサンプルということです。

SQL + PHP の他の応用例:検索機能

・以上は、Google マップと PHP/MySQL を使用およびPHP、MySQL、Google マップを使用した店舗検索機能の作成などを参考に、少し書き換えただけです。これらを読んで自助努力・自己完結してください。
用途によりこちらも参考にしてください。