# 获取当前设备位置信息不准确

#### 问题现象

使用Location Kit位置服务获取当前设备位置时，返回的位置与实际位置有误差。

#### 背景知识

Location Kit（位置服务）：位置子系统使用多种定位技术提供服务，如GNSS定位、基站定位、WLAN/蓝牙定位（基站定位和WLAN/蓝牙定位后续统称为“网络定位技术”）；通过这些定位技术，无论用户设备在室内或是户外，都可以准确地确定设备位置。

1.  申请位置权限：应用可以通过checkAccessToken接口检查用户是否已向您的应用授予特定权限，然后使用requestPermissionsFromUser接口请求相应的权限（参考应用权限申请开发实践）。系统提供的定位权限有：
    
    ohos.permission.LOCATION：用于获取精准位置，精准度在米级别。
    
    ohos.permission.APPROXIMATELY\_LOCATION：用于获取模糊位置，精确度为5公里。
    
    ohos.permission.LOCATION\_IN\_BACKGROUND：用于应用切换到后台仍然需要获取定位信息的场景。
    
    使用获取设备位置功能前请在module.json5中添加位置相关权限，权限的添加方法请参考声明权限，更多权限申请内容请参考申请应用权限。
    
2.  获取设备的位置信息：本模块能力仅支持WGS84坐标系，需注意坐标纠偏。

#### 问题定位

1.  检查module.json5配置文件的requestPermissions标签中是否声明了ohos.permission.LOCATION权限。同时，检查是否通过requestPermissionsFromUser接口请求ohos.permission.LOCATION精准位置权限。
2.  检查代码中获取定位信息的API接口，位置请求参数的定位策略设置是否以精度优先。以单次定位的请求参数（SingleLocationRequest）为例，检查locatingPriority是否设置为PRIORITY\_ACCURACY。
3.  确定设备定位的环境是否为空旷的室外。室内环境和有高大建筑遮挡时，无GPS信号，此时位置服务会使用网络定位，网络定位的精度相对较低。

#### 分析结论

*   **场景一**：
    
    定位权限设置错误，仅声明了模糊定位权限，未声明精准定位权限，或者用户误操作未授予精准定位权限。
    
*   **场景二**：
    
    位置请求参数中的定位策略设置错误，主要以快速获取位置优先（蓝牙、基站、WLAN等网络定位方式）而非精度优先（GNSS卫星定位方式）。
    
*   **场景三**：
    
    设备在室内进行定位或者所在位置存在高大建筑物遮挡，导致没有GPS信号，使用网络定位，位置精度不高。
    

#### 修改建议

*   **场景一**：
    1.  针对定位权限设置错误，需要申请精准定位权限ohos.permission.LOCATION，并在应用中授权获取精准位置。详情请参考申请位置权限开发指导。
    2.  对于用户误操作关闭了精准定位权限，可以使用通过checkAccessToken()函数检查用户是否授予权限，进行友好提醒。
*   **场景二**：
    
    针对定位策略设置错误问题，需要将定位策略设置为精度优先，优先采用GNSS卫星定位方式。
    
    使用CurrentLocationRequest时，配置priority为geoLocationManager.LocationRequestPriority.ACCURACY；使用SingleLocationRequest时，配置locatingPriority为geoLocationManager.LocatingPriority.PRIORITY\_ACCURACY。
    
*   **场景三**：
    
    此场景非问题，建议根据业务场景，适当配置CurrentLocationRequest中maxAccuracy的值，当返回位置的精度大于maxAccuracy值时，则认为位置不准确，不返回位置。