« getPoint(): 復習 [No.79] Río Alto - Cabernet »
Re: MySQL + PHP + Google Maps API 復習
MySQL データベースに php でアクセスして Google マップを作る方法を書き直し再録します。ただし、以下の例はレンタルサーバーがロリポップのケースです。お使いの環境によって多少変わるかもしれないことをご了承下さい。
今回は、例として次のような地図を作ります。
・まず、phpMyAdmin で MySQL にアクセス。

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

・このフィールドに、以下を記述。例として、テーブル名を「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」フィールドは自動的にナンバーが付与されますから空白で構いません。

別の方法として、既存のデータからインポートも可能です。既存データをコピー&ペーストし、エディタで置換え(各項目をセミコロン『;』で区切っています)、次のようなテキストファイルを作っておきます(フィールド順に)。
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;ニューヨーク・ヤンキース ......
![]()
例としてデスクトップに「import.txt」ファイルを作りました。これを実行します。

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

次にPHPファイルを2種作ります
各ファイルの保存エンコード形式はUTF-8で。まず、MySQL データベースの情報を収納するPHPファイル(例:sql-info.php)。
<?php $hostname="mysql**.lolipop.jp"; $username="LA********"; $password="******"; $database="LA********"; ?>
そして、XML を生成するPHPファイル(例:MLB.php)。
<?php
require("sql-info.php"); // データベース情報ファイルを要する
// 以下、XML 生成
$doc = domxml_new_doc("1.0");
$node = $doc->create_element("MLB"); // テーブル名「MLB」
$parnode = $doc->append_child($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 = $doc->create_element("marker");
$newnode = $parnode->append_child($node);
$newnode->set_attribute("stadium", $row['stadium']);
$newnode->set_attribute("lat", $row['lat']);
$newnode->set_attribute("lng", $row['lng']);
$newnode->set_attribute("category", $row['category']);
$newnode->set_attribute("name", $row['name']);
}
$xmlfile = $doc->dump_mem();
echo $xmlfile;
?>
これにブラウザからアクセスしてみます=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 ごとにチェックボックスで呼び出します。キモはこの1行
GDownloadUrl("./MLB.php", function(doc) {
category の分類は、「ALE」(=アメリカンリーグ東部地区)、「NLW」(=ナショナルリーグ西部地区)などとしています。
30件程度のポイント数なら単に XML ファイルを作れば充分、MySQL を使う必要性はありませんから、あくまでサンプルということです。
SQL + PHP の他の応用例1:投稿可能な(閲覧者がポイントを加える)マップ
SQL + PHP の他の応用例2:検索機能
SQL + PHP の他の応用例3:特定のフィールドから項目選択
・以上は、Google Code FAQ の方法その1およびGoogle Code FAQ の方法その2を少し書き換えただけです。これらを読んで自助努力・自己完結してください。
用途によりこちらも参考に努力してください。
私はエンジニアでもプログラマでもないシロウトですから、本来ならこういうマニュアルを書くべきでありません。
しかし質問が多いので、書きました。専門家の方から見れば瑕疵がある可能性は否定できません。
それでも質問される文系の方は、作成されているページのリンクなどをなるべく添えてください(でなきゃ答えようがありません)。
シロウトとして分かる範囲でお答えします。分からないものは分かりません。
間違ってもエンジニアやプログラマの人は質問しないでください。困ります。


サンプル本当にありがとうございました。
早速試してみたのですが私の現在の環境がlocalPCにてPHP5でしたので関数が微妙に違うとの事もあり置き換えてみたところ動作しました。
(domxml_new_doc("1.0");をnew DOMDocument("1.0");などに)
しかし、FireFox2では見られたのですがIE7では動作しませんでした。
ただ、これはlocalPCである事が原因だと思いますのでもう少し調べてみます。
サイトの方は恥ずかしながらも是非お見せしたいところなのですがまだ勉強段階でしてサーバーへUPしていないのです。完成しましたらお知らせも兼ねてまた書き込みさせていただきます。
表向きは今回のチェックボックスで選択しMySQLから引っ張ってくるのが理想形だったのですが、今回のエントリーの「応用例3」を拝見しましたところ、このように外部から位置情報が見られないようにするのもセキュリティ上よいのかなぁと思い今はこれをベースにチェックボックスを適用できないか考えております。
もし可能でしたらこちらの分のPHPのソースも拝見できれば。。。なんてワガママな事も考えていたりしますが^^;
こちらのサイトをきっかけにgooglemapAPIやPHPなどに興味を持ち、苦戦しながらも楽しく勉強できています。その事も含めてお忙しいところありがとうございました。
そして、これからもお世話になりますが何卒よろしくお願いいたします。