HarmonyOS 鸿蒙Next 如何解决地理编码后坐标在地图定位不准确的问题
【问题现象】
使用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系统中地理编码后坐标在地图定位不准确的问题,可以尝试以下解决方案:
- 调整定位参数:根据实际需求调整定位精度和更新频率等参数,以平衡精度和性能。在不需要高精度定位的场景下,选择较低的定位精度以减少资源消耗。
- 选择合适的定位模式:根据环境选择适合的定位模式。如室内环境中,使用低功耗模式或设备传感器模式;在开放空旷的室外环境中,选择高精度模式。
- 多源定位融合:除了依赖GPS信号,还可以结合其他定位技术如基站、Wi-Fi等来提高定位精度。
- 检查网络和硬件:确保网络连接稳定,设备硬件完好,GPS芯片正常工作。
- 更新系统和软件:检查鸿蒙系统及其地图服务软件是否有更新,及时安装最新版本。
此外,还需确保应用已正确申请并获得了定位权限,包括精确位置和模糊位置的权限。如果问题依旧没法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。