百度地图——poi搜索

定义

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是之前自定义的变量(包括nameaddress图标属性),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实例。

猜你喜欢

转载自blog.csdn.net/zhangmin3303/article/details/88531370