设为首页 加入收藏

TOP

【FAQ】关于华为地图服务定位存在偏差的原因及解决办法(四)
2023-07-23 13:31:07 】 浏览:226
Tags:FAQ 关于华 解决办
[] Gcj02LatLng = wgs84_To_Gcj02(locationResult.getLastHWLocation().getLatitude(),locationResult.getLastHWLocation().getLongitude()); Log.d("LOG_HwMyLocation", "Gcj-02坐标系经纬度:" + Gcj02LatLng[0]+" ; "+Gcj02LatLng[1]+"\n"); //将转换坐标系之后的经纬度 标记在地图上 addGCJ02LocationMarker(Gcj02LatLng[0], Gcj02LatLng[1]);

c. 转换结果—日志表现:

d. 转换结果-用户界面表现:从两图可以看出,转换坐标系之后的经纬度 与 用户实际所在位置经纬度无偏差。


4. 将GCJ-02坐标系的经纬度通过huaweiMap.setLocationSource(LocationSouce locationSouce)方法设置为我的位置图层的定位源,具体实现如下:

  1. 新建MyLocationSouce类,定义定位源。
private class MyLocationSouce implements LocationSource {
    private OnLocationChangedListener listener;

    @Override
    public void activate(OnLocationChangedListener onLocationChangedListener) {
        listener = onLocationChangedListener;
    }

    @Override
    public void deactivate() {

    }

    /**
     * 改变我的位置图层的定位源
     * @param lat_gcj02 GCJ-02
     * @param log_gcj02 GCJ-02
     */
    public void changeMyLocationSouce(double lat_gcj02, double log_gcj02) {
        Location location = new Location("Provider");

        location.setLatitude(lat_gcj02);
        location.setLongitude(log_gcj02);
        //设置精度
        location.setAccuracy(200);
        //当获取到新的用户位置时,调用此方法,设置定位源
        listener.onLocationChanged(location);
    }
}
  1. 初始化MyLocationSouce类 并 将MyLocationSouce设置为我的位置图层的定位源:
private MyLocationSouce myLocationSouce;
@Override
public void onMapReady(HuaweiMap huaweiMap) {
    this.huaweiMap = huaweiMap;
    huaweiMap.setMyLocationEnabled(true);
    //初始化LocationSouce并设置我的位置图层的位置源
    if (null == myLocationSouce){
        myLocationSouce = new MyLocationSouce();
    }
    huaweiMap.setLocationSource(myLocationSouce);
}
  1. 在LocationCallback回调方法中 将GCJ-02坐标系的经纬度 设置为定位源。
/**
 * 定义位置更新回调
 */
LocationCallback mLocationCallback = new LocationCallback() {
    @Override
    public void onLocationResult(LocationResult locationResult) {
        if (locationResult != null) {
            // TODO: 处理位置回调结果
            addLocationMarker(locationResult.getLastHWLocation().getLatitude(), locationResult.getLastHWLocation().getLongitude());
            Log.d("LOG_HwMyLocation", "WGS-86坐标系经纬度:" + locationResult.getLastHWLocation().getLatitude() +
                    " ; " + locationResult.getLastHWLocation().getLongitude());
            Log.d("LOG_HwMyLocation", "===============转换地理坐标系===============");
            double[] Gcj02LatLng = wgs84_To_Gcj02(locationResult.getLastHWLocation().getLatitude(), locationResult.getLastHWLocation().getLongitude());
            Log.d("LOG_HwMyLocation", "Gcj-02坐标系经纬度:" + Gcj02LatLng[0] + " ; " + Gcj02LatLng[1] + "\n");

            //将转换坐标系之后的经纬度 标记在地图上
            addGCJ02LocationMarker(Gcj02LatLng[0], Gcj02LatLng[1]);
            if (null != myLocationSouce){
                myLocationSouce.changeMyLocationSouce(Gcj02LatLng[0],Gcj02LatLng[1]);
            }
        }
    }
};

5. 效果展示:

通过下方两图可以看出,我的位置图层与用户实际所在位置一致,且无偏差。


六、 Map SDK和Location SDK所需的权限列表有:

  1. Map SDK需要添加的权限列表:
<!-- 您调用地图服务能力,必须在“AndroidManifest”中为您的应用添加下列权限: -->
<!--允许程序访问网络连接-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--允许程序获取网络信息状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--自定义权限,允许程序读取公共数据-->
<uses-permission android:name="com.huawei.appmarket.ser
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇uniapp热更新和整包更新思路 下一篇无线电发射设备管理规定

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目