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

c. 轉換結果—日志表現:

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

文章插圖
d. 轉換結果-用戶界面表現:從兩圖可以看出 , 轉換坐標系之后的經緯度 與 用戶實際所在位置經緯度無偏差 。
【FAQ】關于華為地圖服務定位存在偏差的原因及解決辦法

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

文章插圖
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;@Overridepublic 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]);            }        }    }};

推薦閱讀