HarmonyOS 鸿蒙Next 如何解决地理编码后坐标在地图定位不准确的问题

发布于 1周前 作者 songsunli 最后一次编辑是 5天前 来自 鸿蒙OS

【问题现象】

使用Location Kit的地理编码转换API出来的坐标直接在Map kit上展示,定位不准确。

示例代码如下:

// request 地址为:江苏省南京市雨花台区华为路华为云楼.onClick(() => {
  let geocodeRequest: geoLocationManager.GeoCodeRequest = { "description": location, "maxItems": 1 };
  try {
    geoLocationManager.getAddressesFromLocationName(geocodeRequest, (err, data) => {
      if (err) {
        console.log('getAddressesFromLocationName err: ' + JSON.stringify(err));
      } else {
        console.log('getAddressesFromLocationName data: ' + JSON.stringify(data));
      }
    });
  } catch (err) {
    console.error("errCode:" + JSON.stringify(err));
  }
})

坐标结果:

getAddressesFromLocationName data: [{"latitude":31.986409490839385,"longitude":118.76021387384216,"locale":"zh","placeName":"江苏省南京市雨花台区华为路华为云楼"}]

地图展示:

点击放大

如图所示,直接展示的坐标不准确。

【背景知识】

(1)使用坐标描述一个位置,非常准确,但是并不直观,面向用户表达并不友好。Location Kit向开发者提供了以下两种转化能力

  • 地理编码转化:将地理描述转化为具体坐标。
  • 逆地理编码转化能力:将坐标转化为地理描述。

本次问题现象即正地理编码转化后的坐标地址不准确。

(2)Location Kit返回的位置都是基于WGS84坐标系的,而国内地图应该使用GCJ02坐标系。

点击放大

解决方案】

当展示的坐标不准确,优先检查坐标系差异,不一致时使用坐标转换接口将WGS84坐标转换为GCJ02坐标系再访问,坐标转换介绍请参考文档

**WGS84 转GCJ02 工具类示例代码如下:

import { map, mapCommon } from '@kit.MapKit';

export class MapUtil {
  public static convertToGcj02( latitude: number, longitude: number) {
    let wgs84Position: mapCommon.LatLng = {
      latitude: latitude,
      longitude: longitude
    };

    // 转换经纬度坐标
    let gcj02Position: mapCommon.LatLng =
      map.convertCoordinateSync(mapCommon.CoordinateType.WGS84, mapCommon.CoordinateType.GCJ02, wgs84Position);
    return gcj02Position
  }
}

地图初始化示例代码如下:

import { map, mapCommon } from '@kit.MapKit';

export class MapUtil {
  public static convertToGcj02( latitude: number, longitude: number) {
    let wgs84Position: mapCommon.LatLng = {
      latitude: latitude,
      longitude: longitude
    };

    // 转换经纬度坐标
    let gcj02Position: mapCommon.LatLng =
      map.convertCoordinateSync(mapCommon.CoordinateType.WGS84, mapCommon.CoordinateType.GCJ02, wgs84Position);
    return gcj02Position
  }
}

效果示例图如下:

点击放大

1 回复

作为IT专家,对于HarmonyOS 鸿蒙Next系统中地理编码后坐标在地图定位不准确的问题,可以尝试以下解决方案:

  1. 调整定位参数:根据实际需求调整定位精度和更新频率等参数,以平衡精度和性能。在不需要高精度定位的场景下,选择较低的定位精度以减少资源消耗。
  2. 选择合适的定位模式:根据环境选择适合的定位模式。如室内环境中,使用低功耗模式或设备传感器模式;在开放空旷的室外环境中,选择高精度模式。
  3. 多源定位融合:除了依赖GPS信号,还可以结合其他定位技术如基站、Wi-Fi等来提高定位精度。
  4. 检查网络和硬件:确保网络连接稳定,设备硬件完好,GPS芯片正常工作。
  5. 更新系统和软件:检查鸿蒙系统及其地图服务软件是否有更新,及时安装最新版本。

此外,还需确保应用已正确申请并获得了定位权限,包括精确位置和模糊位置的权限。如果问题依旧没法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部