1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 前端获取用户地理定位的几种方式(Geolocation API 微信 腾讯地图)

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

时间:2022-01-11 01:17:56

相关推荐

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

文章目录

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

前言

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

移动端

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

因为pc设备上大都缺少GPS芯片,所以在PC上的定位主要通过IP精准定位服务


一、 Geolocation API

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

二、微信 SDK

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

1.引入jssdk

<script src="https://res./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, // 必填,签名,见附录1jsApiList: [...,'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('定位失败,请在微信中打开');}})}

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

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

1.引入js文件

引入封装好的JS文件,通过调用js api的接口获取定位信息

js引入地址:https://apis./tools/geolocation/min?key=yourkey&referer=myapp

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

function loadMap() {var url = 'https://apis./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 //误差范围,以米为单位}


总结

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。