微信小程序开发过程中获取坐标
作者:子长
微信小程序开发可根据getLocation
获取用户的地理位置信息,包含经纬度、移动速度、海拔信息,也可使用onLocationChange
实时获取位置。测试了一下,坐标和海拔还是比较准确的。
鉴于部分同学提到坐标误差大的问题:其一,可能是在开发者工具中遇到该问题,原因是电脑中没有gps模块,无法准确获取位置,一般通过ip定位到行政区域;其二,坐标格式没有正确使用,微信提供了两种格式wgs84
和gcj02
,前者是全球GPS系统使用的标准格式,后者是中国测绘局公布的国标,两者定位有一定偏差。这就要求开发者以何种方式获取的坐标,就应以何种方式解析;也可对坐标转换后再解析。
1、获取当前位置
对于用户已授权定位的可直接通过以下方式获取:
wx.getLocation({
type: 'wgs84',
isHighAccuracy: true,
altitude: true,
success (res) {
cosnole.log([res.longitude, res.latitude])
},
})
对于不确定用户是否已开启定位权限的,应该分两种情况处理:
1、用户从未同意或拒绝授权定位权限的,可直接通过authorize
发起授权,授权成功后即可获取位置信息。
2、由于微信为了更好的用户体验,当用户第一次放弃授权定位权限后,在此后使用的过程中,不会再向用户发起授权。这就需要引导用户开启定位权限。若authorize
时提示authorize:fail ...
,可通过openSetting
引导用户开启授权,用户授权后即可获取位置信息
2、获取实时位置
实时位置信息同样需要用户授权;
微信提供了onLocationChange
来监听实时位置信息,需要结合stopLocationUpdate
(小程序前台运行时监听)、startLocationUpdateBackground
(小程序前后台运行时监听) 使用,如下:
// 实时回调
locationChangeFn = function(res) {
console.log('location change',res.latitude, self.location)
}
wx.startLocationUpdate({
success(res){
wx.onLocationChange(locationChangeFn )
},
fail(err){
},
})
// 离开时记着关闭监听
wx.offLocationChange(locationChangeFn)
注:实时定位反应稍微慢一点,一般五秒后才能返回新的坐标,原因是多方面的,比如天气、建筑物、数据传输、数据处理等等。
网友评论