第一步:去百度地图开发平台官网下载好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);
}
});