株式会社ライブキャストロゴ 株式会社ライブキャスト

ここ最近、通勤の行き帰りはiPhoneとのにらめっこが続いてます・・・

flashcast:フリーで働くITエンジニア集団のブログ: iPhone OS 3.0のSafariでGPS機能を使ったWeb Applicationを作る!(history画面作成編)で、履歴画面を作りました。

履歴画面の住所の表示をリンクにして、地図画面に遷移できるようにします。地図画面を表示する際に、住所の吹き出しを初期表示する仕様にします。

まず、一覧に表示されている住所をリンクに変更します。

javascriptで住所一覧を作っているところを少しなおします。

  for (i = 0; i < resultSet.rows.length; i++) {
   var address = tonosamart.evalJson(resultSet.rows.item(i).dat);

   if (address) {
    html += "<div><p><a href='../map/?latlng=" +
     splitLatlng(address.name)[0] + "," +
     splitLatlng(address.name)[1] + "'>" +
     address.Placemark[0].address + "</a></p></div>";
   }
  }

地図画面にパラメータで緯度・経度を渡すようにしています。

次は、そのパラメータを受けた地図画面の方を修正します。

  if (window.location.search) {
   var arr = window.location.search.substr(8).split(',');

   if (arr) {
    if (arr.length === 2) {
     lat = arr[0];
     lng = arr[1];
     hasParam = true;
    }
   }
  }

履歴を確認する場合は、現在地の表示機能をOFFにするようにします。初期化処理の引数(hasParam)にしてその状態を渡します。

 function initialize(hasParam, isDbConnect) {
  initGeoLocation(!hasParam, isDbConnect);

GPSを監視する部分のロジックは関数化しました。

 function initGeoLocation(isWatch, isDbConnect) {
  if (isWatch) {
   if (navigator != null && navigator.geolocation != null) {
    id = navigator.geolocation.watchPosition(
     function(e) {
      onLocationChanged(e, isDbConnect);
     }
    );
   }
  }
  else {
   if (id != null) {
    id = navigator.geolocation.clearWatch(id);
   }
  }
 }

バッテリーの減りも考慮して、極力、GPSを監視しないように、ON/OFFをいろんなところで切り替えられるようにするためです。

最後に、画面初期表示時に住所を表示するようにして、完成です。

  if (hasParam) {
   getAddress(latlng, isDbConnect);
  }

ここまでで、こんなのができました。もし良かったら、試してみてください!
iPhone GPS Sample