HTML 地理定位 API
地理定位 API 用于获取用户的当前位置。
定位用户位置
地理定位 API 用于访问用户的当前位置。
由于这可能涉及隐私问题,因此除非用户批准,否则位置信息不可用。
注意:地理定位 API 仅在安全上下文(如 HTTPS)中可用。
提示:对于带有 GPS 的设备(如智能手机或智能手表),地理定位 API 的准确性最高。
浏览器支持
表格中的数字指定了完全支持地理定位的第一个浏览器版本。
| Chrome | Edge | Firefox | Safari | Opera |
|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Opera |
| 5.0 | 12.0 | 3.5 | 5.0 | 10.6 |
使用 HTML 地理定位 API
地理定位 API 通过调用 navigator.geolocation 来访问。这将使浏览器询问用户是否允许访问其位置数据。如果用户接受,浏览器将搜索设备上可用的最佳功能来访问此信息(例如 GPS)。
getCurrentPosition() 方法用于返回用户的当前位置。
下面的示例返回用户当前位置的纬度和经度:
实例
<script>
const x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(success, error);
} else {
x.innerHTML = "此浏览器不支持地理定位。";
}
}
function success(position) {
x.innerHTML = "纬度:" + position.coords.latitude +
"<br>经度:" + position.coords.longitude;
}
function error() {
alert("抱歉,无法获取位置信息。");
}
</script>
示例解释:
- 检查是否支持地理定位
- 如果支持地理定位,则运行
getCurrentPosition()方法。否则,向用户显示一条消息 success()函数以纬度和经度输出用户的位置- 如果在
getCurrentPosition()中浏览器检索到错误,error()函数会弹出一个文本警告
错误处理和拒绝
getCurrentPosition() 方法的第二个参数用于处理错误。它指定一个函数,在获取用户位置失败时运行。
下面是一个更具体的错误处理示例:
实例
function error(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
x.innerHTML = "用户拒绝了地理定位请求。"
break;
case error.POSITION_UNAVAILABLE:
x.innerHTML = "位置信息不可用。"
break;
case error.TIMEOUT:
x.innerHTML = "获取用户位置的请求超时。"
break;
case error.UNKNOWN_ERROR:
x.innerHTML = "发生未知错误。"
break;
}
}
特定位置的信息
地理定位对于特定位置的信息也非常有用,例如:
- 最新的本地信息
- 显示用户附近的兴趣点
- 逐向导航(GPS)
getCurrentPosition() 方法 - 返回数据
getCurrentPosition() 方法在成功时返回一个对象。纬度、经度和精度属性始终返回。如果可用,则返回其他属性:
| 属性 | 描述 |
|---|---|
| coords.latitude | 以十进制数表示的纬度(始终返回) |
| coords.longitude | 以十进制数表示的经度(始终返回) |
| coords.accuracy | 位置的精度(始终返回) |
| coords.altitude | 海拔高度,单位米,相对于平均海平面(如果可用则返回) |
| coords.altitudeAccuracy | 位置的海拔精度(如果可用则返回) |
| coords.heading | 朝向,以从北顺时针方向的度数表示(如果可用则返回) |
| coords.speed | 速度,单位米/秒(如果可用则返回) |
| timestamp | 响应的日期/时间(如果可用则返回) |
地理定位对象 - 其他有趣的方法
地理定位对象还有其他有趣的方法:
watchPosition()- 返回用户的当前位置,并在用户移动时持续返回更新的位置(如汽车中的 GPS)。clearWatch()- 停止watchPosition()方法。
下面的示例展示了 watchPosition() 方法。您需要一个精确的 GPS 设备来测试此方法(如智能手机):
实例
<script>
const x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.watchPosition(success, error);
} else {
x.innerHTML = "此浏览器不支持地理定位。";
}
}
function success(position) {
x.innerHTML = "纬度:" + position.coords.latitude +
"<br>经度:" + position.coords.longitude;
}
function error(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
x.innerHTML = "用户拒绝了地理定位请求。"
break;
case error.POSITION_UNAVAILABLE:
x.innerHTML = "Location information is unavailable."
break;
case error.TIMEOUT:
x.innerHTML = "位置信息不可用。"
break;
case error.UNKNOWN_ERROR:
x.innerHTML = "发生未知错误。"
break;
}
}
</script>