Re: MySQL + PHP + Google Maps API 復習

| Category=Google | Comment

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

今回は、例として次のような地図を作ります。

新しいウィンドウで開く

・まず、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);
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();
?>

これにブラウザからアクセスしてみます=MLB.php で XML が生成されました

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

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

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

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

サンプルのマップを新しいウィンドウで開き、ブラウザの「メニュー」から「表示」→「ソース」で見てください。コピー&ペーストするのが楽でしょう。これも保存エンコード形式はUTF-8で。
category ごとにチェックボックスで呼び出します。

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

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

SQL + PHP の他の応用例1:投稿可能な(閲覧者がポイントを加える)マップ
SQL + PHP の他の応用例2:検索機能
SQL + PHP の他の応用例3:特定のフィールドから項目選択

・以上は、Google Code FAQ の方法その1およびGoogle Code FAQ の方法その2を少し書き換えただけです。これらを読んで自助努力・自己完結してください。
用途によりこちらも参考に努力してください。

私はエンジニアでもプログラマでもないシロウトですから、本来ならこういうマニュアルを書くべきでありません。
しかし質問が多いので、書きました。専門家の方から見れば瑕疵がある可能性は否定できません。
それでも質問される文系の方は、作成されているページのリンクなどをなるべく添えてください(でなきゃ答えようがありません)。
シロウトとして分かる範囲でお答えします。分からないものは分かりません。
間違ってもエンジニアやプログラマの人は質問しないでください。困ります。

« [No.78] Valle de Rengo - Merlot    [No.79] Río Alto - Cabernet »