地理位置

W3C 推荐标准

有关此文档的更多详细信息
此版本:
https://www.w3.org/TR/2025/REC-geolocation-20250411/
最新发布版本:
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 出版物列表以及本技术报告的最新修订版可以在位于 https://www.w3.org/TR/ 的 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 和蓝牙 MAC 地址以及 GSM/CDMA 小区 ID)推断出的位置, 以及用户输入。该 API 本身与底层位置信息源无关,并且不保证该 API 返回设备的实际位置。

如果最终用户授予权限地理位置

1.1 范围

本节内容不具规范性。

本规范仅限于提供一个脚本 API,用于检索与承载设备关联的地理位置信息。地理位置信息以世界大地测量系统坐标 [WGS84] 的形式提供。它不包括提供任何类型的标记语言,也不包括定义用于构建标识地理位置的 URL 的新 URL 方案。

2. 示例

本节内容不具规范性。

该 API 设计用于支持“一次性”位置请求和重复位置更新。以下示例说明了常见的用例。

2.1 获取当前位置

本节内容不具规范性。

请求用户的当前位置。如果用户允许,您将获得一个位置对象。

2.2 监视位置

本节内容不具规范性。

请求监视用户当前位置的能力。如果用户允许,您将获得用户位置的持续更新。

2.3 停止监视位置

本节内容不具规范性。

通过调用 clearWatch() 方法停止监视位置更改。

2.4 处理错误

本节内容不具规范性。

发生错误时, watchPosition()getCurrentPosition() 方法的第二个参数会使用 GeolocationPositionError 错误进行调用,这可以帮助您找出可能出错的地方。

2.5 使用 maximumAge 作为缓存控制

本节内容不具规范性。

默认情况下,只要 API 具有先前获取的位置,它总是尝试返回缓存的位置。在此示例中,我们接受年龄不超过 10 分钟的位置。如果用户代理没有足够新的缓存位置对象,它会自动获取新位置。

2.6 使用 timeout

本节内容不具规范性。

如果您需要以时间敏感的方式获取位置信息,可以使用 PositionOptions timeout 成员来限制您愿意等待获取位置的时间。

2.7 在第三方上下文中启用 API

本节内容不具规范性。

'self'默认允许列表 允许在同源嵌套框架中使用 API,但阻止第三方内容使用 API。

可以通过向 iframe 元素添加 allow="geolocation" 属性来选择性地启用第三方使用:

或者,可以通过指定 HTTP 响应头在第一方上下文中禁用 API:

有关 Permissions-Policy HTTP 头的更多详细信息,请参阅权限策略

3. 隐私注意事项

本节内容不具规范性。

本规范中定义的 API 用于检索托管设备的地理位置。在几乎所有情况下,此信息也会泄露设备用户的位置,从而可能损害用户的隐私。

3.2 位置信息接收者的隐私注意事项

本节内容不具规范性。

注意: 开发者对此敏感数据的责任

本节适用于“接收者”,通常指利用地理位置的开发者。尽管用户代理或本规范无法强制执行这些要求,但开发者需要仔细阅读本节内容,并尽最大努力遵守以下建议。开发者需要意识到,其司法管辖区内可能存在隐私法,这些法律可以管辖用户位置数据的使用和访问。

接收者只应在必要时请求位置信息,并且仅将位置信息用于向其提供的任务。除非用户明确允许保留,否则接收者应在该任务完成后处理掉位置信息。接收者还需要采取措施保护此信息免遭未经授权的访问。如果存储了位置信息,则应允许用户更新和删除此信息。

未经用户明确许可,位置信息的接收者不得转发位置信息。转发时需要小心,并鼓励使用加密。

接收者应清晰醒目地披露其正在收集位置数据的事实、收集目的、数据保留多长时间、数据如何保护、如果共享数据如何共享、用户如何访问、更新和删除数据,以及用户对数据拥有的任何其他选择。此披露需要包括对上述指南任何例外的解释。

3.3 实现注意事项

本节内容不具规范性。

建议实现者考虑以下可能对其用户隐私产生负面影响的方面:在某些情况下,用户可能会无意中授予用户代理向网站泄露其位置的权限。在其他情况下,特定 URL 托管的内容发生变化,导致先前授予的位置权限就用户而言不再适用。或者用户可能只是改变了主意。

预测或阻止这些情况本身就很困难。缓解和深入的防御措施是实现者的责任,本规范未作规定。但是,在设计这些措施时,建议实现者提高用户对位置共享的认识,并提供对允许撤销权限的用户界面的访问。

3.4 检查使用 API 的权限

地理位置是一个由名称 "geolocation" 标识的默认强大功能

检查使用 API 的权限时,用户代理可以建议基于时间的权限 生命周期,例如“24 小时”、“1 周”,或者选择无限期记住权限授予。但是,建议用户代理优先将权限 生命周期限制为单个会话:例如,这可以是直到领域被销毁,最终用户导航离开,或者相关的浏览器选项卡被关闭。

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。它是对最后获取位置的引用,并用作缓存。用户代理可以随时出于任何原因通过将其重置为 null 来逐出 [[cachedPosition]]
[[watchIDs]] 初始化为一个空的 列表,其中包含 unsigned long

6.2 getCurrentPosition() 方法

getCurrentPosition(successCallback, errorCallback, options) 方法的步骤如下:

  1. 如果当前设置对象相关全局对象关联 Document 不是完全激活 如果 this相关全局对象关联 Document 不是完全激活
    1. 使用错误回调 errorCallbackPOSITION_UNAVAILABLE
    2. 终止此算法。
  2. 请求位置,传递 thissuccessCallbackerrorCallbackoptions

6.3 watchPosition() 方法

watchPosition(successCallback, errorCallback, options) 方法的步骤如下:

  1. 如果当前设置对象相关全局对象关联 Document 不是完全激活 如果 this相关全局对象关联 Document 不是完全激活
    1. 使用错误回调,传递 errorCallbackPOSITION_UNAVAILABLE
    2. 返回 0。
  2. watchId 为一个实现定义的、大于零的 unsigned long
  3. watchId 追加this[[watchIDs]]
  4. 请求位置,传递 thissuccessCallbackerrorCallbackoptionswatchId
  5. 返回 watchId

6.4 clearWatch() 方法

当调用 clearWatch() 时,用户代理必须

  1. this[[watchIDs]]移除 watchId

6.5 请求位置

请求位置,传递一个 Geolocation geolocation,一个 PositionCallback successCallback,一个 PositionErrorCallback? errorCallback,一个 PositionOptions options,以及一个可选的 watchId

  1. watchIDsgeolocation[[watchIDs]]
  2. documentgeolocation相关全局对象关联 Document
  3. 如果 document 未被允许使用 "geolocation" 功能:
    1. 如果传递了 watchId,则从 watchIDs移除 watchId
    2. 使用错误回调,传递 errorCallbackPERMISSION_DENIED
    3. 终止此算法。
  4. 如果 geolocation环境设置对象是一个非安全上下文
    1. 如果传递了 watchId,则从 watchIDs移除 watchId
    2. 使用错误回调,传递 errorCallbackPERMISSION_DENIED
    3. 终止此算法。
  5. 如果 document可见性状态为 "hidden",则等待以下页面可见性更改步骤运行:
    1. 断言document可见性状态为 "visible"。
    2. 继续执行下面的后续步骤。
  6. descriptor 为一个新的 PermissionDescriptor,其 name"geolocation"
  7. 并行执行
    1. permission 设置为请求使用权限 descriptor
    2. 如果 permission 为 "denied",则:
      1. 如果传递了 watchId,则从 watchIDs移除 watchId
      2. 使用错误回调,传递 errorCallbackPERMISSION_DENIED
      3. 终止此算法。
    3. 等待获取位置,传递 successCallbackerrorCallbackoptionswatchId
    4. 如果未传递 watchId,则终止此算法。
    5. watchIDs 包含 watchId 时:
      1. 等待地理位置发生重大变化。什么构成地理位置的重大变化由实现决定。用户代理可以限制报告位置变化的频率。 用户代理必须将调用设置模拟位置数据视为重大变化。
      2. 如果 document 不是完全激活可见性状态不是 "visible",则返回上一步并再次等待地理位置发生重大变化
        注意: 位置更新仅适用于完全激活的可见文档
      3. 等待获取位置,传递 successCallbackerrorCallbackoptionswatchId

6.6 获取位置

获取位置, 传递 PositionCallback successCallback,一个 PositionErrorCallback? 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. emulatedPositionData获取模拟位置数据 传递 this
        2. 如果 emulatedPositionData 不为 null:
          1. 如果 emulatedPositionData 是一个 GeolocationPositionError
            1. 使用错误回调传递 errorCallbackemulatedPositionData
            2. 终止此算法。
          2. position一个新的 GeolocationPosition 传递 emulatedPositionDataacquisitionTimeoptions.enableHighAccuracy
          3. 地理位置任务源排队一个任务, 该任务的步骤是调用 successCallback 并传入 « position » 和 "report"。
          4. 终止此算法。
      2. position 为 null。
      3. 如果 cachedPosition 不为 null,并且 options.maximumAge 大于 0:
        1. cacheTimeacquisitionTime 减去 options.maximumAge 成员的值。
        2. 如果 cachedPositiontimestamp 的值大于 cacheTime,并且 cachedPosition.[[isHighAccuracy]] 等于 options.enableHighAccuracy, 将 position 设置为 cachedPosition
          1. 地理位置任务源排队一个任务, 该任务的步骤是调用 successCallback 并传入 « cachedPosition » 和 "report"。
          2. 终止此算法。
      4. 否则,如果 position 不是 cachedPosition,则尝试从底层系统获取位置数据, (可选)在获取过程中考虑 options.enableHighAccuracy 的值。
      5. 如果在获取过程中 timeout 到期,或者获取设备位置失败:
        1. 停止 timeout
        2. 转到处理失败
        3. 终止此算法。
      6. 如果从系统成功获取位置数据:
        1. positionData 为一个 map,其中包含基于获取的位置数据的以下名称/值对:
          "longitude"
          一个 double 类型,表示地球表面以度为单位的经度坐标, 使用 [WGS84] 坐标系。经度测量一个点距离本初子午线向东或向西的距离。
          "altitude"
          一个 double? 类型,表示高于 [WGS84] 椭球体的高度(以米为单位),如果不可用则为 null。高度测量海平面以上的高度。
          "accuracy"
          一个非负 double 类型,表示精度值,指示 95% 置信水平(以米为单位)。精度测量测量坐标与真实位置的接近程度。
          "altitudeAccuracy"
          一个非负 double? 类型,表示高度精度,如果不可用则为 null, 指示 95% 置信水平(以米为单位)。 高度精度测量测量高度与真实高度的接近程度。
          "speed"
          一个非负 double? 类型,表示速度(以米/秒为单位),如果不可用则为 null。速度测量设备移动的速度。
          "heading"
          一个 double? 类型,表示航向(以度为单位),如果不可用或设备静止则为 null。航向测量设备相对于真北方向移动的方向。
        2. position 设置为一个新的 GeolocationPosition 传递 positionDataacquisitionTimeoptions.enableHighAccuracy
        3. this[[cachedPosition]] 设置为 position
        1. position 设置为一个新的 GeolocationPosition 传递 acquisitionTimeoptions.enableHighAccuracy
        2. this[[cachedPosition]] 设置为 position
      7. 停止 timeout
      8. 地理位置任务源排队一个任务, 该任务的步骤是调用 successCallback 并传入 « position » 和 "report"。
    处理失败:
    • 如果获取位置失败,则根据与失败匹配的条件执行以下操作之一:
      用户或系统拒绝权限:

      使用错误回调传递 errorCallbackPERMISSION_DENIED

      注意: 浏览器权限 VS 操作系统权限
      超时:
      使用错误回调,传入 errorCallbackTIMEOUT
      数据获取错误或任何其他原因:
      使用错误回调传递 errorCallbackPOSITION_UNAVAILABLE

6.7 使用错误回调

当指示使用错误回调时,给定一个 PositionErrorCallback? callback 和一个 unsigned short code

  1. 如果 callback 为 null,则返回。
  2. error 为一个新创建的 GeolocationPositionError 实例, 其 code 属性初始化为 code
  3. 地理位置任务源排队一个任务, 该任务的步骤是调用 callback 并传入 « 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 类型,记录了当此 GeolocationPosition创建enableHighAccuracy 成员的值。

8.5 任务源

本规范定义了以下任务源

地理位置任务源
本规范用于在执行位置请求时,对非阻塞的 PositionCallbackPositionErrorCallback 进行排队。

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 属性

latitudelongitude 属性是以十进制度数指定的地理坐标。 latitudelongitude 属性表示位置, 指定为 [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 是通过执行以下步骤,使用 map positionDataEpochTimeStamp timestamp 和布尔值 isHighAccuracy 构造的:

  1. coords 为一个新创建的 GeolocationCoordinates 实例。
  2. 对于 positionData 中的每个 keyvalue
    1. coords 的名为 key 的属性设置为 value
  3. 返回一个新创建的 GeolocationPosition 实例, 其 coords 属性初始化为 coordstimestamp 属性初始化为 timestamp,并且其 [[isHighAccuracy]] 内部插槽设置为 isHighAccuracy

一个新的 GeolocationPosition 是通过执行以下步骤,使用 EpochTimeStamp timestamp 和布尔值 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),则将 heading 初始化为 NaN
  2. 返回一个新创建的 GeolocationPosition 实例, 其 coords 属性初始化为 coordstimestamp 属性初始化为 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 和一个 emulatedPositionData

  1. 断言 emulatedPositionData 为 null、 GeolocationCoordinatesGeolocationPositionError
  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 地理定位 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 年首次公开发布工作草案以来,地理定位 规范在规范性方面进行了以下更改:

自 2016 年第二版发布以来,本规范 进行了以下实质性更改:

有关完整的更改列表,请参阅提交历史记录

E. 参考文献

E.1 规范性参考文献

[hr-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]
权限。Marcos Caceres;Mike Taylor。W3C。2024年12月20日。W3C 工作草案。URL:https://www.w3.org/TR/permissions/
[permissions-policy]
权限策略。Ian Clelland。W3C。2025年2月10日。W3C 工作草案。URL:https://www.w3.org/TR/permissions-policy-1/
[RFC2119]
RFC 中用于表示需求级别的关键词。S. Bradner。IETF。1997年3月。最佳当前实践。URL:https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC 2119 关键词中大写与小写的歧义性。B. Leiba。IETF。2017年5月。最佳当前实践。URL:https://www.rfc-editor.org/rfc/rfc8174
[webidl]
Web IDL 标准。Edgar Chen;Timothy Gu。 WHATWG。动态标准。URL:https://webidl.spec.whatwg.org/
[WGS84]
世界大地测量系统 1984 (WGS 84)。国家地理空间情报局大地测量办公室。2008年。URL:https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84