coordinates 是 navigator.geolocation.getCurrentPosition() 成功回调中 position.coords 返回的只读对象,包含 latitude、longitude、accuracy 等不可枚举属性,单位分别为十进制度数和米,accuracy 表示95%置信区间的半径误差。

getCurrentPosition() 返回的 coordinates 是什么
调用 navigator.geolocation.getCurrentPosition() 成功后,回调函数收到的 position 对象里,position.coords 就是你要的 coordinates。它不是字符串或数组,而是一个只读对象,包含经纬度、海拔、精度等字段。
常见错误是直接打印 coords 看不到结构,或者误以为它是可修改的普通对象 —— 实际上所有属性都带 [[Enumerable]]: false,console.log 默认不展开,得用 console.dir(coords) 或逐个访问属性。
latitude / longitude / accuracy 这几个关键字段怎么理解
coords.latitude 和 coords.longitude 是 WGS84 坐标系下的十进制度数(如 39.9042, 116.4074),不是度分秒,也不带方向字母(N/E/S/W 已由正负号表示)。
coords.accuracy 单位是米,表示经纬度坐标的**半径误差范围**(95% 置信区间),不是“越小越好”的绝对指标 —— 它取决于设备能力、信号环境和权限级别(比如仅 WiFi 定位时 accuracy 可能 > 1000 米)。
立即学习“前端免费学习笔记(深入)”;
-
coords.altitude:海拔(米),可能为null(多数手机无气压计或未启用) -
coords.altitudeAccuracy:海拔误差(米),常为null -
coords.heading:设备朝向(0–360°,正北为 0),仅在移动中且有磁力计/GPS 时有效,静止时通常为null -
coords.speed:地面速度(m/s),同样依赖运动状态和传感器,静止时返回0或null
watchPosition() 的 coordinates 会自动更新吗
会,但不是“实时流式推送”。navigator.geolocation.watchPosition() 在满足以下任一条件时触发新回调:
– 位置变化超过 options.enableHighAccuracy 所隐含的阈值
– options.maximumAge 过期(默认 0,即不用缓存)
– 系统判定精度显著提升(如从 WiFi 切换到 GPS)
注意:watchPosition() 不保证固定时间间隔更新,也不响应手动拖动地图等 UI 操作。如果需要每秒获取一次,必须自己用 setInterval + getCurrentPosition,但会触发多次权限提示且耗电更高。
示例中常忽略错误处理,实际应始终传入第二个回调函数:
const watchId = navigator.geolocation.watchPosition(
(pos) => {
console.log(pos.coords.latitude, pos.coords.longitude);
},
(err) => {
console.error("定位失败:", err.code, err.message);
},
{ enableHighAccuracy: true, timeout: 10000, maximumAge: 30000 }
);
为什么 coords.accuracy 有时是 Infinity 或 undefined
coords.accuracy === Infinity 表示浏览器无法估算误差范围,常见于:
– 后台页面(标签页非激活状态)
– 使用了过时的模拟位置(如 Chrome DevTools 的 Sensors 面板未关闭)
– 某些 Android WebView 中未正确配置定位权限链
coords 本身为 undefined 的情况不存在 —— 只要成功进入 success 回调,position.coords 一定存在(规范强制要求)。但其中某些字段(如 altitude)可能为 null 或 undefined,使用前必须判空:
if (pos.coords && typeof pos.coords.latitude === 'number') {
const lat = pos.coords.latitude;
const lng = pos.coords.longitude;
const acc = pos.coords.accuracy || 0; // 避免 Infinity 影响业务逻辑
}
真正容易被忽略的是:accuracy 值极大(如 5000+)时,坐标可能来自 IP 地址粗略估算,和用户真实位置偏差几十公里都很正常 —— 这类数据不能用于签到、围栏等强位置敏感场景。











