Web Geolocation(地理位置) API
定位用户的位置
HTML 地理位置 API 用于获取用户的地理位置。
由于这会损害隐私,因此除非用户批准,否则该功能不可用。
地理定位对于带有 GPS 的设备来说是最精确的,比如智能手机。
Geolocation API 支持所有浏览器:
Yes | Yes | Yes | Yes | Yes |
注意:从 Chrome 50 开始,地理定位 API 将只在 HTTPS 等安全上下文上工作。如果您的站点位于非安全源(如 HTTP)上,则获取用户位置的请求将不再有效。
使用 Geolocation API
getCurrentPosition()
方法用于返回用户的位置。
下面的示例返回用户位置的纬度和经度:
实例
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Geolocation API</h2>
<p>点击按钮获取你的经纬度</p>
<button onclick="getLocation()">试一试</button>
<p id="demo">
<script>
const x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "浏览器不支持 Geolocation ";
}
}
function showPosition(position) {
x.innerHTML = "经度: " + position.coords.longitude +
"<br>纬度: " + position.coords.latitude;
}
</script>
</body>
</html>
举例说明:
- 检查是否支持地理定位
- 如果支持,请运行 getCurrentPosition() 方法。如果不是,则向用户显示消息
- 如果 getCurrentPosition() 方法成功,它将坐标对象返回给参数(showPosition)中指定的函数
- 函数的作用是:输出纬度和经度
上面的示例是一个非常基本的地理定位的脚本,没有错误处理机制。
处理错误和拒绝
getCurrentPosition()
方法的第二个参数用于处理错误。它指定在无法获取用户位置时要运行的函数:
实例
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Geolocation API</h2>
<p>点击按钮获取你的经纬度</p>
<button onclick="getLocation()">试一试</button>
<p id="demo">
<script>
const x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition, showError);
} else {
x.innerHTML = "浏览器不支持 Geolocation ";
}
}
function showPosition(position) {
x.innerHTML = "经度: " + position.coords.longitude +
"<br>纬度: " + position.coords.latitude;
}
function showError(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
x.innerHTML = "用户拒绝 Geolocation 请求"
break;
case error.POSITION_UNAVAILABLE:
x.innerHTML = "定位信息不可用"
break;
case error.TIMEOUT:
x.innerHTML = "请求用户位置超时"
break;
case error.UNKNOWN_ERROR:
x.innerHTML = "发生未知错误"
break;
}
}
</script>
</body>
</html>
在地图上展示结果
要在地图中显示结果,您需要访问地图服务,如百度地图。
在下面的示例中,返回的纬度和经度用于在百度地图中显示位置(使用静态图像):
实例
<!DOCTYPE html>
<html>
<body>
<script src="https://api.map.baidu.com/api?&v=1.0&ak=t5EoOoZ5CKssc31QvjpySYdBT1ADb8T6"></script>
<h2>JavaScript Geolocation API</h2>
<p>点击按钮获取你的经纬度</p>
<button onclick="getLocation()">试一试</button>
<div id="container" style="width:100%;height:350px;"></div>
<script>
const x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "浏览器不支持 Geolocation ";
}
}
function showPosition(position) {
var map = new BMap.Map("container"); // 创建地图实例
var point = new BMap.Point(position.coords.longitude,position.coords.latitude);// 创建点坐标
map.centerAndZoom(point, 15); // 初始化地图,设置中心点坐标和地图级别
}
</script>
</body>
</html>
特定位置信息
本页演示了如何在地图上显示用户的位置。
Geolocation(地理定位)对于特定位置的信息也非常有用,例如:
- 最新本地信息
- 显示用户附近的兴趣点
- 逐路段导航(GPS)
getCurrentPosition() 方法 - 返回数据
getCurrentPosition()
方法在成功时返回一个对象。始终返回纬度、经度和精确度属性。如果可用,则返回其他属性:
Property | Returns |
---|---|
coords.latitude | 以十进制数字表示的纬度(始终返回) |
coords.longitude | 以十进制数表示的经度(始终返回) |
coords.accuracy | 位置的估算精度(始终返回) |
coords.altitude | 平均海平面以上的海拔高度(如有返回) |
coords.altitudeAccuracy | 位置高度的估算精度(如果可用,返回) |
coords.heading | 航向为从北顺时针方向的度数(如果可用,返回) |
coords.speed | 以米/秒为单位的速度(如果可用,返回) |
timestamp | 响应的日期/时间(如果可用,返回) |
Geolocation 对象 - 其他方法
地理定位对象还有其他有趣的方法:
- watchPosition() - 返回用户的当前位置,并在用户移动时继续返回更新的位置(如汽车中的 GPS )。
- clearWatch() -停止 watchPosition() 方法。
下面的示例显示了 watchPosition()
方法。你需要一个精确的 GPS 设备来测试这一点(比如智能手机):
实例
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Geolocation API</h2>
<p>点击按钮获取你的经纬度</p>
<button onclick="getLocation()">试一试</button>
<p id="demo">
<script>
const x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.watchPosition(showPosition);
} else {
x.innerHTML = "浏览器不支持 Geolocation ";
}
}
function showPosition(position) {
x.innerHTML="经度: " + position.coords.longitude +
"<br>纬度: " + position.coords.latitude;
}
</script>
</body>
</html>
注意: 请不要使用 Chrome 来运行实例。建议使用 IE。