JavaScript获取用户所在城市及地理位置

yizhihongxing

JavaScript获取用户所在城市及地理位置可以通过浏览器的Geolocation API或第三方API实现。以下为详细攻略:

1. 使用浏览器的Geolocation API

1.1 获取经纬度

使用Geolocation API可以获取用户的经纬度信息,从而进一步获取用户所在城市等位置信息。

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(function(position) {
    const latitude = position.coords.latitude;
    const longitude = position.coords.longitude;
    console.log('经度:', longitude, '纬度:', latitude);
  }, function() {
    console.log('获取位置信息失败!');
  });
} else {
  console.log('浏览器不支持Geolocation API!');
}

如上述代码所示,首先判断浏览器是否支持Geolocation API。若支持,则调用getCurrentPosition方法获取经纬度信息,并在回调函数中处理经纬度数据。

1.2 使用逆地理编码获取城市名

用户所在城市可以通过使用逆地理编码API将用户的经纬度信息转换为具体地址,并从中提取城市信息。

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(function(position) {
    const latitude = position.coords.latitude;
    const longitude = position.coords.longitude;
    const geocoder = new google.maps.Geocoder();
    geocoder.geocode({'location': {lat: latitude, lng: longitude}}, function(results, status) {
      if (status === 'OK') {
        if (results[0]) {
          let city = '';
          for (let i = 0; i < results[0].address_components.length; i++) {
            if (results[0].address_components[i].types[0] === 'locality' || results[0].address_components[i].types[0] === 'administrative_area_level_1') {
              city = results[0].address_components[i].long_name;
            }
          }
          console.log('城市:', city);
        } else {
          console.log('未找到地址信息!');
        }
      } else {
        console.log('逆地理编码失败!');
      }
    });
  }, function() {
    console.log('获取位置信息失败!');
  });
} else {
  console.log('浏览器不支持Geolocation API!');
}

在上述代码中,使用Google Maps JavaScript API中的Geocoder类将经纬度信息进行逆地理编码。成功获取地址信息后,遍历地址组件,找到类型为“locality”或“administrative_area_level_1”的组件,即可获取城市名称。

2. 使用第三方API

使用第三方API也可以获取用户所在位置信息,常见的API包括百度地图API、高德地图API等。以百度地图API为例:

//加载百度地图API
const BMap = window.BMap;
const geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
  if(this.getStatus() === BMAP_STATUS_SUCCESS) {
    const point = r.point;
    const geoc = new BMap.Geocoder();
    geoc.getLocation(point, function(rs){
      const addComp = rs.addressComponents;
      console.log('城市:', addComp.city);
    });   
  } else {
    console.log('获取位置信息失败!');
  }        
},{enableHighAccuracy: true});

使用百度地图API的Geolocation类获取经纬度信息,然后使用Geocoder类将经纬度信息转换为地址信息。从地址信息中提取城市名称即可。

示例说明

示例1:在网页中显示用户当前所在城市

<html>
  <head>
    <meta charset="UTF-8">
    <title>示例:获取用户所在城市</title>
  </head>
  <body>
    <p id="city"></p>

    <script>
      const cityEl = document.getElementById('city');
      if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position) {
          const latitude = position.coords.latitude;
          const longitude = position.coords.longitude;
          const geocoder = new google.maps.Geocoder();
          geocoder.geocode({'location': {lat: latitude, lng: longitude}}, function(results, status) {
            if (status === 'OK') {
              if (results[0]) {
                let city = '';
                for (let i = 0; i < results[0].address_components.length; i++) {
                  if (results[0].address_components[i].types[0] === 'locality' || results[0].address_components[i].types[0] === 'administrative_area_level_1') {
                    city = results[0].address_components[i].long_name;
                  }
                }
                cityEl.innerHTML = city;
              } else {
                console.log('未找到地址信息!');
              }
            } else {
              console.log('逆地理编码失败!');
            }
          });
        }, function() {
          console.log('获取位置信息失败!');
        });
      } else {
        console.log('浏览器不支持Geolocation API!');
      }
    </script>
  </body>
</html>

以上代码将用户所在城市信息显示在了页面中,使用了Google Maps JavaScript API中的Geocoder类进行逆地理编码。

示例2:在控制台输出用户当前所在位置的经纬度以及城市名

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(function(position) {
    const latitude = position.coords.latitude;
    const longitude = position.coords.longitude;
    console.log('经度:', longitude, '纬度:', latitude);
    const geoc = new BMap.Geocoder();
    geoc.getLocation(new BMap.Point(longitude, latitude), function(rs){
      const addComp = rs.addressComponents;
      console.log('城市:', addComp.city);
    });   
  }, function() {
    console.log('获取位置信息失败!');
  });
} else {
  console.log('浏览器不支持Geolocation API!');
}

以上代码将用户的经纬度信息以及城市名输出在了控制台中,使用了百度地图API进行位置信息获取。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript获取用户所在城市及地理位置 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 在JavaScript中处理时间之getHours()方法的使用

    在JavaScript中处理时间之getHours()方法的使用 getHours()是JavaScript的Date对象的方法,用于获取当前的小时数。这个方法返回一个0到23之间的整数,表示当前时间的小时数。 语法 date.getHours() 其中date是一个Date对象。 示例说明 示例1:获取当前时间的小时数 let now = new Date…

    JavaScript 2023年5月27日
    00
  • 利用js-cookie实现前端设置缓存数据定时失效

    利用js-cookie实现前端设置缓存数据定时失效的步骤如下: 第一步:安装和引入js-cookie 在使用js-cookie之前,需要在你的项目中安装它。你可以通过npm或者使用CDN的方式安装js-cookie。 在实际使用时,需要在你的HTML文件中引入js-cookie,例如: <script src="js-cookie.js&qu…

    JavaScript 2023年6月11日
    00
  • 学习javascript面向对象 理解javascript对象

    学习 JavaScript 面向对象编程(OOP)是成为一名 JavaScript 开发者的重要一步。理解 JavaScript 对象是理解 OOP 的基础。以下是学习 JavaScript 面向对象编程并理解 JavaScript 对象的完整攻略: 1. 了解面向对象编程 面向对象编程是将程序分解成一系列相互关联的对象。对象具有属性和方法,可以相互通信和交…

    JavaScript 2023年5月18日
    00
  • js 使FORM表单的所有元素不可编辑的示例代码

    js实现使FORM表单所有元素不可编辑的示例代码主要有以下三个步骤: 获取FORM表单中所有表单元素 遍历FORM表单中所有表单元素,将其属性设置为不可编辑 阻止表单的默认提交行为 下面分别讲解每个步骤的实现方法。 第一步:获取FORM表单所有表单元素 在JS中,可以通过querySelectorAll()方法获取FORM表单中所有的表单元素,如下所示: c…

    JavaScript 2023年6月10日
    00
  • 微信小程序 数据封装,参数传值等经验分享

    下面将详细讲解“微信小程序 数据封装,参数传值等经验分享”的完整攻略。 数据封装 在微信小程序中,不同的功能模块之间经常需要相互传递数据。但是为了提高程序的健壮性和可维护性,应该对数据进行封装。 一般而言,数据封装的实现方式有:函数返回值、全局变量、对象封装等。 函数返回值 函数返回值是最简单的数据封装方法。在通过函数调用获取返回结果时,可以将函数需要返回的…

    JavaScript 2023年6月11日
    00
  • 微信小程序实战之自定义模态弹窗(8)

    关于“微信小程序实战之自定义模态弹窗(8)”,我将从以下几个方面进行详细讲解: 创建自定义模态弹窗组件 在需要使用的页面中引入自定义组件 调用自定义组件并传递参数 示例说明 1. 创建自定义模态弹窗组件 创建自定义组件有两种方式,一种是使用 wepy 进行开发,另一种是使用 原生 小程序开发方式。下面是使用 原生 小程序开发方式创建自定义模态弹窗组件: 首先…

    JavaScript 2023年6月11日
    00
  • 基于js中this和event 的区别(详解)

    当我们在JavaScript中使用this和event时,可能会产生混淆。在JavaScript中,this指的是函数的上下文,而event指的是触发事件的对象。在本文中,将详细讲解在JavaScript中使用this和event的区别。 1. this 在JavaScript中,this指的是当前函数的上下文。在函数中使用this时,它将指向调用函数的对象…

    JavaScript 2023年6月10日
    00
  • 果断收藏9个Javascript代码高亮脚本

    收藏Javascript代码高亮脚本的完整攻略 1. 搜索Github Github上有很多Javascript代码高亮插件,可以通过搜索Github来找到适合自己项目的插件。在Github的搜索框中输入”javascript highlight”,即可得到相关插件。 示例:Search Github Code Highlight 1. 打开Github网站…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部