ジオロケーション

W3C 勧告

この文書の詳細
このバージョン:
https://www.w3.org/TR/2025/REC-geolocation-20250818/
最新公開バージョン:
https://www.w3.org/TR/geolocation/
最新編集者ドラフト:
https://w3c.github.io/geolocation/
履歴:
https://www.w3.org/standards/history/geolocation/
コミット履歴
テストスイート:
https://wpt.live/geolocation/
実装報告:
https://w3c.github.io/geolocation/reports/implementation.html
編集者:
Marcos Cáceres (Apple Inc.)
Reilly Grant (Google)
以前の編集者:
Andrei Popescu (Google Inc.)
フィードバック:
GitHub w3c/geolocation (プルリクエスト, 新しい課題, 未解決の課題)
エラッタ:
エラッタあり
ブラウザー対応状況:
caniuse.com

参考: 翻訳.


概要

ジオロケーションは、ホストデバイスに関連付けられた地理的位置情報へのアクセスを提供します。

この文書のステータス

このセクションは、公開時点でのこの文書のステータスについて説明しています。現在のW3C の出版物一覧や、この技術レポートの最新改訂版は W3C 標準とドラフト一覧で確認できます。

この仕様は2022年9月1日にW3C勧告となって以来、以下の重要な追加および修正が提案されています:

より詳細な変更一覧は D. 変更履歴のセクションをご覧ください。文書のレビュー担当者は、特徴的なスタイリングによって候補となる追加や修正を識別できます。

この文書はデバイスとセンサー作業グループ及びWebアプリケーション作業グループによって、勧告トラックを用いて勧告として公開されました。前回の勧告以降、重要な変更や新機能を導入する候補改訂を含んでいます。

W3Cは、この仕様をWebの標準として広く展開することを推奨します。

W3C勧告は、十分な合意形成を経て、W3Cとその会員によって支持され、 作業グループメンバーによる実装のためのロイヤリティフリーライセンスのコミットメントがあります。 今後の勧告の更新では新機能が組み込まれる場合があります。

候補追加は文書内でマークされています。

候補修正は文書内でマークされています。

この文書は W3C特許ポリシー の下で活動するグループによって作成されました。 W3Cは、 特許公開リスト(デバイスとセンサー作業グループ)特許公開リスト(Webアプリケーション作業グループ) を管理しており、各グループの成果物に関連する特許公開や公開方法についての案内を掲載しています。ある特許が 必須クレーム を含むと認識した場合は、 W3C特許ポリシー第6節に従い情報開示が必要です。

この文書は 2023年11月3日 W3Cプロセス文書に従って管理されています。

1. はじめに

このセクションは規範的ではありません。

ジオロケーションは、実装をホストするデバイスにのみ関連付けられた位置情報への高水準インターフェースを定義します。位置情報の一般的な取得元には、全地球測位システム(GPS)やIPアドレス、RFID、WiFiやBluetoothのMACアドレス、GSM/CDMAのセルID、またはユーザー入力などネットワーク信号から推定される位置が含まれます。API自体は基盤となる位置情報の取得元に依存しません。また、APIがデバイスの実際の位置を返す保証はありません。

エンドユーザーが権限を付与した場合、 ジオロケーションは以下を提供します:

1.1 対象範囲

このセクションは規範的ではありません。

この仕様は、ホストデバイスに関連付けられた地理的位置情報を取得するためのスクリプティングAPIの提供に限定されます。地理的位置情報は、世界測地系座標 [WGS84] で提供されます。マークアップ言語の提供や、地理的位置を識別するURLの新規スキーム定義は含みません。

2.

このセクションは規範的ではありません。

このAPIは「ワンショット」位置リクエストと繰り返しの位置更新の両方を可能にするよう設計されています。以下に一般的な利用例を示します。

2.1 現在位置の取得

このセクションは規範的ではありません。

ユーザーの現在位置をリクエストします。ユーザーが許可すれば、位置オブジェクトが返されます。

2.2 位置の監視

このセクションは規範的ではありません。

ユーザーの現在位置の監視をリクエストします。ユーザーが許可すれば、ユーザーの位置の継続的な更新を取得できます。

2.3 位置監視の停止

このセクションは規範的ではありません。

clearWatch()メソッドを呼び出すことで位置変化の監視を停止します。

2.4 エラー処理

このセクションは規範的ではありません。

エラーが発生した場合、watchPosition()getCurrentPosition()の第2引数にGeolocationPositionErrorエラーが渡され、何が問題かを特定できます。

2.5 maximumAgeによるキャッシュ制御

このセクションは規範的ではありません。

デフォルトでは、APIは以前に取得した位置があれば常にキャッシュされた位置を返そうとします。この例では、10分以内の位置情報のみを受け入れます。ユーザーエージェントに十分新しいキャッシュされた位置オブジェクトがない場合は、自動的に新しい位置が取得されます。

2.6 timeoutの利用

このセクションは規範的ではありません。

位置情報を迅速に取得する必要がある場合、PositionOptionstimeoutメンバーを使って、位置取得に許容する時間を制限できます。

2.7 サードパーティコンテキストでのAPI有効化

このセクションは規範的ではありません。

デフォルトの許可リストである 'self'は、同一オリジンのネストされたフレームでのAPI利用を許可しますが、サードパーティコンテンツでのAPI利用は防ぎます。

サードパーティ利用は、allow="geolocation"属性を iframe 要素に追加することで選択的に有効化できます:

あるいは、ファーストパーティのコンテキストでAPIを無効化するには、HTTPレスポンスヘッダーを指定します:

Permissions PolicyPermissions-Policy HTTPヘッダーの詳細を参照してください。

3. プライバシーに関する考慮事項

このセクションは規範的ではありません。

この仕様で定義されるAPIは、ホストデバイスの地理的位置情報を取得するために使用されます。ほとんどの場合、この情報はデバイス利用者の位置も明らかにし、ユーザーのプライバシーを損なう可能性があります。

3.2 位置情報受信者のプライバシー配慮

このセクションは規範的ではありません。

注意: この機微なデータに対する開発者の責任

このセクションは「受信者」(一般的にはジオロケーションを利用する開発者)に該当します。ユーザーエージェントや本仕様でこれら要件を強制することは不可能ですが、開発者は本セクションをよく読み、以下の提案を遵守するよう努めてください。開発者は、ユーザーの位置データの利用・アクセスに関するプライバシー法が法域によって適用される場合があることを認識する必要があります。

受信者は必要な場合にのみ位置情報をリクエストし、その情報は提供された目的のためだけに利用すべきです。タスク完了後は、ユーザーから明示的な許可がない限り、位置情報を破棄すべきです。また、権限のないアクセスからこの情報を保護する対策を講じる必要があります。位置情報を保存する場合は、ユーザーがこの情報を更新・削除できるようにすべきです。

受信者は、ユーザーの明示的な許可なしに位置情報を再送信すべきではありません。再送信する場合は注意を払い、暗号化の利用が推奨されます。

受信者は、位置情報を収集している事実、収集目的、データの保持期間、データの保護方法、共有方法(共有がある場合)、ユーザーがデータにアクセス・更新・削除できる方法、その他ユーザーが選択可能な事項について、明確かつ分かりやすく開示すべきです。この開示には、上記ガイドラインの例外についての説明も含める必要があります。

3.3 実装に関する考慮事項

このセクションは規範的ではありません。

実装者は、ユーザーのプライバシーを損なう可能性のある以下の点を考慮するよう推奨されます:一部のケースでは、ユーザーが意図せずユーザーエージェントに対し位置情報の開示許可を与えてしまう場合があります。また、特定のURLでホストされているコンテンツが後に変更され、ユーザーが認識している許可の適用範囲が変わる場合や、ユーザーが単に考え直す場合もあります。

これらの状況を予測・防止することは本質的に難しいです。対応策や防御策の設計は実装者の責任であり、本仕様では定めません。しかし、その設計ではユーザーに位置情報共有の認識を促し、権限の取り消しが可能なユーザーインターフェースへのアクセスを提供することが推奨されます。

3.4 API利用権限の確認

ジオロケーションは、既定の強力な機能として 名前 "geolocation" で識別されます。

APIの利用権限を確認する際、ユーザーエージェントは「24時間」「1週間」など時間ベースの権限有効期間を提案したり、許可の付与を無期限で記憶することも可能です。しかし、ユーザーエージェントは権限の有効期間を単一セッションに制限することを推奨します。例として、realmが破棄されるまで、エンドユーザーが遷移してオリジンを離れるまで、または関連するブラウザタブが閉じられるまで、などがあります。

4. セキュリティに関する考慮事項

公開時点ではジオロケーションに関連するセキュリティ上の考慮事項はありません。ただし、3. プライバシーに関する考慮事項を参照することを推奨します。

6. Geolocationインターフェースとコールバック

WebIDL[Exposed=Window]
interface Geolocation {
  undefined getCurrentPosition (
    PositionCallback successCallback,
    optional PositionErrorCallback? errorCallback = null,
    optional PositionOptions options = {}
  );

  long watchPosition (
    PositionCallback successCallback,
    optional PositionErrorCallback? errorCallback = null,
    optional PositionOptions options = {}
  );

  undefined clearWatch (long watchId);
};

callback PositionCallback = undefined (
  GeolocationPosition position
);

callback PositionErrorCallback = undefined (
  GeolocationPositionError positionError
);

6.1 内部スロット

Geolocationのインスタンスは、以下の表に示す内部スロットで生成されます:

内部スロット 説明
[[cachedPosition]] GeolocationPosition(初期値null)。最後に取得した位置への参照であり、キャッシュとして機能します。ユーザーエージェントは[[cachedPosition]]をいつでも任意の理由でnullにリセットして破棄してもよいです。
[[watchIDs]] 空のリストunsigned long アイテムのリスト)として初期化されます。

6.2 getCurrentPosition() メソッド

getCurrentPosition(successCallback, errorCallback, options) メソッドの手順は以下の通りです:

  1. もし現在の設定オブジェクト関連グローバルオブジェクト関連付けられたDocument完全にアクティブでない場合: もし this関連グローバルオブジェクト関連付けられたDocument完全にアクティブでない場合:
    1. エラーでコールバック errorCallbackPOSITION_UNAVAILABLE を渡す。
    2. このアルゴリズムを終了する。
  2. 位置をリクエストし、thissuccessCallback, errorCallback, options を渡す。

6.3 watchPosition() メソッド

watchPosition(successCallback, errorCallback, options) メソッドの手順は以下の通りです:

  1. もし現在の設定オブジェクト関連グローバルオブジェクト関連付けられたDocument完全にアクティブでない場合: もし this関連グローバルオブジェクト関連付けられたDocument完全にアクティブでない場合:
    1. エラーでコールバックerrorCallbackPOSITION_UNAVAILABLE を渡す)。
    2. 0を返す。
  2. watchId を 0 より大きい実装定義unsigned longとして生成する。
  3. watchIdを[[watchIDs]]に追加する。
  4. 位置をリクエストし、thissuccessCallback, errorCallback, options、および watchId を渡す。
  5. watchId を返す。

6.4 clearWatch() メソッド

clearWatch()が呼び出されたとき、ユーザーエージェントは必須で以下を実行します:

  1. watchIdthis[[watchIDs]]から削除する。

6.5 位置をリクエストする

位置をリクエストするには、Geolocation geolocationPositionCallback successCallbackPositionErrorCallback? errorCallbackPositionOptions options、およびオプションのwatchIdを渡します:

  1. watchIDsgeolocation[[watchIDs]]に設定する。
  2. documentgeolocation関連グローバルオブジェクト関連付けられたDocumentに設定する。
  3. もしdocument"geolocation"機能の使用が許可されていない場合:
    1. もしwatchIdが渡された場合、watchIdwatchIDsから削除する。
    2. エラーでコールバックし、errorCallbackPERMISSION_DENIEDを渡す。
    3. このアルゴリズムを終了する。
  4. もしgeolocationenvironment settings object非セキュアなコンテキストの場合:
    1. もしwatchIdが渡された場合、watchIdwatchIDsから削除する。
    2. エラーでコールバックし、errorCallbackPERMISSION_DENIEDを渡す。
    3. このアルゴリズムを終了する。
  5. もしdocumentvisibility stateが "hidden"の場合、以下のページ可視性変更手順が実行されるまで待機する:
    1. Assert: documentvisibility stateは "visible"である。
    2. 以下の手順へ進む。
  6. descriptorを新しいPermissionDescriptorとし、 name"geolocation"を設定する。
  7. 並列で以下を実行する:
    1. permissionrequest permission to use descriptorに設定する。
    2. もしpermissionが"denied"なら:
      1. もしwatchIdが渡された場合、watchIdwatchIDsから削除する。
      2. エラーでコールバックし、errorCallbackPERMISSION_DENIEDを渡す。
      3. このアルゴリズムを終了する。
    3. 位置を取得し、 successCallbackerrorCallbackoptionswatchIdを渡して待機する。
    4. もしwatchIdが渡されなかった場合、このアルゴリズムを終了する。
    5. watchIDswatchIdを含む間:
      1. 地理的位置が大きく変化するまで待機する。何が「大きく変化する」かは実装依存です。ユーザーエージェントは位置変化の報告頻度にレート制限を課してもよいです。ユーザーエージェントは必須set emulated position dataの呼び出しを「大きな変化」とみなすこと。
      2. document完全にアクティブでない、 またはvisibility stateが "visible"でない場合、前の手順に戻り再度 地理的位置が大きく変化するまで待機する。
        注意: 位置更新は完全にアクティブかつ可視なドキュメントだけに限定
      3. 位置を取得し、 successCallbackerrorCallbackoptionswatchIdを渡して待機する。

6.6 位置を取得する

位置を取得するには、 PositionCallback successCallbackPositionErrorCallback? errorCallbackPositionOptions options、およびオプションの watchIdを渡します。

  1. もしwatchIdが渡されていて、this[[watchIDs]]watchId含まない場合、 このアルゴリズムを終了する。
  2. acquisitionTimeを、現在時刻を表す新しいEpochTimeStampとして設定する。
  3. timeoutTimeacquisitionTimeoptions.timeoutの合計値に設定する。
  4. cachedPositionthis[[cachedPosition]]に設定する。
  5. 実装依存のtimeoutタスクをtimeoutTimeで期限切れになるよう作成し、その間に以下の手順でデバイスの位置取得を試みる:
    1. permission現在の権限状態を取得し、 "geolocation"に対して設定する。
    2. もしpermissionが"denied"なら:
      1. timeoutを停止する。
      2. ユーザーまたはシステムが権限を拒否の失敗ケース手順を実行する。
    3. もしpermissionが"granted"なら:
      1. エミュレートされた位置を使用すべきか以下の手順でチェックする:
        1. emulatedPositionDataget emulated position datathisを渡して取得する。
        2. もしemulatedPositionDataがnullでない場合:
          1. もしemulatedPositionDataGeolocationPositionErrorの場合:
            1. エラーでコールバックし、 errorCallbackemulatedPositionData.codeを渡す。
            2. このアルゴリズムを終了する。
          2. position新しい GeolocationPositionとして emulatedPositionDataacquisitionTimeoptions.enableHighAccuracyを渡して生成する。
          3. タスクをキューに追加し、 geolocation task sourcesuccessCallbackを呼び出す («position»と"report"を渡す)。
          4. このアルゴリズムを終了する。
      2. positionをnullに設定する。
      3. もしcachedPositionがnullでなく、 options.maximumAgeが0より大きい場合:
        1. cacheTimeacquisitionTimeから options.maximumAgeの値を引いた値に設定する。
        2. もしcachedPositiontimestamp値が cacheTimeより大きく、 cachedPosition.[[isHighAccuracy]]options.enableHighAccuracyと等しい場合
          1. タスクをキューに追加し、 geolocation task sourcesuccessCallbackを呼び出す («cachedPosition»と"report"を渡す)。
          2. このアルゴリズムを終了する。
      4. それ以外の場合、もしpositioncachedPositionでないなら、基盤システムから位置データを取得する(可能なら options.enableHighAccuracyを考慮)。
      5. 取得中にtimeoutが期限切れになるか、位置取得が失敗した場合:
        1. timeoutを停止する。
        2. 失敗時の処理へ進む。
        3. このアルゴリズムを終了する。
      6. システムからの位置データ取得が成功した場合:
        1. positionDataを以下の取得位置データに基づくマップとして生成:
          "longitude"
          double 地球表面の経度座標(度)、[WGS84]座標系。経度は本初子午線からの東西距離。
          "altitude"
          double? [WGS84]楕円体上の高度(メートル)、利用不可ならnull。高度は海抜を表す。
          "accuracy"
          非負のdouble 95%信頼水準での精度値(メートル)。精度は測定座標が真の位置にどれだけ近いかを示す。
          "altitudeAccuracy"
          非負のdouble? 95%信頼水準での高度精度(メートル)、利用不可ならnull。高度精度は測定高度が真の高度にどれだけ近いかを示す。
          "speed"
          非負のdouble? 速度(メートル/秒)、利用不可ならnull。速度はデバイスの移動速度。
          "heading"
          double? 進行方向(度)、利用不可またはデバイスが静止時はnull。進行方向は真北に対する移動方向。
        2. position新しい GeolocationPositionとして positionDataacquisitionTimeoptions.enableHighAccuracyを渡して生成する。
        3. this[[cachedPosition]]positionを設定する。
      7. timeoutを停止する。
      8. タスクをキューに追加し、geolocation task sourcesuccessCallbackを呼び出す(«position»と"report"を渡す)。
    失敗時の処理:
    • 位置取得に失敗した場合、状況に応じて以下のいずれかを実行する:
      ユーザーまたはシステムが権限を拒否:

      エラーでコールバックし、errorCallbackPERMISSION_DENIEDを渡す。

      注意: ブラウザーの権限VS OSの権限
      タイムアウト発生:
      エラーでコールバックerrorCallbackTIMEOUTを渡す)。
      データ取得エラーその他理由:
      エラーでコールバックerrorCallbackPOSITION_UNAVAILABLEを渡す)。

6.7 エラーでコールバック

エラーでコールバックするよう指示された場合、 PositionErrorCallback? callbackunsigned short codeを受け取ります:

  1. callbackがnullの場合、何もせず戻る。
  2. errorを新しく作成し、 GeolocationPositionErrorインスタンスで code属性をcodeで初期化する。
  3. タスクをキューに追加し、 geolocation task sourcecallback(« error »と"report")を呼び出す。

7. PositionOptions 辞書

WebIDLdictionary PositionOptions {
  boolean enableHighAccuracy = false;
  [Clamp] unsigned long timeout = 0xFFFFFFFF;
  [Clamp] unsigned long maximumAge = 0;
};

7.1 enableHighAccuracy メンバー

enableHighAccuracy メンバーは、 アプリケーションができるだけ正確な位置情報を受け取りたいというヒントを実装に伝えます。 このメンバーの目的は、アプリケーションが高精度のジオロケーション修正を必要としないことを実装に知らせ、 実装が多くの電力を消費する位置情報プロバイダー(例:GPS)の使用を避けてもよいようにすることです。

注意: enableHighAccuracyに関する注意

7.2 timeout メンバー

timeoutメンバーは、位置取得が失効するまでの最大時間(ミリ秒単位)を表します。

注意: タイムアウトの計算タイミング

ドキュメントが可視になるまでや、API利用権限の取得にかかる時間は timeout メンバーの計算には含まれません。 timeout メンバーは位置取得が開始されてからのみ適用されます。

注意: 即時キャンセル

7.3 maximumAge メンバー

maximumAgeメンバーは、Webアプリが指定したミリ秒以内のキャッシュ位置を受け入れる意思があることを示します。

8. GeolocationPosition インターフェース

WebIDL[Exposed=Window, SecureContext]
interface GeolocationPosition {
  readonly attribute GeolocationCoordinates coords;
  readonly attribute EpochTimeStamp timestamp;
  [Default] object toJSON();
};

8.1 coords 属性

coords 属性は地理座標を保持します。

8.2 timestamp 属性

timestamp 属性はデバイスの地理的位置が取得された時刻を表します。

8.3 toJSON() メソッド

toJSON() メソッドは GeolocationPosition オブジェクトの JSON表現を返します。

8.4 内部スロット

GeolocationPositionError のインスタンスは 以下の表の内部スロットで生成されます:

内部スロット 説明
[[isHighAccuracy]] boolean。この enableHighAccuracy メンバーの値を、 GeolocationPosition生成されたときに記録します。

8.5 タスクソース

この仕様で次の タスクソース を定義します。

geolocation task source
本仕様は、非同期で PositionCallback および PositionErrorCallback位置リクエストの際にキューに登録するために使用します。

9. GeolocationCoordinates インターフェース

WebIDL[Exposed=Window, SecureContext]
interface GeolocationCoordinates {
  readonly attribute double accuracy;
  readonly attribute double latitude;
  readonly attribute double longitude;
  readonly attribute double? altitude;
  readonly attribute double? altitudeAccuracy;
  readonly attribute double? heading;
  readonly attribute double? speed;
  [Default] object toJSON();
};

9.1 latitudelongitudeaccuracy 属性

The latitude and longitude attributes are geographic coordinates specified in decimal degrees. latitude属性とlongitude属性は、[WGS84] 座標系における度の実数で位置を示します。 accuracy 属性は位置精度の半径(メートル単位)を示します。

9.2 altitudealtitudeAccuracy 属性

altitude属性は、[WGS84]楕円体上のメートル単位で位置の高さを示します。

altitudeAccuracy属性は、高度の精度(メートル単位、例:10メートル)を示します。

9.3 heading 属性

heading属性はホストデバイスの進行方向を度単位で示し、0° ≤ heading < 360°、真北を基準に時計回りです。

9.4 speed 属性

speed属性は、ホストデバイスの現在の速度の水平成分の大きさ(メートル/秒)を示します。

9.5 toJSON() メソッド

toJSON()メソッドはGeolocationCoordinatesオブジェクトのJSON表現を返します。

9.6 GeolocationPosition の構築

新しい GeolocationPosition は、マップ positionDataEpochTimeStamp timestamp、および boolean isHighAccuracy を使って以下の手順で構築されます:

  1. coords を新しく生成した GeolocationCoordinates インスタンスとする。
  2. positionDatakeyvalue それぞれについて:
    1. coordskey 属性に value を設定する。
  3. 新しく生成した GeolocationPosition インスタンスを返す。 その coords 属性は coords で初期化され、 timestamp 属性は timestamp で初期化され、 [[isHighAccuracy]] 内部スロットは isHighAccuracy に設定される。

新しい GeolocationPosition は、 EpochTimeStamp timestamp および boolean isHighAccuracy を使って以下の手順で構築されます:

  1. coords を新しく生成した GeolocationCoordinates インスタンスとする:
    1. coordlatitude 属性を十進度の地理座標で初期化する。
    2. coordlongitude 属性を十進度の地理座標で初期化する。
    3. coordaccuracy 属性を非負の実数で初期化する。この値は緯度・経度に対して95%信頼水準にすべき
    4. coordaltitude 属性を [WGS84] 楕円体上のメートルで初期化、情報が取得できない場合は null
    5. coordaltitudeAccuracy 属性を非負の実数で初期化、情報が取得できない場合は null。高度精度が提供される場合は95%信頼水準すべき
    6. coordspeed 属性を非負の実数で初期化、情報が取得できない場合は null
    7. coordheading 属性を度で初期化、情報が取得できない場合は null。デバイスが静止している場合(speed 属性が 0 の場合)、headingNaN で初期化。
  2. 新しく生成した GeolocationPosition インスタンスを返す。 その coords 属性は coords で初期化され、 timestamp 属性は timestamp で初期化され、 [[isHighAccuracy]] 内部スロットは isHighAccuracy に設定される。

10. GeolocationPositionError インターフェース

WebIDL[Exposed=Window]
interface GeolocationPositionError {
  const unsigned short PERMISSION_DENIED = 1;
  const unsigned short POSITION_UNAVAILABLE = 2;
  const unsigned short TIMEOUT = 3;
  readonly attribute unsigned short code;
  readonly attribute DOMString message;
};

10.1 定数

PERMISSION_DENIED (数値 1)
位置リクエストが、ユーザーがAPI利用を拒否したため、または 非セキュアなコンテキストからリクエストされたため失敗した。
POSITION_UNAVAILABLE (数値 2)
位置取得に失敗した。
TIMEOUT (数値 3)
timeout メンバーで指定された時間内に、ユーザーエージェントが正常に 位置取得できなかった。

10.2 code 属性

code 属性は、初期化時に設定された値を返します(可能な値は 10.1 定数 を参照)。

10.3 message 属性

message 属性は code 属性の内容を説明する、開発者向けのテキストです。

注意: .message をユーザーに表示しないこと!

11. 権限ポリシー

本仕様は、トークン文字列 "geolocation" で識別される ポリシー制御機能を定義します。 そのデフォルト許可リスト'self' です。

12. エミュレーション

ユーザーエージェントの自動化やアプリケーションテストの目的で、本書はジオロケーションのエミュレーションを定義します。

トップレベルトラバーサブルは、 エミュレートされた位置データ (データは GeolocationCoordinatesGeolocationPositionError または null で、初期値は null)を持ちます。

エミュレートされた位置データを設定するには、 navigable navigableemulatedPositionData を渡します:

  1. emulatedPositionData が null、GeolocationCoordinates、または GeolocationPositionError のいずれかであることを確認する。
  2. traversablenavigableトップレベルトラバーサブル とする。
  3. もし traversable が null でない場合:
    1. traversable の関連付けられた エミュレートされた位置データemulatedPositionData に設定する。
    2. ユーザーエージェントは 必須 で、これを 地理的位置が大きく変化するまで待機ステップの「大きな変化」とみなすこと。

エミュレートされた位置データを取得するには、 Geolocation geolocation を渡します:

  1. navigablegeolocation関連グローバルオブジェクト関連付けられた Documentノードナビゲーブル とする。
  2. もし navigable が null なら、null を返す。
  3. traversablenavigableトップレベルトラバーサブル とする。
  4. もし traversable が null なら、null を返す。
  5. traversable の関連付けられた エミュレートされた位置データ を返す。

13. 適合性

非規範的と明記されているセクションだけでなく、本仕様の全ての著作ガイドライン、図、例、および注も非規範的です。それ以外の本仕様の内容は規範的です。

この文書におけるキーワード MAYMUSTRECOMMENDEDSHOULD は、 BCP 14 [RFC2119] [RFC8174] に記載されている通りに解釈されます。 ただし、ここで示されているように全て大文字で記載された場合のみ該当します。

A. IDL索引

WebIDLpartial interface Navigator {
  [SameObject] readonly attribute Geolocation geolocation;
};

[Exposed=Window]
interface Geolocation {
  undefined getCurrentPosition (
    PositionCallback successCallback,
    optional PositionErrorCallback? errorCallback = null,
    optional PositionOptions options = {}
  );

  long watchPosition (
    PositionCallback successCallback,
    optional PositionErrorCallback? errorCallback = null,
    optional PositionOptions options = {}
  );

  undefined clearWatch (long watchId);
};

callback PositionCallback = undefined (
  GeolocationPosition position
);

callback PositionErrorCallback = undefined (
  GeolocationPositionError positionError
);

dictionary PositionOptions {
  boolean enableHighAccuracy = false;
  [Clamp] unsigned long timeout = 0xFFFFFFFF;
  [Clamp] unsigned long maximumAge = 0;
};

[Exposed=Window, SecureContext]
interface GeolocationPosition {
  readonly attribute GeolocationCoordinates coords;
  readonly attribute EpochTimeStamp timestamp;
  [Default] object toJSON();
};

[Exposed=Window, SecureContext]
interface GeolocationCoordinates {
  readonly attribute double accuracy;
  readonly attribute double latitude;
  readonly attribute double longitude;
  readonly attribute double? altitude;
  readonly attribute double? altitudeAccuracy;
  readonly attribute double? heading;
  readonly attribute double? speed;
  [Default] object toJSON();
};

[Exposed=Window]
interface GeolocationPositionError {
  const unsigned short PERMISSION_DENIED = 1;
  const unsigned short POSITION_UNAVAILABLE = 2;
  const unsigned short TIMEOUT = 3;
  readonly attribute unsigned short code;
  readonly attribute DOMString message;
};

B. 索引

B.1 本仕様で定義される用語

B.2 参照定義されている用語

C. 謝辞

このセクションは非規範的です。

本仕様は、Aza Raskin の研究、Google Gears Geolocation API、LocationAware.org など、業界の先行研究に基づいています。

Alec Berntson、Alissa Cooper、Steve Block、Greg Bolsinga、Lars Erik Bolstad、Aaron Boodman、Dave Burke、Chris Butler、Max Froumentin、Shyam Habarakada、Marcin Hanclik、Ian Hickson、Brad Lassey、Angel Machin、Cameron McCormack、Daniel Park、Stuart Parmenter、Olli Pettay、Chris Prince、Arun Ranganathan、Carl Reed、Thomas Roessler、Dirk Segers、Allan Thomson、Martin Thomson、Doug Turner、Erik Wilde、Matt Womer、Mohamed Zergaoui にも感謝します。

D. 変更履歴

このセクションは非規範的です。

2021年の最初の現行標準公開以降、Geolocationには以下の規範的変更が加えられました:

2016年の第2版公開以降、本仕様には以下の実質的変更があります:

すべての変更は コミット履歴 を参照してください。

E. 参考文献

E.1 規範的参考文献

[hr-time]
High Resolution Time. Yoav Weiss. W3C. 2024年11月7日. W3C作業草案. URL: https://www.w3.org/TR/hr-time-3/
[html]
HTML現行標準. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. 現行標準. URL: https://html.spec.whatwg.org/multipage/
[infra]
Infra現行標準. Anne van Kesteren; Domenic Denicola. WHATWG. 現行標準. URL: https://infra.spec.whatwg.org/
[Permissions]
Permissions. Marcos Caceres; Mike Taylor. W3C. 2025年6月24日. W3C作業草案. URL: https://www.w3.org/TR/permissions/
[permissions-policy]
Permissions Policy. Ian Clelland. W3C. 2025年8月6日. W3C作業草案. URL: https://www.w3.org/TR/permissions-policy-1/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. 1997年3月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. 2017年5月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[webidl]
Web IDL現行標準. Edgar Chen; Timothy Gu. WHATWG. 現行標準. URL: https://webidl.spec.whatwg.org/
[WGS84]
World Geodetic System 1984 (WGS 84). Office of Geomatics, National Geospatial Intelligence Agency. 2008年. URL: https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84