- Home ›
- Google Maps API入門 ›
- 外部ファイルの読み込み(GDownloadUrl) ›
- HERE
XMLファイルの取得
次はXML形式のファイルを用意し、ダウンロードして利用してみます。次のようなXMLファイルを用意しました。
<?xml version="1.0" encoding="UTF-8" ?> <markers> <marker> <lat>41.796864</lat> <lng>140.756965</lng> <name>五稜郭</name> </marker> <marker> <lat>41.766711</lat> <lng>140.717783</lng> <name>赤レンガ倉庫</name> </marker> <marker> <lat>41.772596</lat> <lng>140.725261</lng> <name>函館朝市</name> </marker> </markers>
まずは読み込んだデータをノードに分解します。Goolge Maps APIで用意されているGXml.parseメソッドを使います。
GXml.parse(xmltext:String)
指定された文字列を XML テキストとして解析し、DOM 表現を返します。ブラウ ザが XML 解析をネイティブでサポートしない場合、これは空の DIV 要素の DOM ノードを返します。 戻り値: Node
XML形式の文字列データを引数として指定すると、DOMオブジェクトに変換したものを取得できます。
function createMap(xmldata, statusCode){ var xml = GXml.parse(xmldata); }
今回のデータでは、1つの地点に関する情報をmarkerノードとして記述しています。そこでDOMオブジェクトからmarkerノードの集合を取得します。
function createMap(xmldata, statusCode){ var xml = GXml.parse(xmldata); var markers = xml.documentElement.getElementsByTagName("marker"); }
それぞれのmarkerノードにはlatノード、lngノード、nameノードが含まれています。
function createMap(xmldata, statusCode){ var xml = GXml.parse(xmldata); var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var lats = markers[i].getElementsByTagName("lat"); var lngs = markers[i].getElementsByTagName("lng"); var names = markers[i].getElementsByTagName("name"); } }
各ノードからテキストを取得するにはGoolge Maps APIで用意されているGXml.valueメソッドを使って取得できます。
GXml.value(xmlnode:Node)
DOM 表現で指定された XML ドキュメント フラグメントのテキスト値 (つまり、 プレーン テキストのコンテンツのみ) を返します。 戻り値: String
具体的には次のように記述します。
function createMap(xmldata, statusCode){ var xml = GXml.parse(xmldata); var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var lats = markers[i].getElementsByTagName("lat"); var lngs = markers[i].getElementsByTagName("lng"); var names = markers[i].getElementsByTagName("name"); var lat = parseFloat(GXml.value(lats[0])); var lng = parseFloat(GXml.value(lngs[0])); var name = GXml.value(names[0]); } }
後は取得した座標や名称に応じて必要な処理を行います。
サンプルプログラム
では試してみます。
var map; function initialize() { if (GBrowserIsCompatible()) { map = new GMap2(document.getElementById("map_canvas")); map.setCenter(new GLatLng(41.782737,140.738897), 13); GEvent.addListener(map, "click", clickAction); } } function downloadData(){ GDownloadUrl("data.xml", function dispData(data, statusCode){ var xml = GXml.parse(data); var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var lats = markers[i].getElementsByTagName("lat"); var lngs = markers[i].getElementsByTagName("lng"); var names = markers[i].getElementsByTagName("name"); var lat = parseFloat(GXml.value(lats[0])); var lng = parseFloat(GXml.value(lngs[0])); var name = GXml.value(names[0]); map.addOverlay(createMarker(lat, lng, name)); } }); } function createMarker(lat, lng, name) { var marker = new GMarker(new GLatLng(lat, lng)); var html = "<p>" + name + "</p>"; GEvent.addListener(marker, "click", function(){ marker.openInfoWindowHtml(html); }); return marker; }
<!DOCTYPE html "-//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"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <title>サンプル:XMLファイルの取得</title> <script src="http://maps.google.com/maps?file=api&v=2&key=(key)&sensor=false" type="text/javascript" charset="utf-8"></script> <script src="./js/code3_1.js" type="text/javascript"></script> </head> <body onload="initialize()" onunload="GUnload()"> <div id="map_canvas" style="width: 400px; height: 400px"></div> <form> <p> <input type="button" id="btn" value="ダウンロード" onclick="downloadData()" /> </p> </form> </body> </html>
<?xml version="1.0" encoding="UTF-8" ?> <markers> <marker> <lat>41.796864</lat> <lng>140.756965</lng> <name>五稜郭</name> </marker> <marker> <lat>41.766711</lat> <lng>140.717783</lng> <name>赤レンガ倉庫</name> </marker> <marker> <lat>41.772596</lat> <lng>140.725261</lng> <name>函館朝市</name> </marker> </markers>
ではブラウザで上記のURLを見てみます。
地図下の「ダウンロード」ボタンを押すと、サーバからXMLファイルを取得し、ファイルに書かれていた3つの地点にマーカーを設置します。
マーカーをクリックすると、その地点の名称が記載された情報ウィンドウを表示します。
( Written by Tatsuo Ikura )