一、 问题描述:华为地图服务“我的位置”能力 , 在中国大陆地区,向用户展示他们在地图上的当前位置与用户的实际位置存在较大的偏差 。
具体差别可以查看下方的图片:
文章插图
二、 偏差较大的原因:
- 华为Map SDK在中国大陆使用的地理坐标系是GCJ02 。
- 点击“我的位置”控件 , 获取的定位经纬度的地理坐标系是WGS-84 。
- 因为以上两个原因,即地图View和“我的位置”定位源使用的地理坐标系不一致,所以才导致了“我的位置”定位不准确的问题 。
- 先使用华为Location SDK通过定位获取用户当前所在位置 , 华为Location SDK使用的地理坐标系也是WGS-84 。
- 将华为Location SDK获取的定位经纬度转换为GCJ02地理坐标系 。
- 通过华为Map SDK提供的huaweiMap.setLocationSource(LocationSource locationSource)方法 , 设置“我的位置”图层定位源 。
五、 具体的实现步骤:1. 创建已开启“我的位置”功能的地图实例a. 在Activity的布局文件中添加地图控件且设置地图属性 。
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" android:id="@+id/mapfragment_mapfragmentdemo" class="com.huawei.hms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" map:cameraTargetLat="48.893478" map:cameraTargetLng="2.334595" map:cameraZoom="16" /></androidx.constraintlayout.widget.ConstraintLayout>b. 在Activity中初始化SDK,并加载地图 。
public class HwMyLocationActivity extends AppCompatActivity implements OnMapReadyCallback { private HuaweiMap huaweiMap; private SupportMapFragment mSupportMapFragment; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //初始化SDK MapsInitializer.initialize(this); setContentView(R.layout.activity_mylocation); mSupportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapfragment_mapfragmentdemo); //加载地图 mSupportMapFragment.getMapAsync(this); } @Override public void onMapReady(HuaweiMap huaweiMap) { //地图数据加载完成,展示成功 。 this.huaweiMap = huaweiMap; huaweiMap.setMyLocationEnabled(true); }}c. 展示地图并点击我的位置UI控件,从三张截图可以看出:“我的位置”与“用户实际所在位置”存在较大偏差 。
文章插图
文章插图
文章插图
2. 使用华为Location SDK获取用户当前所在位置a. 声明FusedLocationProviderClient对象 。
// 声明fusedLocationProviderClient对象private FusedLocationProviderClient fusedLocationProviderClient;
推荐阅读
- C# 8.0 添加和增强的功能【基础篇】
- 我的世界怎么开二级隐身(我的世界怎么搞隐身)
- 华为mate50pro上市价格_华为mate50pro价格官网报价
- 【保姆教程】RuoYi-Radius搭建实现portal认证
- 原神证悟木怎么快速收集
- 鸡皮疙瘩第三关殖民星通关攻略
- QQ飞车结婚流程(qq飞车结婚有什么好处)
- qq飞车怎么结婚姐妹(qq飞车结婚有什么要求)
- 【日志系统】Loki日志监控 - 入门初体验
- Python3.11正式版,它来了!