【FAQ】關于華為地圖服務定位存在偏差的原因及解決辦法

一、 問題描述:華為地圖服務“我的位置”能力 , 在中國大陸地區,向用戶展示他們在地圖上的當前位置與用戶的實際位置存在較大的偏差 。
具體差別可以查看下方的圖片:

【FAQ】關于華為地圖服務定位存在偏差的原因及解決辦法

文章插圖
二、 偏差較大的原因:
  1. 華為Map SDK在中國大陸使用的地理坐標系是GCJ02 。
  2. 點擊“我的位置”控件 , 獲取的定位經緯度的地理坐標系是WGS-84 。
  3. 因為以上兩個原因,即地圖View和“我的位置”定位源使用的地理坐標系不一致,所以才導致了“我的位置”定位不準確的問題 。
三、 解決方案:
  1. 先使用華為Location SDK通過定位獲取用戶當前所在位置 , 華為Location SDK使用的地理坐標系也是WGS-84 。
  2. 將華為Location SDK獲取的定位經緯度轉換為GCJ02地理坐標系 。
  3. 通過華為Map SDK提供的huaweiMap.setLocationSource(LocationSource locationSource)方法 , 設置“我的位置”圖層定位源 。
四、 注意事項:使用Location SDK獲取用戶當前所在位置信息 和 WGS84轉GCJ02坐標系的章節僅適用于6.7.0.300之前的SDK版本,因為Location SDK的6.7.0.300及之后的版本已支持直接獲取GCJ-02坐標系的經緯度 。
五、 具體的實現步驟: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控件,從三張截圖可以看出:“我的位置”與“用戶實際所在位置”存在較大偏差 。
【FAQ】關于華為地圖服務定位存在偏差的原因及解決辦法

文章插圖
【FAQ】關于華為地圖服務定位存在偏差的原因及解決辦法

文章插圖
【FAQ】關于華為地圖服務定位存在偏差的原因及解決辦法

文章插圖
2. 使用華為Location SDK獲取用戶當前所在位置a. 聲明FusedLocationProviderClient對象 。
// 聲明fusedLocationProviderClient對象private FusedLocationProviderClient fusedLocationProviderClient;

推薦閱讀