スマホアプリ開発にも便利な位置情報API - Geolocation API -

2012年5月18日(金)
山田 祥寛(YAMADA, Yoshihiro)

TIPS 002:位置取得に失敗した場合の処理を定義する

getCurrentPositionメソッドの第2引数に「失敗コールバック関数」を指定しておくことで、位置情報の取得に失敗した場合に、エラーメッセージの表示などのエラー処理を行えます。

失敗コールバック関数は省略可能ですが、位置取得はネットワーク接続の理由をはじめ、さまざまな原因で失敗することがあります。位置取得できなかった場合にそのままにするのではなく、ユーザーに通知できるようなしくみを設けておくのが望ましいでしょう。

[リスト]位置取得に失敗した場合にメッセージ表示するコード(current.html)

// 現在の位置情報を取得
navigator.geolocation.getCurrentPosition(
  // 位置情報の取得に成功した場合の処理
  function(pos) {
    ...中略...
  },
  // 位置情報の取得に失敗した場合の処理
    function(err) {
    // エラーコードに対応するメッセージを準備(1)
    var msgs = [
      err.message,
      '位置情報の取得を許可されていません。',
      '位置情報の取得に失敗しました。',
      '位置情報を取得中にタイムアウトしました。'
      ];
      // エラーコードに応じてメッセージをダイアログ表示(2)
      window.alert(msgs[err.code]);
  },
  ...中略...
);

エラーメッセージを確認したい場合には(例えばGoogle Chromeであれば)、

(Google Chromeの設定)-[設定]-[高度な設定]-[コンテンツの設定]ボタンをクリックし、表示された[コンテンツの設定]ウィンドウから[現在地]欄の[例外の設定...]ボタンをクリックしてください。

[現在地の例外]ウィンドウが表示されますので、そこから現在サンプルを配置しているホストを削除します。

 図2:[現在地の例外]ウィンドウ(クリックで拡大)

サンプルにアクセスすると、[●○が物理的な現在地を追跡する許可を求めています]のようなメッセージが表示されますので、[拒否]ボタンをクリックすると、以下のようなエラーメッセージを確認できます。

 図3:現在位置を取得できなかった時のエラーメッセージ(クリックで拡大)

失敗コールバック関数(サンプルの網掛け部分)の引数errには、エラー情報(PositionErrorオブジェクト)が渡されます。PositionErrorオブジェクトでアクセスできる情報は、以下の通りです。

表3:PositionErrorオブジェクトの主なプロパティ

プロパティ 概要
code エラーコード(戻り値は以下の通り)
意味
0 不明なエラー
1 位置情報の取得を拒否された
2 位置情報を取得できない
3 取得処理中にタイムアウトした
message 詳細なエラーメッセージ

サンプルでは、エラーコード0~3に対応するエラーメッセージを配列msgsにセットしておくことで(1)、codeプロパティの値に応じてメッセージを返しているわけです(2)。

著者
山田 祥寛(YAMADA, Yoshihiro)
WINGSプロジェクト

有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表:山田祥寛)。おもな活動は、Web開発分野の書籍/雑誌/Web記事の執筆。ほかに海外記事の翻訳、講演なども幅広く手がける。2011年3月時点での登録メンバは36名で、現在もプロジェクトメンバーを募集中。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています