定义
POI(Point of Interest),中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。
百度地图SDK提供三种类型的POI检索:周边检索、区域检索和城市内检索。
在毕业设计中我主要用到的是城市内搜索。
城市内POI搜索
百度地图SDK搜索主要通过初始化MKSearch类,同时监听对象MKSearchListener类来实现搜索服务.在该类中有很多方法实现不同功能,其中onGetAddrResult()方法可以根据经纬度搜索地址信息,而需要实现的POI兴趣点搜索是通过onGetPoiResult()实现的。
创建POI检索实例
private PoiSearch mPoiSearch;//创建POI模块
mPoiSearch = PoiSearch.newInstance();//实例化
创建POI检索监听者
OnGetPoiSearchResultListener poilistener=new OnGetPoiSearchResultListener() {
@Override
public void onGetPoiResult(PoiResult poiResult) {
if (poiResult == null
|| poiResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {// 没有找到检索结果
Toast.makeText(SearchStartActivity.this, "未找到结果",
Toast.LENGTH_LONG).show();
return;
}
if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) {// 检索结果正常返回
placeList.clear();
totalPage = poiResult.getTotalPageNum();// 获取总分页数
List<PoiInfo> allPoi = poiResult.getAllPoi();
for (int i = 0; i < 10; i++) {
Place place = null;
if(allPoi.get(i).type==PoiInfo.POITYPE.BUS_STATION){
place=new Place(allPoi.get(i).address,R.drawable.ic_directions_bus_grey_500_24dp,allPoi.get(i).name);
}else{
if(allPoi.get(i).type==PoiInfo.POITYPE.SUBWAY_STATION){
place=new Place(allPoi.get(i).address,R.drawable.ic_directions_subway_grey_500_24dp,allPoi.get(i).name);
}else{
place=new Place(allPoi.get(i).address,R.drawable.ic_place_grey_500_24dp,allPoi.get(i).name);
}
}
placeList.add(place);
}
placeAdapter=new PlaceAdapter(SearchStartActivity.this,R.layout.place_item,placeList);
list_start.setAdapter(placeAdapter);
}
}
@Override
public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
}
@Override
public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {
}
};
onGetPoiResult()获取POI检索结果,onGetPoiDetailResult()获取POI检索详细结果,这里用到的是onGetPoiResult()方法,并对获取到的PoiResult进行判断,如果为null,返回"未找到结果",若PoiResult即检索结果正常返回的话,一次搜索所得到的POI数据有时候可能有成千上万个,百度地图SDK对一次性返回的搜索结果进行了限制即一次性最多只能返回50条搜索结果,默认情况下一次性返回10条搜索结果。
选取10个,分别获取名字allPoi.get(i).name
,地址allPoi.get(i).address
,同时根据获取的POI类型(0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路)判断是否为公交站或地铁站或普通点,显示不同的图标。
将每一条POI搜索结果的这些信息赋值为place
变量,同时存储在placeList
中。place
是之前自定义的变量(包括name
,address
,图标
属性),placeList
是自定义的place
类型的链表,用于储存place
变量。这是获取用于展示listview的数据。
设置POI检索监听者
mPoiSearch.setOnGetPoiSearchResultListener(poilistener);
将上一步创建好的POI检索监听者配置到POI检索实例中。
发起检索请求
mPoiSearch.searchInCity((new PoiCitySearchOption())
.city("北京")//定位的城市为搜索city
.keyword(start.getText().toString())//关键词
.pageNum(0));
主要用是searchInCity()方法,参数为搜索策略即PoiCitySearchOption,即根据策略在城市中搜索。PoiCitySearchOption中主要设置了搜索城市,关键词,以及默认返回的页码。
释放POI检索实例
mPoiSearch.destroy();
在活动的onDestroy()
销毁mPoiSearch
实例。