前端获取用户地理定位的几种方式(Geolocation API,微信,腾讯地图)

2023-05-16

文章目录

  • 前言
  • 一、 Geolocation API
  • 二、微信 SDK
    • 1.引入jssdk
    • 2. 获取签名,注入配置
    • 3. 调用JS-SDK api 获取位置
  • 三、第三方服务(腾讯地图服务)
    • 1.引入js文件
    • 2.获取定位
  • 总结


前言

定位一般分为两种场景:移动端和PC,下面分别讲下这两个场景在使用定位过程中的一些注意事项。

  • 移动端
    移动端包括手机,pad和其它带有GPS定位芯片的智能设备(如手表、音箱等),移动端的系统包括iOS和Android。成功完成定位需要达成以下前提条件:
    • 系统GPS打开
    • 所使用的App或浏览器已获取定位权限
    • 对打开的页面允许使用定位
    • 对于iOS10以上系统和Android的一些版本已禁止在非HTTPS协议的域名下定位,请尽快将站点升级到HTTPS
  • PC端
    因为pc设备上大都缺少GPS芯片,所以在PC上的定位主要通过IP精准定位服务

一、 Geolocation API

这是HTML5新推出的地理位置API,但从性能和精确度上来,都不理想。尤其PC端精确地非常低且经常获取失败。用者甚少。

二、微信 SDK

这种适用于在微信H5场景应用(比如公众号H5),只能在微信浏览器内使用微信的SDK。

1.引入jssdk

<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

2. 获取签名,注入配置

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用。从后台获取配置信息,拿到appIdtimestampnonceStrsignature,通过wx.config注入配置信息

$http({
        method: 'GET',
        url: '/wechat/ticket/V3' + '?url=' + encodeURIComponent(location.href),
}).then(
        function successCallback (sign) {
                wx.config({
                    debug: false,
                    appId: sign.appId, // 必填,公众号的唯一标识
                    timestamp: sign.timestamp, // 必填,生成签名的时间戳
                    nonceStr: sign.nonceStr, // 必填,生成签名的随机串
                    signature: sign.signature, // 必填,签名,见附录1
                    jsApiList: [
                    	...,
                        'getLocation',
                        'openLocation',
                    ]
                });
        },
        function errorCallback (response) {
            console.info(response)
        }
);

3. 调用JS-SDK api 获取位置

    // 获取用户定位
    function getLocation() {
        return new Promise(function (resolve,reject) {
            if (browser.versions.weixin) {
                wx.ready(function () {
                    wx.getLocation({
                        type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
                        success: function (res) {
                            resolve({
                            	latitude: res.latitude,
                            	longitude: res.longitude,
                            	speed: res.speed, // 速度,以米/每秒计
            					accuracy: res.accuracy // 位置精度
                            });
                        },
                        cancel: function () {
                            reject('定位失败,请重新获取并允许定位');
                        },
                        fail: function () {
                            reject('定位失败,请检查您设备权限后重新尝试');
                        }
                    });
                });
                wx.error(function(err) {
      				// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
      				reject(`wxjsapi-error: ${err}`)
    			})
            } else {
                reject('定位失败,请在微信中打开');
            }
        })
    }

三、第三方服务(腾讯地图服务)

  • 在使用该服务前需要申请个人开发秘钥:https://lbs.qq.com/dev/console/key/manage
  • 前端定位组件:https://lbs.qq.com/webApi/component/componentGuide/componentGeolocation

1.引入js文件

引入封装好的JS文件,通过调用js api的接口获取定位信息
js引入地址:https://apis.map.qq.com/tools/geolocation/min?key=yourkey&referer=myapp

key : 必填,开发密钥(key)

function loadMap() {
    var url = 'https://apis.map.qq.com/tools/geolocation/min?key=[your key]&referer=location&callback=initMap'; // 成功回调为initMap方法
    var jsapi = document.createElement('script');
    jsapi.charset = 'utf-8';
    jsapi.src = url;
    document.head.appendChild(jsapi);
}

2.获取定位

window.initMap = function () {
        var geolocation = new qq.maps.Geolocation([your key]);
        geolocation.getLocation(function success(position) {
            $scope.position = position;
        }, function error(result) {
            console.log('获取定位失败', JSON.stringify(result));
        }, {
                timeout: 15000, // 默认值为10s;
                failTipFlag: true
        });
}

定位成功返回结果:

{   "module":"geolocation",
    "nation": "中国",
    "province": "广东省",
    "city":"深圳市",
    "district":"南山区",
    "adcode":"440305", //行政区ID,六位数字, 前两位是省,中间是市,后面两位是区,比如深圳市ID为440300
    "addr":"深圳大学杜鹃山(白石路北250米)",
    "lat":22.530001, //火星坐标(gcj02),腾讯、Google、高德通用
    "lng":113.935364,
    "accuracy":13 //误差范围,以米为单位
}

总结

获取用户定位在移动端业务场景上用的非常多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端获取用户地理定位的几种方式(Geolocation API,微信,腾讯地图) 的相关文章

随机推荐

  • 开科唯识笔试

    对于这次的笔试 xff0c 我只想说BiShi 几道编程题加一道SQL题 1 找出所有三位数中的水仙花数 public void getNarcissusNums int g 61 0 s 61 0 b 61 0 sum 61 0 for
  • JDBC批量插入

    最近项目中有用到JDBC技术 xff0c 存在大量数据要进行插入 xff0c 通过研究采用批量插入速度快的不是一点点 下面简单比较了一下普通插入与批量插入5W条数据的时间效率 常规插入 xff1a 耗时12952ms public stat
  • 面试经历---YY欢聚时代(2015年11月21日上午初试、25日下午复试)

    YY欢聚时代一年多前去面试过一次 xff0c 当时鄙视了 xff0c 在现在的公司呆了1年半了 xff0c 感觉做得很不爽 xff0c 而且薪资又不满意 xff0c 所以想找个新工作 xff0c 就想去YY面试 下面将两次YY面试的经历写出
  • exe应用程序无法启动,因为应用程序的并行配置不正确

    问题 xff1a exe应用程序无法启动 xff0c 因为应用程序的并行配置不正确 有关详细信息 xff0c 请参阅应用程序事件日志 xff0c 或使用命令行 sxstrace exe 工具 原因查找 xff1a 1 xff09 开始 所有
  • TortoiseSVN is locked in another working copy

    TortoiseSVN提交报错 TortoiseSVN is locked in another working copy 原因 xff1a 可能是因为打开了多个commit会话 xff0c 然后又去修改了提交文件的内容 xff0c 导致文
  • Java对接企业微信

    最近需要对接企业微信 xff0c 例如将风险测评结果推送给企业微信中对应的用户 xff0c 然后用户对结果进行查看与确认操作 xff0c 所以这里就涉及到两方面 xff1a 1 xff09 将外部系统内容推送到企业微信 xff1b 2 xf
  • 微众银行面试

    机缘巧合 xff0c 其实并没有换工作的想法 xff0c 却收到了微众的面试邀请 xff0c 就想着去看看当是增长见识吧 xff0c 因为已经好久没准备面试的事情了 xff0c 而且微众毕竟作为腾讯系的看起来好像也不错 说实话那边离地铁站是
  • #TP4056#--3.7V锂电池充放电电路(实践日志篇)

    成就更好的自己 本篇为小型电源的实践日志 xff0c 内附各种充电应用电路 xff0c 并开源TP4056应用电路AD的原理图和PCB xff1b 先放一点锂电池常识性的知识 xff1a 锂电池是一类由锂金属或锂合金为负极材料 使用非水电解
  • ROS四旋翼无人机快速上手指南(1):无人机系统硬件概述与指南简介

    成就更好的自己 ROS无人机快速上手指南旨在于让使用此无人机开发平台的比赛参赛人员 xff0c 算法设计人员 xff0c 无人机爱好者更加快速的了解底层控制运作原理 xff0c 从而缩短开发周期 xff0c 减少掉坑次数 xff0c 快速验
  • ROS四旋翼无人机快速上手指南(2):Ubuntu18.04与ROS系统

    成就更好的自己 目录 Jetson版Ubuntu以及ROS的安装 xff1a ROS特性及Nano开发问题 PX4与Gazebo仿真环境 ROS与MATMAB仿真 Jetson版Ubuntu以及ROS的安装 xff1a ROS机器人系统运行
  • ROS四旋翼无人机快速上手指南(4):阿木实验室PX4功能包飞行控制分析与讲解(重点章节)

    成就更好的自己 这一章详细讲解一下阿木实验室 AMOV 的开源项目px4 command功能包 xff0c 此功能包通过mavlink协议直接控制烧录px4固件的自驾仪 xff0c 还融合了来自各个传感器的位姿 xff0c 距离等信息 xf
  • ROS四旋翼无人机快速上手指南(5):快速部署上层算法的操作与思路

    成就更好的自己 经过本系列上一篇文章关于PX4 command飞行控制功能包的分析 xff0c 相信大家对于飞整个流程有个大概的了解 xff0c 本章将在此基础上详细讲解一下应用级算法构建的思路与操作方法 关于PX4 command飞行控制
  • USB系列-LibUSB使用指南(1)-Windows下的报错与踩坑

    成就更好的自己 时隔一年再次开始撰写博客 xff0c 这一年的时间经历了很多 xff0c 现在终于稳定下来 以后很长一段时间都能够稳定的学习和更新 时间将会聚焦于USB和PCIe的开发进行 xff0c 能和大家共同进步真的很高兴 本篇为US
  • rosdep init和rosdep update出现问题解决,以及ros编程问题

    如果你在执行 rosdep init 过程中出现以下错误 ERROR cannot download default sources list from https raw githubusercontent com ros rosdist
  • linux内核体系结构

    本节介绍了linux内核的编制模式和体制结构 xff0c 然后详细描述linux内核代码目录中组织形式以及子目录各个代码文件的主要功能以及基本调用的层次关系 一个完整可用的操作系统主要由4部分组成 xff1a 硬件 操作系统内核 操作系统服
  • 基于OpenLTE的4G移动通信网络实验指导书

    基于本人本科毕业设计的成果 xff0c 设计了一套基于开源SDR项目 OpenLTE的实验指导书 xff0c 可以指引读者通过平台源码 平台提供的实验和结合实验对3GPP规范的解读分析来更直观 更多元立体的学习无线通信技术 xff0c 而不
  • 一行代码实现数组中数据频次值

    问题 xff1a 一行代码实现统计数组中每个name出现的次数 数组示例如下 xff1a 期望结果 xff1a 39 哈哈 39 2 39 哈哈1 39 1 39 哈哈2 39 2 span class token keyword var
  • mac bash_profile报错导致所有命令失效解决办法

    项目场景 xff1a 搭建flutter环境时 xff0c 在mac下需要配置环境变量 问题描述 xff1a 配置环境变量 xff0c 需要修改 bash profile文件 xff0c 修改文件保存退出后 发现文件有报错 xff0c 导致
  • 我理解的“大前端”

    前言 随着业务场景越来越复杂 xff0c 前端技术也越来越丰富 xff0c 这几年也迎来爆发期 xff0c 大前端 的概念逐渐涌现 本图根据本人理解整理 xff0c 如有不足 xff0c 欢迎指正 xff0c 感谢 一 终端 PC端 PC端
  • 前端获取用户地理定位的几种方式(Geolocation API,微信,腾讯地图)

    文章目录 前言一 Geolocation API二 微信 SDK1 引入jssdk2 获取签名 xff0c 注入配置3 调用JS SDK api 获取位置 三 第三方服务 xff08 腾讯地图服务 xff09 1 引入js文件2 获取定位