微信小程序实现获取用户的准确位置
微信小程序有能力获取到用户的具体位置,但是函数获取到的是经纬度,再转化为具体的物理位置就有很多问题,经常听别的开发者说定位不准,就是这个经纬度转物理位置出的问题。
小程序获取用户位置:
wx.getLocation({ type: 'wgs84', success: function(res) { var latitude = res.latitude var longitude = res.longitude var speed = res.speed var accuracy = res.accuracy } })
wx.getLocation(OBJECT) 获取当前的地理位置、速度。当用户离开小程序后,此接口无法调用;当用户点击 显示在聊天顶部 时,此接口可继续调用。
这样获取到的定位不是很准确,这样的原因是转百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间没有进行互转。
当前互联网地图的坐标系现状
地球坐标 (WGS84)
国际标准,从专业GPS 设备中取出的数据的坐标系
国际地图提供商使用的坐标系
火星坐标 (GCJ-02)也叫国测局坐标系
中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系
国家规定: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。
百度坐标 (BD-09)
百度标准,百度 SDK,百度地图,Geocoding 使用,本来就乱了,百度又在火星坐标上来个二次加密。
开发过程需要注意的事
从设备获取经纬度(GPS)坐标
- 如果使用的是百度 SDK 那么可以获得百度坐标(BD09)或者火星坐标(GCJ02),默认是 BD09
- 如果使用的是 IOS 的原生定位库,那么获得的坐标是 WGS84
- 如果使用的是高德 SDK,那么获取的坐标是 GCJ02
经纬度转地理位置
如果使用 腾讯地图,腾讯地图有一个专门针对小程序的 JSSDK ,使用起来自非常的方便:
1、引入SDK核心类
var QQMapWX = require('qqmap-wx-jssdk.js'); var qqmapsdk;
2、实例化API核心类
qqmapsdk = new QQMapWX({ key: '申请的key' });
3、调用接口
var address = qqmapsdk.reverseGeocoder({ location:{ longitude: e.longitude, latitude: e.latitude }, success: (res)=>{ console.log(res); } })
你需要到腾讯地图申请开发者密钥,每个 Key 每个服务接口的调用量做有限制。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论