Google Maps API のデータをサーバ側で XML として扱うことを考えてみる。まずは以下のような XML ファイルを用意する。
<?xml version="1.0" encoding="UTF-8"?>
<markers>
<marker
lng="-121.9485855102539" lat="37.318707484418496" <font color="blue">← ここは、</font><b><font color="orange">経度</font><font color="blue">・</font><font color="red">緯度</font></b><font color="blue">の順で入る</font>
icon="/yas/images/icon_mexican.png" <font color="blue">← アイコン画像へのルートからのパス + ファイル名 (https:// は、JavaScript 中の最初に記述済み)</font>
name="Chevys Winchester" <font color="blue">← 吹き出し中の一番上に表示される、マーカーの名前</font>
link="https://www.chevys.com/" <font color="blue">← マーカーの名前をクリックすると表示されるウェブページ</font>
address1="550 S. Winchester" <font color="blue">← マーカーの住所</font>
address2=" San Jose, CA 95128" <font color="blue">← マーカーの住所</font>
phone="(408) 241-0158" <font color="blue">← 電話番号</font>
/>
<!-- 以下、上と同じデータの繰り返し。必要なだけ増やす。-->
</markers>
このデータを読み込んでブラウザで表示 (または JavaScript で処理) するには、PHP では以下のようになる。
<?php
// 変数の初期化
$XML_HEADER = '<?xml version="1.0" encoding="UTF-8"?>';
$HOME_DIR = '/home/yourname'; // XMLファイル
$XML_FILE = '/www/perltips/gmap.xml';
$output = ''; // 出力バッファ
$text = ''; // テキストバッファ
init();
//テキストノードの値
function characters($parser, $text) {
// for example convert from UTF-8 to EUC-JP
// $text = mb_convert_encoding($text, "EUC-JP", "UTF-8");
}
//要素の開始
function startElement($parser, $name, $attr) {
global $output;
if($name == 'marker') {
// 属性の取得
$lng = $attr['lng' ];
$lat = $attr['lat' ];
$icon = $attr['icon' ];
$name = $attr['name' ];
$link = $attr['link' ];
$address1 = $attr['address1'];
$address2 = $attr['address2'];
$phone = $attr['phone' ];
$city = $attr['comment' ];
$output .= "\t<marker"
. "\t\tlng = \"$lng\" lat = \"$lat\""
. "\t\ticon = \"$ICON_DEFAULT\""
. "\t\tname = \"$name\""
. "\t\tlink = \"$link\""
. "\t\taddress1 = \"$address1\""
. "\t\taddress2 = \"$address2\""
. "\t\tphone = \"$phone\""
. "\t\tcomment = \"$comment\""
. "\\t/>";
}
}
//要素の終了
function endElement($parser, $name) {
global $output;
if($name == 'markers') {
// XML データを作成
$output = $XML_HEADER
. "<markers>\
"
. $output
. "</markers>\
";
header('Content-type: text/xml');
print $output;
}
}
function init() {
global $HOME_DIR, $XML_FILE;
// XMLパーサー作成 ("UTF-8")
$xml_parser = xml_parser_create('UTF-8');
// 大文字変換を行わない
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);
// start および end 要素のハンドラを設定する
xml_set_element_handler($xml_parser, 'startElement', 'endElement');
// 文字データハンドラを設定する
xml_set_character_data_handler($xml_parser, 'characters');
$fp = fopen("$HOME_DIR$XML_FILE", 'r')
or die("cannot open an XML file: $HOME_DIR$XML_FILE");
while ($data = fread($fp, 4096)) {
// XMLパース処理
if (!xml_parse($xml_parser, $data, feof($fp))) {
// パースエラー処理
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
// XMLパーサの開放
xml_parser_free($xml_parser);
}
?>
mozilla.org の
AJAX: Getting Started にあるように、PHP から吐き出す XML データを
JavaScript で扱う場合は以下の header('Content-type: text/xml'); 行が重要である。
<?php
//要素の終了
function endElement($parser, $name) {
...
header('Content-type: text/xml');
print $output;
...
}
?>
トラックバック URL:
https://perltips.twinkle.cc/trackback/23