最近比较懒,隔了好几天才更新(虽然没有什么人看。。。嘛什么的。。。)
这次实现的功能是在地图上输入城市名和关键词来进行搜索(其他类型的搜索都差不多,具体可以看百度地图api),搜索到的结果会标注在地图上,一次标注10个,你可以点击切换来换下一页,显示不同的兴趣点,在点击兴趣点后会跳转到详细页面,详细页面上会显示出这个兴趣点的更多信息(这里有一些小Bug,后面会说,如果有哪个小伙伴知道怎么解决就来造福我这个傻逼吧)。
那么先来几张粗略的实验图看看吧:
图1点击搜索后出现的画面 图2点击切换后的画面 图3 点击标注后出现的详细信息
实现搜索功能:
protected void search(String city,String keyword) {
mPoiSearch = PoiSearch.newInstance();
//--------------------poisearch搜索完得到结果后回调-------------------------------------------------
OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() {
public void onGetPoiResult(PoiResult result) {
list = result.getAllPoi();//使用list<>
if (result == null
|| result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
//---------------------标注功能实现代码--------------------------------------
map.clear();
// 创建PoiOverlay
PoiOverlay overlay = new MyPoiOverlay(map);
// 设置overlay可以处理标注点击事件
map.setOnMarkerClickListener(overlay);
// 设置PoiOverlay数据
overlay.setData(result);
// 添加PoiOverlay到地图中
overlay.addToMap();
overlay.zoomToSpan();
return;
}
}
//---------------------------当poisearch调用searcgPoiDetail以后得到结果后回调,主要展示搜索结果的详细信息-------------------
public void onGetPoiDetailResult(PoiDetailResult result) {
if (result.error != SearchResult.ERRORNO.NO_ERROR) {
// 详情检索失败
// result.error请参考SearchResult.ERRORNO
} else {
// 检索成功
Intent intent = new Intent();
intent.putExtra("result", result);
intent.setClass(context, SearchDetailActivity.class);
startActivity(intent);
}
}
};
mPoiSearch.setOnGetPoiSearchResultListener(poiListener);
mPoiSearch.searchInCity((new PoiCitySearchOption()).city(city).keyword(
keyword).pageNum(0).pageCapacity(10));
}
//----------------------标注覆盖类---------------------------------
private class MyPoiOverlay extends PoiOverlay {
public MyPoiOverlay(BaiduMap baiduMap) {
super(baiduMap);
}
@Override
public boolean onPoiClick(int index) {
super.onPoiClick(index);
PoiInfo poiInfo = getPoiResult().getAllPoi().get(index);
PoiDetailSearchOption option = new PoiDetailSearchOption();
option = option.poiUid(poiInfo.uid);
mPoiSearch.searchPoiDetail(option);//在这里当点击标注后,后回调展示详细信息
// 检索poi详细信息
return true;
}
}
切换下一页功能实现:
public void goForNextPage()
{
PageIndex = PageIndex+1;//pageindex一开始为全局变量,初设为0
mPoiSearch.searchInCity((new PoiCitySearchOption()).city(city).keyword(
keyword).pageNum(PageIndex).pageCapacity(10));//城市搜索中的PageNum是关键,百度地图在发起搜索得到后的结果会以分页的形式展示给开发者
}
点击标注后显示详细信息:
以前是可以通过百度地图的自定义控件来显示出标注的详细界面信息,包括图片,评论等...但是现在不知道是不是取消了,我搜索不到那个控件了。然后参照现在的百度开发档
可以发现没有具体可以展示图片信息的选项,但是其中有一个为getDetialUrl可以获取到详细信息的静态界面,我尝试用过fiddler抓包,发现抓不到(也可能我操作错了?可是点击安卓市场倒是能刷很多数据),所以希望有懂得的小伙伴提供一下思路啦
具体实现很简单:
在回调结果显示详细信息那里将数据传给详细展示的Activity后,把数据适配到对应展示控件上便可以了
Intent intent = new Intent();
intent.putExtra("result", result);
intent.setClass(context, SearchDetailActivity.class);
startActivity(intent);