google maps初心者です。
google maps でのdownloadUrlで不明なところあります。
下記サイトのプログラムを理解しようとしています。
https://developers.google.com/maps/articles/phpsqlajax_v3?hl=ja
表題
Using PHP/MySQL with Google Maps
Ben Appleton, Google Geo Team
With contributions from Lary Stucker, Maps API Developer
April 2007
(9年前の記事なので、mysql_select_dbなど現在使用されていないものがありますが、Google MapsでのPHP/MySQL使用方法の概念を理解する。この種の完成された説明記事はこれしかない。との理由でこの記事をベースにGoogle MapsでのPHP/MySQL使用方法の概念を理解しようと務めています。)
下記で「あ」「い」のdownloadUrlの関係は下記でいいのでしょうか。
■「い」関数の変数【url, callback】がそれぞれ「あ」関数の【"phpsqlajax_genxml.php", function(data):~「え」あたり迄?】に対応している。
■「い」関数の「う」以下は「あ」関数に明示されていないが、「い」関数で定義済なので、「あ」関数において「う」以下は機能している。
敢えて、「あ」関数の文末(「え」あたり迄?)以降に「う」以下を記載しても同じ意味を持ち、結果は変わらない。
※「あ」関数の文末(「え」あたり迄?)がよくわかりません。
});
}
などが沢山あり、容易に文末を見分ける方法あるでしょうか。
※ 「あ」関数の前に「い」関数を記載しても結果はかわらないのでしょうか。
<!DOCTYPE html > <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <title>PHP/MySQL & Google Maps Example</title> <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY" type="text/javascript"></script> <script type="text/javascript"> //<![CDATA[ /* 質問と関係ない箇所なのでコメントアウトします。 var customIcons = { restaurant: { icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png' }, bar: { icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png' } }; */ function load() { var map = new google.maps.Map(document.getElementById("map"), { center: new google.maps.LatLng(47.6145, -122.3418), zoom: 13, mapTypeId: 'roadmap' }); var infoWindow = new google.maps.InfoWindow; // Change this depending on the name of your PHP file downloadUrl("phpsqlajax_genxml.php", function(data) { //・・あ var xml = data.responseXML; var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var name = markers[i].getAttribute("name"); var address = markers[i].getAttribute("address"); var type = markers[i].getAttribute("type"); var point = new google.maps.LatLng( parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))); var html = "<b>" + name + "</b> <br/>" + address; var icon = customIcons[type] || {}; var marker = new google.maps.Marker({ map: map, position: point, icon: icon.icon }); bindInfoWindow(marker, map, infoWindow, html); } //・・え }); } /* 質問と関係ない箇所なのでコメントアウトします。 function bindInfoWindow(marker, map, infoWindow, html) { google.maps.event.addListener(marker, 'click', function() { infoWindow.setContent(html); infoWindow.open(map, marker); }); } */ function downloadUrl(url, callback) { //・・い var request = window.ActiveXObject ? //・・う new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest; request.onreadystatechange = function() { if (request.readyState == 4) { request.onreadystatechange = doNothing; callback(request, request.status); } }; request.open('GET', url, true); request.send(null); } function doNothing() {} //]]> </script> </head> <body onload="load()"> <div id="map" style="width: 500px; height: 300px"></div> </body> </html>
//phpsqlajax_genxml.php <?php require("phpsqlajax_dbinfo.php"); // Start XML file, create parent node $dom = new DOMDocument("1.0"); $node = $dom->createElement("markers"); $parnode = $dom->appendChild($node); // Opens a connection to a MySQL server $connection=mysql_connect ('localhost', $username, $password); if (!$connection) { die('Not connected : ' . mysql_error());} // Set the active MySQL database $db_selected = mysql_select_db($database, $connection); if (!$db_selected) { die ('Can\'t use db : ' . mysql_error()); } // Select all the rows in the markers table $query = "SELECT * FROM markers WHERE 1"; $result = mysql_query($query); if (!$result) { die('Invalid query: ' . mysql_error()); } header("Content-type: text/xml"); // Iterate through the rows, adding XML nodes for each while ($row = @mysql_fetch_assoc($result)){ // ADD TO XML DOCUMENT NODE $node = $dom->createElement("marker"); $newnode = $parnode->appendChild($node); $newnode->setAttribute("name",$row['name']); $newnode->setAttribute("address", $row['address']); $newnode->setAttribute("lat", $row['lat']); $newnode->setAttribute("lng", $row['lng']); $newnode->setAttribute("type", $row['type']); } echo $dom->saveXML(); ?>
<追記質問>
kei344さん、コメントありがとうございます。
ここに、追記させていただきます。
kei344さんのサンプルコード内の"phpsqlajax_genxml.php"を"ph"に短縮し見やすくし、また、比べ易くするため下記の様に書き直してみました。(段落はムシしてます)
データの流れは下記でいいものでしょうか。
(的を得ないことを言っていると思いますが、初心者に免じてお許しください)
①「い」関数の引数「url」に、
値「 "ph"」が代入され、「あ」関数を構成した。
②「い」関数の引数(である関数)
「callback ) {window.setTimeout( function() {callback( url + 'を受け取った!' );} , 1000 );}」
に関数「 function( data ) {console.log( data ); }」が代入され、「あ」関数を構成した。
③「い」関数の引数(である関数)
「callback ) {window.setTimeout( function() {callback( url + 'を受け取った!' );} , 1000 );}」の返り値、つまり→(「phを受け取った」)が、
「あ」関数の「 function( data ) {console.log( data ); }」のプロパティに保持され、「console.log( data )」により、コンソール画面に「phを受け取った」が表示された。
load(); //「あ」関数(downloadUrl以降) function load() { downloadUrl( "ph", function( data ) {console.log( data ); } ); } //「い」関数 function downloadUrl( url, callback ) {window.setTimeout( function() {callback( url + 'を受け取った!' );} , 1000 );}
回答1件
あなたの回答
tips
プレビュー