uni-app中uni.getLocation获取的经纬度存在偏差
uni-app中uni.getLocation获取的经纬度存在偏差
问题描述
hbuildex 4.24 版本配置了百度定位和百度地图,uni.getLocation
配置了 gcj02。打包前自定义基座在 iOS 和安卓上经纬度定位正常,地图显示正常。打包后安卓位置偏差需要把经纬度转换成百度的经纬度才显示正常,iOS 不需要转换经纬度就是正常的。这是为什么?
项目 | 信息 |
---|---|
开发环境 | hbuildex |
版本号 | 4.24 |
项目创建方式 | 自定义基座 |
在uni-app中,uni.getLocation
API 用于获取设备的地理位置信息,包括经纬度等。然而,由于多种原因(如设备GPS精度、网络定位误差、环境因素等),获取的经纬度可能存在一定的偏差。为了尽可能提高定位精度,可以结合多种定位策略(如GPS、网络定位、Wi-Fi定位等)以及使用地图服务商提供的纠偏API进行纠正。
以下是一个结合 uni.getLocation
和高德地图(AMap)JavaScript API 的示例,用于获取并纠正经纬度信息:
-
引入高德地图JavaScript API
首先,在
index.html
中引入高德地图的JavaScript API:<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你的高德地图API密钥"></script>
-
获取原始经纬度并进行纠偏
在
pages/index/index.vue
中编写代码:<template> <view> <button @click="getLocation">获取位置</button> <text>{{ correctedLocation }}</text> </view> </template> <script> export default { data() { return { correctedLocation: '' }; }, methods: { async getLocation() { try { const res = await uni.getLocation({ type: 'gcj02', // 使用国测局坐标系 success: (location) => { this.correctLocation(location.latitude, location.longitude); } }); } catch (error) { console.error('获取位置失败', error); } }, correctLocation(lat, lng) { // 使用高德地图的ReGeoCode服务进行纠偏(这里简化为直接调用示例) AMap.plugin('AMap.ReGeoCoder', () => { const regeo = new AMap.ReGeoCoder({ radius: 1000 // 设置范围 }); const lnglat = [lng, lat]; regeo.getAddress(lnglat, (status, result) => { if (status === 'complete' && result.regeocode) { const correctedLnglat = [result.regeocode.location.lng, result.regeocode.location.lat]; this.correctedLocation = `纠偏后位置:${correctedLnglat[0]}, ${correctedLnglat[1]}`; } else { console.error('纠偏失败', result); } }); }); } } }; </script>
在这个示例中,我们首先通过
uni.getLocation
获取设备的原始经纬度,然后使用高德地图的ReGeoCoder服务进行地址反解析和纠偏。纠偏后的经纬度信息将更新到correctedLocation
数据属性中并显示在页面上。
请注意,实际开发中需要处理更多的错误情况和边界条件,并根据具体需求调整代码。此外,高德地图API的密钥需要在高德地图开放平台申请,并确保API的调用频率和权限设置正确。