Web Geolocation(地理位置) API

定位用户的位置

HTML 地理位置 API 用于获取用户的地理位置。

由于这会损害隐私,因此除非用户批准,否则该功能不可用。

地理定位对于带有 GPS 的设备来说是最精确的,比如智能手机。

Geolocation API 支持所有浏览器:

YesYesYesYesYes
注意:从 Chrome 50 开始,地理定位 API 将只在 HTTPS 等安全上下文上工作。如果您的站点位于非安全源(如 HTTP)上,则获取用户位置的请求将不再有效。

使用 Geolocation API

getCurrentPosition()方法用于返回用户的位置。

下面的示例返回用户位置的纬度和经度:

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h2>JavaScript Geolocation API</h2>
  5. <p>点击按钮获取你的经纬度</p>
  6. <button onclick="getLocation()">试一试</button>
  7. <p id="demo">
  8. <script>
  9. const x = document.getElementById("demo");
  10. function getLocation() {
  11. if (navigator.geolocation) {
  12. navigator.geolocation.getCurrentPosition(showPosition);
  13. } else {
  14. x.innerHTML = "浏览器不支持 Geolocation ";
  15. }
  16. }
  17. function showPosition(position) {
  18. x.innerHTML = "经度: " + position.coords.longitude +
  19. "<br>纬度: " + position.coords.latitude;
  20. }
  21. </script>
  22. </body>
  23. </html>

举例说明:

  • 检查是否支持地理定位
  • 如果支持,请运行 getCurrentPosition() 方法。如果不是,则向用户显示消息
  • 如果 getCurrentPosition() 方法成功,它将坐标对象返回给参数(showPosition)中指定的函数
  • 函数的作用是:输出纬度和经度

上面的示例是一个非常基本的地理定位的脚本,没有错误处理机制。


处理错误和拒绝

getCurrentPosition() 方法的第二个参数用于处理错误。它指定在无法获取用户位置时要运行的函数:

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h2>JavaScript Geolocation API</h2>
  5. <p>点击按钮获取你的经纬度</p>
  6. <button onclick="getLocation()">试一试</button>
  7. <p id="demo">
  8. <script>
  9. const x = document.getElementById("demo");
  10. function getLocation() {
  11. if (navigator.geolocation) {
  12. navigator.geolocation.getCurrentPosition(showPosition, showError);
  13. } else {
  14. x.innerHTML = "浏览器不支持 Geolocation ";
  15. }
  16. }
  17. function showPosition(position) {
  18. x.innerHTML = "经度: " + position.coords.longitude +
  19. "<br>纬度: " + position.coords.latitude;
  20. }
  21. function showError(error) {
  22. switch(error.code) {
  23. case error.PERMISSION_DENIED:
  24. x.innerHTML = "用户拒绝 Geolocation 请求"
  25. break;
  26. case error.POSITION_UNAVAILABLE:
  27. x.innerHTML = "定位信息不可用"
  28. break;
  29. case error.TIMEOUT:
  30. x.innerHTML = "请求用户位置超时"
  31. break;
  32. case error.UNKNOWN_ERROR:
  33. x.innerHTML = "发生未知错误"
  34. break;
  35. }
  36. }
  37. </script>
  38. </body>
  39. </html>

在地图上展示结果

要在地图中显示结果,您需要访问地图服务,如百度地图。

在下面的示例中,返回的纬度和经度用于在百度地图中显示位置(使用静态图像):

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <script src="https://api.map.baidu.com/api?&v=1.0&ak=t5EoOoZ5CKssc31QvjpySYdBT1ADb8T6"></script>
  5. <h2>JavaScript Geolocation API</h2>
  6. <p>点击按钮获取你的经纬度</p>
  7. <button onclick="getLocation()">试一试</button>
  8. <div id="container" style="width:100%;height:350px;"></div>
  9. <script>
  10. const x = document.getElementById("demo");
  11. function getLocation() {
  12. if (navigator.geolocation) {
  13. navigator.geolocation.getCurrentPosition(showPosition);
  14. } else {
  15. x.innerHTML = "浏览器不支持 Geolocation ";
  16. }
  17. }
  18. function showPosition(position) {
  19. var map = new BMap.Map("container"); // 创建地图实例
  20. var point = new BMap.Point(position.coords.longitude,position.coords.latitude);// 创建点坐标
  21. map.centerAndZoom(point, 15); // 初始化地图,设置中心点坐标和地图级别
  22. }
  23. </script>
  24. </body>
  25. </html>

特定位置信息

本页演示了如何在地图上显示用户的位置。

Geolocation(地理定位)对于特定位置的信息也非常有用,例如:

  • 最新本地信息
  • 显示用户附近的兴趣点
  • 逐路段导航(GPS)

getCurrentPosition() 方法 - 返回数据

getCurrentPosition() 方法在成功时返回一个对象。始终返回纬度、经度和精确度属性。如果可用,则返回其他属性:

PropertyReturns
coords.latitude以十进制数字表示的纬度(始终返回)
coords.longitude以十进制数表示的经度(始终返回)
coords.accuracy位置的估算精度(始终返回)
coords.altitude平均海平面以上的海拔高度(如有返回)
coords.altitudeAccuracy位置高度的估算精度(如果可用,返回)
coords.heading航向为从北顺时针方向的度数(如果可用,返回)
coords.speed以米/秒为单位的速度(如果可用,返回)
timestamp响应的日期/时间(如果可用,返回)

Geolocation 对象 - 其他方法

地理定位对象还有其他有趣的方法:

  • watchPosition() - 返回用户的当前位置,并在用户移动时继续返回更新的位置(如汽车中的 GPS )。
  • clearWatch() -停止 watchPosition() 方法。

下面的示例显示了 watchPosition() 方法。你需要一个精确的 GPS 设备来测试这一点(比如智能手机):

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h2>JavaScript Geolocation API</h2>
  5. <p>点击按钮获取你的经纬度</p>
  6. <button onclick="getLocation()">试一试</button>
  7. <p id="demo">
  8. <script>
  9. const x = document.getElementById("demo");
  10. function getLocation() {
  11. if (navigator.geolocation) {
  12. navigator.geolocation.watchPosition(showPosition);
  13. } else {
  14. x.innerHTML = "浏览器不支持 Geolocation ";
  15. }
  16. }
  17. function showPosition(position) {
  18. x.innerHTML="经度: " + position.coords.longitude +
  19. "<br>纬度: " + position.coords.latitude;
  20. }
  21. </script>
  22. </body>
  23. </html>
注意: 请不要使用 Chrome 来运行实例。建议使用 IE。

分类导航