工作過程中,用到了百度地圖,出現了一些問題。把各種問題進行一個匯總,很多都是網友智慧。
1、如何獲取地圖中心點的經緯度?
移動、放大、縮小之后,需要獲取地圖的中心點位置。其實很簡單
1、獲取到一個百度map的對象
mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap();
2、設置一個監聽
view.getMap().setOnMapStatusChangeListener(this);
該監聽,地圖放大縮小都可以收到。
3、在回調的方法中處理
@Override
public void onMapStatusChangeFinish(MapStatus mapStatus)
{
LatLng latLng = mapStatus.target;
LogUtil.i("onMapStatusChangeFinish", "" + latLng.latitude, "" + latLng.longitude);
}
在onMapStatusChangeFinish方法里面處理即可mapStatus.target就是中心點的坐標。
2、如何在地圖中心點繪制一個圖標,固定不動?
效果類似市面上那些軟件的效果,如摩拜、滴滴之類的。
我最開始是根據問題1,可以得到中心點坐標,在回調里面刷新一下。
但這樣會有一個效果就是,會有一個移動過程,和這些軟件里面的不一樣。
最后是在論壇上面看到其他人的思路:在地圖上覆蓋一層layout,和地圖的view重合,然后把圖標add在上面的layout里面就解決了。
3、圖標中心點和地圖中心點不重合
根據2,做出之后,大體上看是沒什么問題的。但恰好,我是最開始按問題1方式做的代碼沒有刪掉。
這樣就發現一個問題,根據問題2做出的圖標和根據問題1做出的圖標居然不重合。
經過分析,是我自己的失誤。我是直接設置圖標在layout的中心位置,沒考慮到圖標的是長寬的,在layout里面的坐標是指的左上角。地圖里面卻不是
在layout里面考慮一下圖標大小,修正一下坐標就可以了。
4、獲取LocationClient,多次定位
我的需求是,我調用一次百度地圖定位就返回一次就好,不要一直在后台頻繁更新。因為沒有這個需求,這樣會消耗流量和電量。
本來這個是很簡單的,但是我強迫症,我希望是不要很次獲取一下定位就new一個LocationClient,希望可以多次使用。
這是前提,使用的時候,發現第一次是好使的。但第二次就不觸發回調了,就在放棄,大不了每次都new的時候,發現百度地圖還有一個方法
那就是,在后面start(),加上requestLocation()即可。
