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

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日

相关文章

  • 特殊日期提示功能的实现方法

    实现特殊日期提示功能的方法有很多种,但是在网站开发中,常用的方法主要有以下两种: 1. 使用 JavaScript 和 CSS 实现 步骤 在 HTML 中的 head 标签内引入 CSS 文件,用于设置日期提示框的样式; 在 body 标签内设置一个容器,用于存放日期提示框; 在 JavaScript 文件中实现以下逻辑: 获取当前日期,并根据需要将其转换…

    JavaScript 2023年6月10日
    00
  • JavaScript类型检测之typeof 和 instanceof 的缺陷与优化

    JavaScript类型检测之typeof 和 instanceof 的缺陷与优化 typeof的缺陷 在JavaScript中,typeof操作符用于检测一个变量或表达式的数据类型,返回一个字符串常量。 typeof variable typeof操作符返回的结果只有一下几种: “undefined”: 如果变量没有被赋值或者值为undefined “bo…

    JavaScript 2023年6月10日
    00
  • 分享JavaScript监听全部Ajax请求事件的方法

    下面就是关于“分享JavaScript监听全部Ajax请求事件的方法”的完整攻略。 标题 分享JavaScript监听全部Ajax请求事件的方法 正文 在前端开发中,JavaScript监听Ajax请求事件是非常重要的一个功能,常常需要根据请求事件做一些处理,比如显示Loading、禁用表单等等。以下是一种比较简单的方法,既可以使用原生的JavaScript…

    JavaScript 2023年6月11日
    00
  • 详解WordPress开发中get_current_screen()函数的使用

    当我们开发WordPress主题或插件时,可能需要根据当前页面的信息进行一些处理。此时,可以使用get_current_screen()函数来获取当前页面的信息。本文将详解get_current_screen()函数在WordPress开发中的使用方法。 一、get_current_screen()简介 get_current_screen()函数是Word…

    JavaScript 2023年6月11日
    00
  • AutoJs4.4.1免费版快速接通vscode调试脚本的操作方法

    下面是“AutoJs4.4.1免费版快速接通vscode调试脚本的操作方法”的完整攻略: 操作方法 安装AutoJs4.4.1免费版 首先需要安装AutoJs4.4.1免费版,可以在官网或者GitHub上下载相应的安装包。安装完成后,打开AutoJs应用。 安装AutoJs插件 在VSCode中,搜索安装“AutoJs插件”,下载安装后重新启动VSCode。…

    JavaScript 2023年6月11日
    00
  • javascript创建对象、对象继承的实用方式详解

    JavaScript创建对象、对象继承的实用方式详解 在JavaScript中,对象是一个重要的概念,能够帮助我们创建具有特定属性和方法的数据结构。为了更好地管理和组织代码,对象继承是一种常用的技术。本文将深入介绍JavaScript中如何创建对象以及不同的对象继承方式。 创建对象 构造函数 在JavaScript中,我们可以使用构造函数来创建一个对象。构造…

    JavaScript 2023年5月27日
    00
  • js 创建对象 经典模式全面了解

    JS创建对象-经典模式 在JavaScript中,对象是实例化一个类的一种方式。JS有很多种方式来创建对象,经典模式是其中一种,也是​​最基础的一种,但是在ES6中已经有了更加方便的方式来实现创建对象。 经典方式 那么什么是经典方式呢?经典方式指的是使用构造函数来实现创建对象。 构造函数创建对象 构造函数实际上就是普通的JS函数,在使用构造函数创建对象的时候…

    JavaScript 2023年5月27日
    00
  • JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数

    下面是关于 JavaScript 中 JSON.parse 函数和 JSON.stringify 函数的详细讲解。 JSON 简介 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于 JavaScript 的一个子集,可以被多种不同编程语言读取和写入。 在 JavaScript 中要想将 JSON 数据转…

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