開発者コンソール

位置情報データを使用する方法


位置情報データを使用する方法

navigator.geolocationプロパティをサポートしているデバイスでは、アプリでJavaScriptを通じて位置情報データを使用できます。W3CのGeolocation API Specification(位置情報APIの仕様)には、位置情報データにアクセスする方法が記載されています。

位置情報処理のサンプルでは、位置情報データにアクセスする方法を示しています。このサンプルのコードは、<Amazonアプリ・ゲームサービスSDK>/Web/Cookbook/Geolocation/にあります。Web App SDKは、Amazon Developer SDKからダウンロードできます。

位置情報への対応状況の検出

位置情報に対応しているかどうかを検出するには、navigator.geolocationプロパティが存在するかどうかを確認します。存在する場合は、位置情報に対応しています。

if (navigator.geolocation) {
  // 位置情報に対応している
} else {
  // 位置情報に対応していない
}

ユーザーの現在位置情報データの要求

navigator.geolocationプロパティが存在することを確認した後に、最小で1つ、最大で3つの引数を指定してnavigator.geolocation.getCurrentPosition()を呼び出すことで、ユーザーの現在位置情報データを要求できます。引数は、順番に次のとおりです。

  1. (必須)デバイスの現在の場所が正常に決定されたときに呼び出される関数へのコールバック。
  2. (オプション)デバイスの現在の場所を決定するときにエラーが発生した場合に呼び出される関数へのコールバック。
  3. (オプション)位置検索オプションをカプセル化するオブジェクト。

次の位置検索オプションがあります。

  • enableHighAccuracy(boolean)は、アプリにはできる限り最良の結果が必要であることを示すヒントを提供します。高精度の結果を要求すると、応答時間が遅くなり、消費電力が増える可能性があります。この機能をユーザーが拒否する可能性もありますし、このフラグがfalseに設定された場合よりも高い精度の結果をデバイスが提供できない可能性もあります。このフラグの目的は、高精度の結果が必要ないことをアプリが実装に知らせて、消費電力の大きい位置情報プロバイダー(GPSなど)を実装で使用しなくても済むようにすることです。
  • timeout(long)は、getCurrentPosition()の呼び出しから成功のコールバックが呼び出されるまでの最大経過時間(ミリ秒)です。timeoutの時間が経過しても、他のエラーが発生しなかった場合は、タイムアウトエラーコードを引数としてエラーコールバックが呼び出されます。
  • maximumAge(long)は、既存のキャッシュを引き続き使用できる最大時間(ミリ秒)です。maximumAgeがゼロに設定された場合、実装は新しい位置データの取得をすぐに試行する必要があります。maximumAgeを無限に設定すると、キャッシュされたデータが、その古さに関係なく常に返されます。

成功コールバック、エラーコールバック、定義済みのオプションオブジェクトを引数とするgetCurrentPosition()呼び出しの例を次に示します。成功コールバックの実装は、「位置情報データの使用」のセクションに示されています。エラーコールバックの実装は示されていません。

var options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0
};

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(showPositionSuccessCallback, showPositionErrorCallback, options);
} else {
  $("#location").text("このブラウザまたはコンテキストは位置情報に対応していません");
}

位置情報データの使用

位置情報データを要求し、その要求が正常に処理されると、成功のコールバックが呼び出されます。コールバック関数が、座標オブジェクトとタイムスタンプが含まれる位置オブジェクトを受け取ります。座標オブジェクトには次のプロパティがあります。

  • latitudeは、度(10進数表記)で指定します。
  • longitudeは、度(10進数表記)で指定します。
  • altitudeは、WGS84楕円体を基準面とする高さ(メートル単位)です。実装がこの情報を提供できない場合はnullになります。
  • accuracyは緯度と経度の精度で、メートル単位で指定します(信頼水準:95%)。
  • altitudeAccuracyはメートル単位で指定します(信頼水準:95%)。実装がaltitudeの情報を提供できない場合はnullになります。
  • headingはデバイスの移動方向を示し、0°以上360°未満の値で指定します。デバイスが動かない(速度が0の)場合はNaNになります。実装がheadingの情報を提供できない場合はnullになります。
  • speedは、デバイスの現在の速度の水平成分を示し、メートル毎秒で指定されます。実装がspeedの情報を提供できない場合はnullになります。

positionの座標オブジェクトの情報を使用して、latitude、longitude、accuracyの情報、およびlatitudeとlongitudeがクエリ文字列に埋め込まれたマップへのリンクを表示する成功コールバックの例を次に示します。

function showPositionSuccessCallback(position) {
  var latitude = position.coords.latitude;
  var longitude = position.coords.longitude;
  var accuracy = position.coords.accuracy;
  $("#location").html("Latitude: " + latitude
                      + "<br/>Longitude: " + longitude
                      + "<br/>Accuracy: " + accuracy + " meters");
  $("#osm").html('<a href="http://www.openstreetmap.org/?lat=' + latitude
                 + '&lon=' + longitude + '&zoom=17&layers=M">Open Street Maps view</a>');
}

位置情報データを使用する権限の要求

Amazonアプリストアにアプリを申請するときに、[アプリファイル] タブの [ウェブアプリの機能] セクションで [Geolocation] のチェックボックスをオンにします。これにより、Androidマニフェストに適切なパーミッションが追加されます。適切なチェックボックスをオンにしない場合、アプリの位置情報機能は動作しません。