一、 问题描述:【【FAQ】关于华为地图服务定位存在偏差的原因及解决办法】华为地图服务“我的位置”能力,在中国大陆地区,向用户展示他们在地图上的当前位置与用户的实际位置存在较大的偏差 。
具体差别可以查看下方的图片:
文章插图
二、 偏差较大的原因:
- 华为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# 8.0 添加和增强的功能【基础篇】
- 一家人温馨的句子简短 形容幸福满满一家句子
- 二氧化碳灭火器适用于什么灭火
- pet是食品级的吗
- 聊天什么程度算暧昧
- 驱动开发:内核LDE64引擎计算汇编长度
- 熟粽子冷冻6个月能吃吗
- 豆角属于碳水还是蔬菜
- 拍身份证黄头发怎么办
- 酒后睡了7个小时还算酒驾吗