[baidu] 08_百度地图加强_搜索_poiSearchInCity(城市poi检索)

Android 4.0

百度地图加强_搜索_poiSearchInCity(城市poi检索)

public int poiSearchInCity (java.lang.String city,java.lang.String key)
城市poi检索.

异步函数,返回结果在MKSearchListener里的onGetPoiResult方法通知

参数:
city - 城市名
key - 关键词
返回:
成功返回0,否则返回-1
1、 public class MKPoiInfo   poi信息类①  public java.lang.String uid 唯一的标识一个poi兴趣点(重要的属性)

②其他属性
public java.lang.String name
poi名称
public java.lang.String address
poi地址信息
public java.lang.String city
poi所在城市
public java.lang.String phoneNum
poi电话信息
public java.lang.String postCode
poi邮编
public int ePoiType
poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路,
public GeoPoint pt
poi坐标, 当ePoiType为2或4时,pt 为空
public boolean hasCaterDetails
poi点是否有美食类详情页面
2、public class MKPoiResult     poi搜索结果类。

由MKSearchResultNotifier的onGetPoiResult方法获得

①public java.util.ArrayList<MKPoiInfo> getAllPoi() 获取所有搜索出来的poi点组成的集合

②public MKPoiInfo getPoi(int index)  获取第index个poi信息

参数:
index - poi索引,index从0开始
返回:
poi信息
③public int getNumPois()   获取本次poi搜索的总结果数

返回:
本次poi搜索的总结果数
④public int getCurrentNumPois() 获取当前页的poi结果数(最多10个poi信息点)

返回:
当前页的poi结果数
public int getNumPages() 获取本次poi搜索的总页数

返回:
本次poi搜索的总页数
public int getPageIndex()  返回当前页的索引

返回:
当前页的索引

3、public class MKSearch 搜索服务.

用于位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索

public int goToPoiPage(int num)
获取指定页的的poi结果.

异步函数,搜索成功后会调用注册的事件处理函数

参数:
num - 跳转页数
返回:
成功返回0,否则返回-1

核心代码:

package cn.zengfansheng.mybaidumap.search;
 
import java.util.ArrayList;
 
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
import cn.zengfansheng.mybaidumap.BaseActivity;
import cn.zengfansheng.mybaidumap.BaseMKMapViewListener;
import cn.zengfansheng.mybaidumap.BaseMkSearchListener;
import cn.zengfansheng.mybaidumap.R;
 
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.PoiOverlay;
import com.baidu.mapapi.search.MKPoiInfo;
import com.baidu.mapapi.search.MKPoiResult;
 
/**
* 3、城市poi检索.
*/

public class PoiSearchInCityDemo extends BaseActivity implements
        OnClickListener {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        // 组件初始化
        initComponent();
 
        // 城市poi检索
        poiSearchInCity();
 
        // MapView中poi的点击事件
        mapController.enableClick(true);
        mMapView.regMapViewListener(mBMapMan, new BaseMKMapViewListener() {
 
            @Override
            public void onClickMapPoi(MapPoi mapPoiInfo) {
                super.onClickMapPoi(mapPoiInfo);
                Toast.makeText(getApplicationContext(), mapPoiInfo.strText,
                        Toast.LENGTH_SHORT).show();
            }
        });
    }
 
    // NOTES===========================1、城市poi检索===========================
    /**
     * 1、城市poi检索
     */

    private void poiSearchInCity() {
 
        // 1、初始化init
        mkSearchListener = new MyMkSearchListener();
        mkSearch.init(mBMapMan, mkSearchListener);
 
        // 2、搜索
        //public int poiSearchInCity (java.lang.String city,java.lang.String key)       
        mkSearch.poiSearchInCity("北京", "加油站");
    }
 
    // NOTES====================== 2、MkSearchListener实现类 ===================
    /**
     * 2、MkSearchListener实现类
     */

    private class MyMkSearchListener extends BaseMkSearchListener {
 
        @Override
        public void onGetPoiResult(MKPoiResult result, int type, int iError) {
            super.onGetPoiResult(result, type, iError);
 
            if (iError == 0 && result != null) {
 
                // 每次从服务器拿到数据之前,将之前集合中的数据给清除掉
                mMapView.getOverlays().clear();
 
                PoiOverlay poiOverlay = new PoiOverlay(PoiSearchInCityDemo.this, mMapView);
 
                // TODO 设置数据给PoiOverlay,由于是按照城市来搜索的,数据比较多,所以要进行分页操作
                setPoiOverlayData(result, poiOverlay);
 
                // 1、获取MapView的OverLay集合,并添加OverLay到集合中去
                mMapView.getOverlays().add(poiOverlay);
                // 2、刷新数据
                mMapView.refresh();
 
            } else {
                Toast.makeText(getApplicationContext(), "无结果",
                        Toast.LENGTH_SHORT).show();
            }
        }
    }
 
    // NOTES===========================3、设置数据给PoiOverlay===========================
    private int currentPage;// 当前页码
    private int numPages;// 总页码
    /**
     * 3、设置数据给PoiOverlay,由于是按照城市来搜索的,数据比较多,所以要进行分页操作
     * @param result
     * @param poiOverlay
     */

    private void setPoiOverlayData(MKPoiResult result, PoiOverlay poiOverlay) {
 
        currentPage = result.getPageIndex();// 返回当前页的索引
 
        int numPois = result.getNumPois();// 获取本次poi搜索的总结果数
        numPages = result.getNumPages();
        int currentNumPois = result.getCurrentNumPois();// 获取当前页的poi结果数
 
        System.out.println("当前页的poi结果数:" + currentNumPois);
        Toast.makeText(getApplicationContext(), "页/总页码:"+(currentPage+1)+"/"+numPages+" 总结果数:"+numPois,
                Toast.LENGTH_SHORT).show();
//            ArrayList<MKPoiInfo> data = new ArrayList<MKPoiInfo>();
//            for (int i = 0; i < numPages; i++) {
//                data.add(result.getPoi(i));
//            }
 
        ArrayList<MKPoiInfo> data = result.getAllPoi();
        poiOverlay.setData(data);
    }
 
    // NOTES===========================4、上一页,下一页,随机页===========================
    private LinearLayout llPage;
    private Button btnPrePage;// 上一页
    private Button btnNextPage;// 下一页
    private Button btnRandomPage;// 随机页
 
    /**
     * 初始化组件和设置监听
     */

    private void initComponent() {
        llPage = (LinearLayout) this.findViewById(R.id.ll_page);
        llPage.setVisibility(View.VISIBLE);
 
        btnPrePage = (Button) this.findViewById(R.id.bt_prepage);
        btnNextPage = (Button) this.findViewById(R.id.bt_nextpage);
        btnRandomPage = (Button) this.findViewById(R.id.bt_randompage);
 
        btnPrePage.setOnClickListener(this);
        btnNextPage.setOnClickListener(this);
        btnRandomPage.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
 
        switch (v.getId()) {
        case R.id.bt_prepage:// 上一页
            if (currentPage > 0) {
                currentPage--;
                mkSearch.goToPoiPage(currentPage);
            } else {
                mkSearch.goToPoiPage(numPages - 1);
            }
            break;
        case R.id.bt_nextpage:// 下一页
            if (currentPage < numPages - 1) {
                currentPage++;
                mkSearch.goToPoiPage(currentPage);
            } else {
                mkSearch.goToPoiPage(0);
            }
            break;
        case R.id.bt_randompage:// 随机页,因为获取数据之前,就已经将Overlay集合给清空了
            // Random random = new Random();
            // int randomPage = random.nextInt();
            // int page = Math.abs(randomPage) % numPages;
            // System.out.println("page:" + page);
            // mkSearch.goToPoiPage(page);
            break;
        }
    }
 
}
结果: