uni-app中uni.getLocation获取的经纬度存在偏差

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app中uni.getLocation获取的经纬度存在偏差

问题描述

hbuildex 4.24 版本配置了百度定位和百度地图,uni.getLocation 配置了 gcj02。打包前自定义基座在 iOS 和安卓上经纬度定位正常,地图显示正常。打包后安卓位置偏差需要把经纬度转换成百度的经纬度才显示正常,iOS 不需要转换经纬度就是正常的。这是为什么?

项目 信息
开发环境 hbuildex
版本号 4.24
项目创建方式 自定义基座

1 回复

在uni-app中,uni.getLocation API 用于获取设备的地理位置信息,包括经纬度等。然而,由于多种原因(如设备GPS精度、网络定位误差、环境因素等),获取的经纬度可能存在一定的偏差。为了尽可能提高定位精度,可以结合多种定位策略(如GPS、网络定位、Wi-Fi定位等)以及使用地图服务商提供的纠偏API进行纠正。

以下是一个结合 uni.getLocation 和高德地图(AMap)JavaScript API 的示例,用于获取并纠正经纬度信息:

  1. 引入高德地图JavaScript API

    首先,在 index.html 中引入高德地图的JavaScript API:

    <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你的高德地图API密钥"></script>
    
  2. 获取原始经纬度并进行纠偏

    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的调用频率和权限设置正确。

回到顶部