第一步:去百度地圖開發平臺官網下載好sdk開發包並申請密鑰。具體可以百度。建議先做一個小入門demo先
第二步:準備一個簡單的佈局文件如圖(非常隨便的一個佈局…)
有三部分,上面是一個編輯框組件,用於輸入關鍵字。中 間是地圖組件,用於顯示地圖。下面是一個listview,用於顯 示搜索到的相關地點。
第三步:編寫代碼
第一部分:實現當前位置定位
主要使用LocationClient進行定位。
//獲取map
mMapView = findViewById(R.id.map);
mBaiduMap = mMapView.getMap();
//開啓定位層
mBaiduMap.setMyLocationEnabled(true);
//初始化定位監聽器
mLocationClient = new LocationClient(this);
//通過LocationClientOption設置LocationClient相關參數
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打開gps
option.setCoorType("bd09ll"); // 設置座標類型
option.setScanSpan(0);
//設置locationClientOption
mLocationClient.setLocOption(option);
//註冊LocationListener監聽器
MyLocationListener myLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(myLocationListener);
//開啓地圖定位圖層
mLocationClient.start();
//定義定位狀態,參數(定位模式,是否開啓方向,自定義圖片代替原圖片,顏色,顏色)
MyLocationConfiguration myLocationConfiguration = new MyLocationConfiguration(
MyLocationConfiguration.LocationMode.FOLLOWING,false, null
,0xAAFFFF88,0xAA00FF00
);
mBaiduMap.setMyLocationConfiguration(myLocationConfiguration);
第二部分:實現關鍵字搜索定位
使用SuggestionSearch實現。
1、實例化mSuggestionSearch ,並添加監聽器。用於處理搜索到的結果。
mSuggestionSearch = SuggestionSearch.newInstance();
//編寫監聽器
OnGetSuggestionResultListener listener = new OnGetSuggestionResultListener() {
@Override
public void onGetSuggestionResult(SuggestionResult suggestionResult) {
//處理sug檢索結果
if (suggestionResult == null || suggestionResult.getAllSuggestions() == null) {
Log.i("result: ","沒有找到");
return;
//未找到相關結果
}else
{
//獲取在線建議檢索結果,並顯示到listview中
List<SuggestionResult.SuggestionInfo> resl = suggestionResult.getAllSuggestions();
MyAdapter myAdapter = new MyAdapter(resl,getApplicationContext());
placeList.setAdapter(myAdapter);
}
}
};
mSuggestionSearch.setOnGetSuggestionResultListener(listener);
2、在編輯框組件中的TextChangeWatcher監聽器中,監聽文本改變事件。當文本框改變時,調用SuggestionSearch的requestSuggestion方法,請求搜索相關地點。
//設置請求參數:keyword搜索的關鍵字,城市可以固定,城市限制設定爲否。
mSuggestionSearch.requestSuggestion((new SuggestionSearchOption())
.keyword(""+s)
.city("廣東")
.citylimit(false)
);
3、搜索到的結果就可以在上面設置的OnGetSuggestionResultListener 監聽器的onGetSuggestionResult方法中處理。
自定義一個adapter,把搜索到的結果存進去,並把文本信息顯示到listview中。
@Override
public void onGetSuggestionResult(SuggestionResult suggestionResult) {
//處理sug檢索結果
if (suggestionResult == null || suggestionResult.getAllSuggestions() == null) {
Log.i("result: ","沒有找到");
return;
//未找到相關結果
}else
{
//獲取在線建議檢索結果,並顯示到listview中
List<SuggestionResult.SuggestionInfo> resl = suggestionResult.getAllSuggestions();
MyAdapter myAdapter = new MyAdapter(resl,getApplicationContext());
placeList.setAdapter(myAdapter);
}
}
4、現在所有搜索到的地點已經顯示到listview中,就可以編寫listview的點擊事件,定位到相關位置。
點擊item,獲取到這個item對應的suggestionInfo ,把位置信息設置到地圖map中,完成定位。
//搜索到的地方點擊事件,點擊後顯示到上邊的文本框中
placeList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
SuggestionResult.SuggestionInfo suggestionInfo = (SuggestionResult.SuggestionInfo)parent.getItemAtPosition(position);
System.out.println("chufadi");
chufadi.setText(suggestionInfo.city + suggestionInfo.district + suggestionInfo.key);
MyLocationData locData = new MyLocationData.Builder()
.accuracy(0)
// 此處設置開發者獲取到的方向信息,順時針0-360
.direction(0).latitude(suggestionInfo.pt.latitude)
.longitude(suggestionInfo.pt.longitude).build();
mBaiduMap.setMyLocationData(locData);
}
});