我们经常需要在地图上显示一些特别的东西,比如一些服务如银行,KFG,学校等等,这样就需要使用POI搜索,基本上的步骤如下
0.所需要的变量
//POI搜索
private MyPoiOverlay mTrafficOverLay;// 交通图层
private MyPoiOverlay mSchoolOverLay;// 学校图层
private MyPoiOverlay mLiveOverLay;// 生活图层
private PoiSearch mPoiSearch;//搜索服务
private float latitude = 31.1803029f;
private float longitude = 121.4864084f;
图层可以定义N多,只要你能够放下就OK!
1.地图初始化工作
在异步线程中初始化好百度地图,initBaiduMap();
2.定义自己的图层.
/**
* 用户poi自定义图
*/
class MyPoiOverlay extends PoiOverlay {
public MyPoiOverlay(com.baidu.mapapi.map.BaiduMap arg0) {
super(arg0);
}
/**
*覆盖物的点击事件
*/
@Override
public boolean onPoiClick(int arg0) {
super.onPoiClick(arg0);
PoiInfo poiInfo = getPoiResult().getAllPoi().get(arg0);
// 检索poi详细信息
mPoiSearch.searchPoiDetail(new PoiDetailSearchOption()
.poiUid(poiInfo.uid));
return true;
}
}
3.初始化自定义图层;
mTrafficOverLay = new MyPoiOverlay(mBaiduMap);
mSchoolOverLay = new MyPoiOverlay(mBaiduMap);
mLiveOverLay = new MyPoiOverlay(mBaiduMap);
这些初始化工作还是放在initBaiduMap()方法中进行.
4.设置搜索方式
搜索方式有一下三种,根据不同的需求来做,这这三个方法都有一个传入参数,page,当我们发起POI搜索时会搜到很多条,而这些搜索结果可以分为N页,每页N条这个page是显示第几页.也可以不用这个参数去掉pageNum(page)这段代码,在图层添加方法中加入mLiveOverLay.zoomToSpan();方法将所有的结果都显示出来.
/**
* 城市内搜索
*/
private void citySearch(int page) {
// 设置检索参数
PoiCitySearchOption citySearchOption = new PoiCitySearchOption();
citySearchOption.city("上海");// 城市
citySearchOption.keyword("KFC");// 关键字
citySearchOption.pageCapacity(15);// 默认每页10条
citySearc