flashcast:フリーで働くITエンジニア集団のブログ: iPhone OS 3.0のSafariでGPS機能を使ったWeb Applicationを作る!(sqlite保存編)の続きです。
前回は表示されている住所の吹き出しの中に、「save」リンクを設け、その住所をSQLiteに保存するようにしましたので、その住所を見るための履歴画面を作ります。
htmlの見た目は極めて単純なものにします。この時点ではかっこよさとかは気にしません。
<!DOCTYPE html PUBLIC "-//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" /> <meta name="viewport" content="width=320px, user-scalable=no" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <title>iPhone GPS Sample</title> </head> <body> <div id="header"> <div id="title">Histories</div> <a href="../sqlite/">back</a> </div> <div id="main"></div> </body> </html>
データを検索して、1件以上あれば、画面上に表示します。
function initialize() { try { db.transaction( function(transaction) { transaction.executeSql("SELECT dat FROM location ORDER BY id DESC", [], setLocations, function(error) { alert("initialize:" + error.message); } ); }, function(error) { alert("initialize:" + error.message); } ); } catch (error) { alert("initialize:" + error.message); } } function setLocations(transaction, resultSet) { var html = ""; for (i = 0; i < resultSet.rows.length; i++) { var address = tonosamart.evalJson(resultSet.rows.item(i).dat); if (address) { html += "<div><p>" + address.Placemark[0].address + "</p></div>"; } } $("#main").html(html); }
あれ?うまくいきません。
よく見ると、JSONからオブジェクトに変換するところの正規表現でエラーになってます。
var address = tonosamart.evalJson(resultSet.rows.item(i).dat);
JSONの最後の部分に、ナゾのフィールドがあります。
“__shared”:undefined}”
これが正規表現に引っかかってました。何に使うんでしょう・・・
ナゾですが、値が入ってきた時のことも考慮して、SQLiteに保存する前に、
if (address.__shared == undefined) { address.__shared = ""; }
このような処理を入れることにしました。
やっと、うまくいきました。画面はこんな感じす。
次に、地図の画面から履歴画面に遷移できるようにします。
Google Mapsのカスタムマップコントロールを使います。
コントロール – Google Maps API – Google Code
履歴画面にリンクするだけのものなので、単純なものにします。
function LocationControl() { } LocationControl.prototype = new GControl(); LocationControl.prototype.initialize = function(map) { var container = document.createElement("div"); var control = document.createElement("a"); control.href = "../history/"; this.setButtonStyle_(control); container.appendChild(control); control.appendChild(document.createTextNode("histories")); map.getContainer().appendChild(container); return container; }; LocationControl.prototype.getDefaultPosition = function() { return new GControlPosition(G_ANCHOR_TOP_LEFT , new GSize(5, 5)); }; LocationControl.prototype.setButtonStyle_ = function(button) { button.style.color = "#000000"; button.style.backgroundColor = "#FFFFFF"; button.style.cursor = "pointer"; };
画面はこんな感じです。
ここまでで、こんなのができました。もし良かったら、試してみてください!
iPhone GPS Sample