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日

相关文章

  • JS对字符串编码的几种方式使用指南

    JS对字符串编码的几种方式使用指南 在前端开发中,我们经常需要处理字符串编码的相关问题,如将字符串进行编码、解码等。本文将介绍JS中对于字符串编码的几种方式以及它们的使用方法,同时提供相应的示例。 Unicode编码 Unicode编码是一种用于表示各种字符的标准,它规定了字符集、编码方式、具体字符的表示方法等,是目前最常用的字符编码标准之一。在JS中,我们…

    JavaScript 2023年5月20日
    00
  • 浅谈javascript中createElement事件

    浅谈JavaScript中createElement事件 在JavaScript中,使用createElement可以创建HTML元素,这对于网站的动态创建和更新非常有用。本文将详细介绍createElement事件的用法及示例。 createElement用法 createElement() 方法用于创建一个新的 HTML 元素。可以使用以下语法来调用该方…

    JavaScript 2023年6月10日
    00
  • 基于Node的React图片上传组件实现实例代码

    让我来介绍一下实现这个React图片上传组件的完整过程和代码示例。 概述 React是一个流行的JavaScript库,用于开发用户界面。本方案提供了一种基于Node环境使用React实现图片上传的方式。在实现过程中,我们将使用以下技术和库: React:使用React构建用户界面组件 React Dropzone:使用React Dropzone库实现文件…

    JavaScript 2023年6月11日
    00
  • express项目的创建

    前言 前端开发者若要进行后端开发,大多都会选择node.js,在node生态下是有大量框架的,其中最受新手喜爱的便是老牌的express.js,接下来我们就从零创建一个express项目。 安装node 在这里:https://nodejs.org/dist/v16.14.0/node-v16.14.0-x64.msi ,下载后直接安装。 安装完成后,验证是…

    JavaScript 2023年4月17日
    00
  • JavaScript Reduce使用详解

    JavaScript Reduce使用详解 在JavaScript中,数组的reduce方法可以让我们使用自定义的函数将数组中的所有元素汇总为一个值,该值既可以是一个数字,也可以是一个对象或数组。 reduce方法的语法 reduce方法的语法如下: array.reduce(callback[, initialValue]) 其中,参数callback为一…

    JavaScript 2023年5月27日
    00
  • js实现将json数组显示前台table中

    非常好的问题。下面是“js实现将json数组显示前台table中”的完整攻略,包括两条示例说明。 使用JS将JSON数组显示在前台的Table中 步骤一:获取JSON数据 在此示例中,我们将使用一个包含JSON数据的外部文本文件,文件名为”data.json”。该JSON文件以数组形式存储数据,并具有以下数据字段:Name、Age、Gender。 为了将其读…

    JavaScript 2023年5月27日
    00
  • XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)

    XMLHTTP 是浏览器内置的一种 HTTP 请求方式,可以通过 JavaScript 来进行调用发送 HTTP 请求,从而得到响应数据。在使用 XMLHTTP 时,常常会出现乱码的现象。有时是因为发送请求的页面本身的编码格式设置错误,使得接收到的数据乱码。也有可能是接收到数据中文字符的编码格式与前端页面编码格式不一致导致。 针对这种情况,我们可以采取一些措…

    JavaScript 2023年5月19日
    00
  • 在浏览器测试JavaScript的方法小结

    在浏览器中测试JavaScript可以通过多种方式实现,下面是一些常见的浏览器测试JavaScript的方法。 方法一:使用浏览器的控制台 浏览器的控制台是测试JavaScript代码最常用的环境之一。下面是使用控制台进行测试的步骤: 打开浏览器,在需要调试的页面上右键单击,选择“检查元素”(或按快捷键F12)。 在打开的开发者工具窗口中,切换到“控制台”选…

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