问题现象
应用在使用Map Kit地图服务时,地图上显示的位置标记点与实际地理位置存在偏差。
背景知识
- 华为地图涉及2种坐标系:
- WGS84:一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
- GCJ02:由中国国家测绘局制订的地理信息系统的坐标系统,是由WGS84坐标系经过加密后的坐标系。
- 华为地图在中国大陆、中国香港和中国澳门使用GCJ02坐标系,中国台湾和海外使用WGS84坐标系,若使用WGS84坐标系直接叠加在华为地图上,因坐标值不同,展示位置会有偏移。所以,在中国大陆如果使用WGS84坐标调用Map Kit服务,需要先将其转换为GCJ02坐标系再访问,参考:坐标纠偏。
- ohos.permission.LOCATION:精准定位权限,允许应用获取设备位置信息。
- LocatingPriority:位置请求中的优先级类型,PRIORITY_ACCURACY表示精度优先,PRIORITY_LOCATING_SPEED表示速度优先。
分析结论
传入的坐标非GCJ02坐标系;未申请精准定位权限ohos.permission.LOCATION;未配置定位策略为精度优先。
修改建议
- 将位置服务获取的WGS84坐标转换为GCJ02坐标,再传入地图,参见坐标纠偏。
- 申请精准定位权限ohos.permission.LOCATION,配置定位策略为精度优先(LocatingPriority配置为PRIORITY_ACCURACY),具体操作参见获取当前设备位置信息不准确。
常见FAQ
Q:除了convertCoordinate方法可以转换坐标,还有什么方式可以把WGS84坐标系转为GCJ02坐标系?
A:使用rectifyCoordinate接口可以解决原始坐标与华为地图展示偏转的问题,且仅支持WGS84坐标系转为GCJ02坐标系。
Q:convertCoordinateSync和rectifyCoordinate两种坐标纠偏接口有什么差异?
A:convertCoordinateSync接口仅固定的将输入坐标数据进行WGS84坐标系转GCJ02坐标系。rectifyCoordinate接口会判断输入坐标数据信息,自动决定是否进行坐标系转换纠偏,如应用涉及海外使用地图场景,建议使用该接口。