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。