HarmonyOS 鸿蒙Next 使用Location Kit获取到的位置和实际位置不准确

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 使用Location Kit获取到的位置和实际位置不准确

使用Location Kit  获取到的位置和实际位置不准确

使用Location Kit  获取到的位置和实际位置不准确

使用Location Kit  获取到的位置和实际位置不准确 

重要的事情说三遍。。。

可能是什么问题


更多关于HarmonyOS 鸿蒙Next 使用Location Kit获取到的位置和实际位置不准确的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
可以参考这篇华为论坛的贴子来排查咱的问题:https://developer.huawei.com/consumer/cn/forum/topic/0207166282589682423?fid=0109140870620153026

可以参考如下代码再试下:

//在EntryAbility.ets中申请权限

  async applyPermissionFromUser() {

    console.log(开始申请权限)

    const manager = abilityAccessCtrl.createAtManager()

    await manager.requestPermissionsFromUser(this.context,

      [“ohos.permission.LOCATION”, “ohos.permission.APPROXIMATELY_LOCATION”])

  }

  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {

    hilog.info(0x0000, ‘testTag’, ‘%{public}s’, ‘Ability onCreate’);

    this.applyPermissionFromUser()

  }

import { geoLocationManager } from ‘@kit.LocationKit’;

import { BusinessError } from ‘@kit.BasicServicesKit’;

import { map, mapCommon, site } from ‘@kit.MapKit’;

@Entry

@Component

struct Index {

  @State beforeConvert: string = ‘’;

  @State afterConvert: string = ‘’;

  @State beforeConvertAddress: string = ‘’;

  @State afterConvertAddress: string = ‘’;

  aboutToAppear(): void {

    this.getCurrentLocationInfo()

  }

  //获取设备所在的经纬度

  getCurrentLocationInfo() {

    let request: geoLocationManager.SingleLocationRequest = {

      ‘locatingPriority’: geoLocationManager.LocatingPriority.PRIORITY_ACCURACY,

      ‘locatingTimeoutMs’: 10000

    }

    try {

      geoLocationManager.getCurrentLocation(request)

        .then(async (result) => { // 调用getCurrentLocation获取当前设备位置,通过promise接收上报的位置

          console.log('current location: ’ + JSON.stringify(result));

          this.beforeConvert = “latitude:” + result.latitude + " longitude:" + result.longitude

          let wgs84Position: mapCommon.LatLng = {

            latitude: result.latitude,

            longitude: result.longitude

          };

          let params: site.ReverseGeocodeParams = {

            location: {

              latitude: result.latitude,

              longitude: result.longitude

            },

            language: “cn”,

            radius: 200

          };

          const result2 = await site.reverseGeocode(params);

          console.info(“wgs84Position Succeeded in reversing geocode:” + JSON.stringify(result2));

          this.beforeConvertAddress = JSON.stringify(result2)

          // this.getAddressInfo(result.latitude, result.longitude)

          this.convertCoordinate(wgs84Position)

        })

        .catch((error: BusinessError) => { // 接收上报的错误码

          console.error(‘promise, getCurrentLocation: error=’ + JSON.stringify(error));

        });

    } catch (err) {

      console.error(“errCode:” + JSON.stringify(err));

    }

  }

  //转换坐标系

  async convertCoordinate(wgs84Position: mapCommon.LatLng) {

    let gcj02Position: mapCommon.LatLng =

      map.convertCoordinateSync(mapCommon.CoordinateType.WGS84, mapCommon.CoordinateType.GCJ02, wgs84Position);

    console.log(gcj02Position:<span class="hljs-subst">${<span class="hljs-built_in">JSON</span>.stringify(gcj02Position)}</span>)

    this.afterConvert = “latitude:” + gcj02Position.latitude + " longitude:" + gcj02Position.longitude

    if (gcj02Position) {

      let params: site.ReverseGeocodeParams = {

        location: {

          latitude: gcj02Position.latitude,

          longitude: gcj02Position.longitude

        },

        language: “cn”,

        radius: 200

      };

      const result2 = await site.reverseGeocode(params);

      console.info(“gcj02Position Succeeded in reversing geocode:” + JSON.stringify(result2));

      this.afterConvertAddress = JSON.stringify(result2)

    }

  }

  build() {

    Column({ space: 10 }) {

      if (this.beforeConvertAddress.length) {

        Text(转化坐标系前经纬度:<span class="hljs-subst">${<span class="hljs-variable language_">this</span>.beforeConvert}</span>).borderWidth(1)

        Text(转化坐标系后经纬度:<span class="hljs-subst">${<span class="hljs-variable language_">this</span>.afterConvert}</span>).borderWidth(1)

        Text(转化坐标系前位置信息:<span class="hljs-subst">${<span class="hljs-variable language_">this</span>.beforeConvertAddress}</span>).borderWidth(1)

        Text(转化坐标系后位置信息:<span class="hljs-subst">${<span class="hljs-variable language_">this</span>.afterConvertAddress}</span>).borderWidth(1)

      } else {

        Text(正在加载中)

      }

    }

    .width(‘100%’)

    .height(‘100%’)

    .justifyContent(FlexAlign.Center)

  }

}

更多关于HarmonyOS 鸿蒙Next 使用Location Kit获取到的位置和实际位置不准确的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


Location Kit 获取到的坐标系是 wgs84,你可能需要转换坐标系。

或者你通过Location Kit 获取到的是模糊坐标,不是精确位置。

HarmonyOS 鸿蒙Next 使用Location Kit获取到的位置和实际位置不准确的问题可能源于多个方面,包括但不限于以下几点:

  1. 定位权限设置:确认应用已正确获取并启用了定位权限,包括GPS、网络定位等。

  2. 定位模式选择:检查是否选择了合适的定位模式,如高精度模式、低功耗模式等,不同模式对定位精度有影响。

  3. 环境因素:定位精度受环境因素影响,如建筑物密集区、地下室、隧道等环境可能导致定位不准确。

  4. 设备状态:设备状态如电量低、网络状况差、GPS信号弱等也可能影响定位精度。

  5. 定位服务配置:检查Location Kit的配置参数,如定位间隔、请求优先级等,确保配置合理。

  6. 版本兼容性:确认使用的HarmonyOS版本与Location Kit SDK版本兼容,版本不匹配可能导致功能异常。

  7. 定位算法:Location Kit可能采用多种算法融合定位,算法的选择和参数设置也会影响定位精度。

针对上述问题,建议逐一排查并优化。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部