记录一下自己解决在vue移动端上定位的问题

先说下需求:进入首页后获取到用户地址,并根据地址检索附近POI

首先我是直接使用百度地图api的getCurrentPosition方法获取经纬度

先引入百度地图api,过程官网上都有

geolocation.getCurrentPosition(function (r) {

let lng = r.longitude

let lat = r.latitude

let pointBak = new BMap.Point(Number(lng), Number(lat));

getUserLocation(pointBak) //获取到经纬度后进行相应操作的方法

console.log('lng>>lng=',lng)

console.log('lat>>lat=',lat)

})

说真的这种方法是真的方便,不过在ios与安卓的微信浏览器上相差有点大,安卓微信浏览器上也不是说不能获取到,直接偏差了数个城市,

然后我以为是兼容问题,研究好久也没找到是为什么,所以后面我就直接在外层加上了一层使用h5获取经纬度的方法,获取失败走百度的

贴代码:

if(navigator.geolocation){

navigator.geolocation.getCurrentPosition(function(success){

// alert('h5获取成功')

console.log('successsuccesssuccesssuccesssuccess>>>>',success)

console.log('successsuccesssuccesssuccesssuccess>>>>',success)

// 获取成功取出经纬度(gps,需要转换

lng = success.coords.longitude;

lat = success.coords.latitude;

pointArr.push({lng:lng,lat:lat});

// gps转换百度坐标方法

convertor.translate(pointArr, 1, 5, function (item) {

console.log('item>>>=',item)

// 转换后的经纬度坐标

lng = item.points[0].lng

lat = item.points[0].lat

})

},function (error) {

// alert('h5获取失败')

geolocation.getCurrentPosition(function (r) {

lng = r.longitude

lat = r.latitude

console.log('lng>>lng=',lng)

console.log('lat>>lat=',lat)

})

// console.log('微信>>>=',that.$wx)

},{

enableHighAcuracy: true, // 允许精确获取

timeout: 5000, // 超时时间

maximumAge: 1000

})

}else{

that.$relogin('您的设备暂不支持定位功能!',false)

console.log("当前系统不支持GPS API")

}

首先h5获取成功后拿到的经纬度是GPS坐标系,使用此坐标需要通过经纬度转换,比如:

var convertor = new BMap.Convertor();

pointArr.push({lng:lng,lat:lat});

convertor.translate(pointArr, 1, 5, function (item) {

console.log('item>>>=',item)

// 转换后的经纬度坐标

lng = item.points[0].lng

lat = item.points[0].lat

let pointBak = new BMap.Point(lng, lat);

getUserLocation(pointBak) //拿到经纬度后进行相应操作的函数

})

然后就可以通过这个经纬度查询当前地理位置并检索附近小区了,这里使用的是百度检索POI的方法

贴代码:

var options = { //options 作为百度localsearch方法的一个入参【以对象形式

renderOptions : {

map : map,

},

onSearchComplete: function(results){ //onSearchComplete必须字段,带回调参数

// 检索周边小区,状态正确

if (local.getStatus() == BMAP_STATUS_SUCCESS){

// results就是检索出来的合集。。。。

sessionStorage.setItem('nearIr',JSON.stringify(results.Hr))

}

},

pageCapacity : 10

};

var local = new BMap.LocalSearch(map, options); //map为百度容器实例,我自己觉得不是很必要

local.search(that.sendData.address+",小区"); //这里local.search入参其实是一个以逗号分隔的字符串,很明显的能看到我使用一个变量与“,小区”拼接

然后到这里呢还是有一个问题,h5获取经纬度对于ios10.0版本及以上不支持貌似,好像是因为国家安全政策什么额不能用HTTP进行获取,要改为HTTPS,总之我不是太懂额样子

然后刚好新增了一个项目分享的功能,那正好使用微信jssdk全解决了,微信jssdk配置方法官方文档也都有,我认为我阐述的没有官方文档清楚,所以去官网看吧,配置完成之后呢

最后我的代码就变成了这个样子:

this.$nextTick(function () {

var geolocation = new BMap.Geolocation();

var map = new BMap.Map("allmap");

var that = this;

var lng;

var lat;

var convertor = new BMap.Convertor();

var geo = new BMap.Geocoder();

var pointArr = [];

var locat = window.location;

var options = {

renderOptions : {

map : map,

},

onSearchComplete: function(results){

// 检索周边小区,状态正确

if (local.getStatus() == BMAP_STATUS_SUCCESS){

sessionStorage.setItem('nearIr',JSON.stringify(results.Hr))

}

},

pageCapacity : 10

};

var local = new BMap.LocalSearch(map, options);

// 判断微信

isWeiXin()

// noWeChat()

function isWeiXin(){

//window.navigator.userAgent属性包含了浏览器类型、版本、操作系统类型、浏览器引擎类型等信息,这个属性可以用来判断浏览器类型

var ua = window.navigator.userAgent.toLowerCase();

//通过正则表达式匹配ua中是否含有MicroMessenger字符串

if(ua.match(/MicroMessenger/i) == 'micromessenger'){

// 微信执行微信获取经纬度

weChat()

}else{

// 不是微信执行浏览器h5获取经纬度

noWeChat()

}

}

function weChat() {

// 微信配置

let localUrl = locat.href.split('#')[0];

console.log(localUrl)

// let getsign = "http://jsyizhifu.js118114.com/haobai_task/getSingnWx?url=" + encodeURIComponent(localUrl);

that.$api.getLocaltion({url:localUrl}).then(res=>{

console.log('微信请求成功>>>res=',res)

that.$wx.config({

debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

appId: '********************', // 必填,公众号的唯一标识

timestamp: res.data.timestamp, // 必填,生成签名的时间戳

nonceStr: res.data.nonceStr, // 必填,生成签名的随机串

signature: res.data.signature,// 必填,签名,见附录1

// 必填,需要使用的JS接口列表,所有JS接口列表见官方js接口

// 这里配置获取地理位置所需要的接口权限

jsApiList: ['getLocation']

});

// console.log('微信请求成功>>>=',wx)

that.$wx.ready(function(){

console.log('进入ready方法。。。')

that.$wx.getLocation({

type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'

success: function (res) {

console.log('微信获取地址成功')

let lng = res.longitude

let lat = res.latitude

pointArr.push({lng:lng,lat:lat});

// gps转换百度坐标方法

convertor.translate(pointArr, 1, 5, function (item) {

console.log('item>>>=',item)

// 转换后的经纬度坐标

lng = item.points[0].lng

lat = item.points[0].lat

})

},

fail: function(res) {

console.log('微信获取地址失败>>>',JSON.stringify(res))

}

})

});

that.$wx.error(function(){

console.log('微信执行失败')

});

}).catch(err=>{

console.log('微信权限接口请求失败>>>=',err)

})

}

function noWeChat() {

if(navigator.geolocation){

navigator.geolocation.getCurrentPosition(function(success){

// alert('h5获取成功')

// 获取成功取出经纬度(gps,需要转换

lng = success.coords.longitude;

lat = success.coords.latitude;

pointArr.push({lng:lng,lat:lat});

// gps转换百度坐标方法

convertor.translate(pointArr, 1, 5, function (item) {

console.log('item>>>=',item)

// 转换后的经纬度坐标

lng = item.points[0].lng

lat = item.points[0].lat

})

},function (error) {

// alert('h5获取失败')

geolocation.getCurrentPosition(function (r) {

lng = r.longitude

lat = r.latitude

})

// console.log('微信>>>=',that.$wx)

},{

enableHighAcuracy: true, // 允许精确获取

timeout: 5000, // 超时时间

maximumAge: 1000

})

}else{

that.$relogin('您的设备暂不支持定位功能!')

console.log("当前系统不支持GPS API")

}

}

function getUserLocation(point) { //point传入new point实例

geo.getLocation(point, (res) => {

console.log('res>>>>=',res)

});

}

})

上面那个就是全部代码,没有配置好微信config或者不需要用到微信jssdk的小伙伴可以直接执行noWeChat()方法,在正确引入百度地图api后应当可以正常运行的

所以欢迎有自己见解的小伙伴跟我一起讨论呀

vue移动端获取定位_关于关于vue移动端经纬度定位以及POI检索周边小区相关推荐

  1. vue的props传数组_详解vue.js之props传递参数

    本篇文章通过demo实例给大家详细分析了props传递参数的用法以及遇到问题后的解决办法,以下是全部内容. 前段时间用vue做一个后台管理系统,其中每一页都需要一个表格来展示信息.自然就想到了将表格提 ...

  2. 高端物理学名词_什么是物理高端备课?

    邢红军 首都师范大学 物理系 教授 博士 物理教学论博士生导师 各位老师,大家晚上好!首先感谢杨德发老师的盛情邀请,让我有机会与老师们就物理高端备课进行交流,我欣然接受.同时感谢朱行建老师在他的群转播 ...

  3. vue输入框输入触发事件_详解.vue文件中监听input输入事件(oninput)

    详解.vue文件中监听input输入事件(oninput) .vue文件其实是一个组件,关于它的说明我之前也写过一篇文章,地址:.vue文件,今天这篇文章要讲的是.vue文件中监听input的输入值变 ...

  4. vue 代理设置 访问图片_详解Vue源码之数据的代理访问

    概念解析: 1) 数据代理: 通过一个对象代理对另一个对象(在前一个对象内部)中属性的操作(读/写) 2) vue 数据代理: 通过 vm 对象(即this)来代理 data 对象中所有属性的操作 3 ...

  5. vue img src 动态赋值_一个基于Vue的开源延迟加载插件——vuelazyload

    介绍 vue-lazyload是一个基于Vue的延迟加载插件,用于延迟加载Vue组件或者图像. Github https://github.com/hilongjw/vue-lazyload 特点 轻 ...

  6. vue单文件props写法_详解Vue 单文件组件的三种写法

    详解Vue 单文件组件的三种写法 JS构造选项写法 export defaul { data, methods, ...} JS class写法 @Component export default c ...

  7. python卡尔曼滤波室内定位_基于核函数与卡尔曼滤波的室内定位方法

    随着当今社会的发展,基于位置的服务变得越来越重要.室外定位技术以全球定位系统为基础,包括美国的GPS定位系统,俄罗斯的GLONASS定位系统以及我国自主研制的北斗卫星导航定位系统,利用这些定位系统可以 ...

  8. 煤矿,隧道,管廊高精度人员定位_基于UWB技术的TWR一维定位方案介绍

    针对工业/汽车.物流仓储.传统制造业.电力行业.医疗保健.高危化工业.隧道/管廊.建筑工地.公检司法的重点安保区域等高精度人员定位需求,SKYLAB推出了基于UWB技术的定位系统.通过在定位区域内部署 ...

  9. 前端vue适配不同的分辨率_浅析 React / Vue 跨端渲染原理与实现

    当下的前端同学对 React 与 Vue 的组件化开发想必不会陌生,RN 与 Weex 的跨界也常为我们所津津乐道.UI 框架在实现这样的跨端渲染时需要做哪些工作,其技术方案能否借鉴乃至应用到我们自己 ...

  10. vue如何输出一个值_如何利用vue获取当前点击的元素并传值(图文教程) -

    thinkphp开发的一个项目,登录成功后又跳转到登录页面,在提交信息后输出session都是正常的,没有问题,但是页面跳转后,session出现丢失现象,无法正常完成登陆.通过查找资料,发现原来是b ...

最新文章

  1. Oracle数据库 之 删除RMAN备份
  2. java 函数参数 返回值_java中如何用函数返回值作为post提交的参数?
  3. 浅谈文本词向量转换的机制embedding
  4. 基础回顾(Map、==/equals()/hashcode())
  5. ARUBA与蓝海无线PORTAL对接配置
  6. 无代码iVX编程实现简单跳跃超级玛丽游戏
  7. 给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y,既定义宏的形式为 #define LEAP_YEAR(y) (读者设计的字符串)
  8. python数据可视化柱状图_python数据可视化示例柱状图
  9. 22解析函数的级数表示(一)
  10. python编程入门指南-编程入门指南
  11. Tensorflow(r1.4)API--tf.nn.dropout
  12. javascript-文档结构遍历
  13. 一个超级简单的HTML模板框架源代码以及使用示例
  14. apache部署mo_python
  15. 双网口工业路由器 网络传输层的“常青树”
  16. 复旦计算机学院软件工程,2019年复旦961软件工程专硕考研初试363+复试经验分享...
  17. python千位分隔符_31 python中format方法:字段宽度、精度和千位分隔符 符号、对齐和用0填充...
  18. C#学习笔记:什么是哈希值
  19. 路由器Telnet及ACL配置
  20. 微信公众号获取用户地理位置

热门文章

  1. 《微积分:一元函数微分学》——导数公式
  2. veeam虚拟机备份及恢复
  3. 优启通制作系统u盘_优启通u盘启动盘制作工具BIOS+UEFI三分区双启版
  4. python计算对数收益率_对数收益率怎么转成年化收益率?怎么计算夏普比率?
  5. 第四周作业-多线程编程
  6. Docker配置阿里云镜像加速器以及镜像的常用操作命令
  7. 模糊控制matlab论文,基于MATLAB的锅炉水位模糊控制系统研究( 开题报告+文献综述+论文+外文翻译 )...
  8. 【史上最全】常用USB转串口芯片特性比较
  9. 于歆杰pdf 电路原理_buck电路原理(于歆杰 电路原理pdf)
  10. 秒搜编程好书 就用这个Python写的爬虫网站