Android 开发百度地图之四 Poi

来源:互联网 发布:男生双肩背包推荐 知乎 编辑:程序博客网 时间:2024/05/17 04:18

本文主要就百度地图上的POI 功能做个讲解,本次主要是以上海市内搜索相关地区的例子。
首先是在前面百度开发系列的demo 中添加两个搜索框来搜索起始地址。代码如下:

<LinearLayout          android:layout_width="match_parent"          android:layout_height="wrap_content"          android:gravity="center"          android:orientation="horizontal">          <ImageView              android:layout_width="30dp"              android:layout_height="30dp"              android:src="@drawable/ic_baidumap_start"/>          <TextView              android:id="@+id/tv_start_pos"              android:layout_width="match_parent"              android:layout_height="match_parent"              android:gravity="center_vertical"              android:paddingLeft="10dp"              android:text="起点"/>      </LinearLayout>      <LinearLayout          android:layout_width="match_parent"          android:layout_height="wrap_content"          android:gravity="center"          android:orientation="horizontal">          <ImageView              android:layout_width="30dp"              android:layout_height="30dp"              android:src="@drawable/ic_baidumap_destination"/>          <TextView              android:id="@+id/tv_end_pos"              android:layout_width="match_parent"              android:layout_height="match_parent"              android:gravity="center_vertical"              android:paddingLeft="10dp"              android:text="終点"/>      </LinearLayout>
  • 在java主文文件中添加触发监听,当点击搜索框是从下面蹦出一个Dialog 来搜索。
 @Override    public void onClick(View view) {         switch (view.getId()){             case R.id.tv_start_pos: {                 ChoosePosDlg.DlgListener listener = new ChoosePosDlg.DlgListener() {                     @Override                     public void choosePossuccess(MapPosition mapPosition) {                         mStartPosition=mapPosition;                         mTxtStartPos.setText(mapPosition.getName());                     }                 };                 ChoosePosDlg.registerListener(listener);                 new ChoosePosDlg(this, R.style.bottom_animation_dlg,mCity).show();             }             break;             case R.id.tv_end_pos: {                 ChoosePosDlg.DlgListener listener = new ChoosePosDlg.DlgListener() {                     @Override                     public void choosePossuccess(MapPosition mapPosition) {                         mEndPosition=mapPosition;                         mTxtEndPos.setText(mapPosition.getName());                     }                 };                 ChoosePosDlg.registerListener(listener);                 new ChoosePosDlg(this, R.style.bottom_animation_dlg,mCity).show();             }         }    }
  • 最后在编写 Dialog,其中主要的poi 代码块是:
    mPoiSearch.searchInCity((new PoiCitySearchOption())                                    .city(mCity)                                    .keyword(addr.trim())                                    .pageNum(0).pageCapacity(15));   //调用poi查询

监听查询的结果:

 @Override    public void onGetPoiResult(PoiResult poiResult) {        if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) {            if (TextUtils.isEmpty(mAddrEditText.getText().toString().trim())) {                return;            }            mMapPositionList.clear();            for (int i = 0; i < poiResult.getAllPoi().size(); i++) {                try {                    MapPosition mp = new MapPosition();                    if (poiResult.getAllPoi().get(i).type == PoiInfo.POITYPE.BUS_STATION) {                        mp.setAddress(poiResult.getAllPoi().get(i).city + "(" +                                poiResult.getAllPoi().get(i).name + "公交车站)");                    } else {                        mp.setAddress(poiResult.getAllPoi().get(i).address);                    }                    mp.setName(poiResult.getAllPoi().get(i).name);                    mp.setLatitude(poiResult.getAllPoi().get(i).location.latitude + "");                    mp.setLongitude(poiResult.getAllPoi().get(i).location.longitude + "");                    mMapPositionList.add(mp);                } catch (Exception e) {                    e.printStackTrace();                    continue;                }            }            mRootListAdapter.notifyDataSetChanged();        } else {            mMapPosition.clearPos();        }    }

完整的ChoosePosDlg 的代码如下:

public class ChoosePosDlg extends Dialog implements OnGetPoiSearchResultListener {    private final Context mContext;    private PoiSearch mPoiSearch;    private String mCity;    private EditText mAddrEditText;    private ListView mListView;    private MapPosition mMapPosition;    private ArrayList<MapPosition> mMapPositionList;    private ChoosePosAdapter mRootListAdapter;    public ChoosePosDlg(Context context, int themeResId,String city) {        super(context, themeResId);        mContext=context;        mCity = city;    }    private static DlgListener mListener;    public static interface DlgListener {        public void choosePossuccess(MapPosition mapPosition);    }    public static void registerListener(DlgListener listener) {        mListener = listener;    }    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.dialog_choose_pos);        setCancelable(true);        mPoiSearch = PoiSearch.newInstance();        mPoiSearch.setOnGetPoiSearchResultListener(this);        initView();        setViews();        setListeners();        mAddrEditText.requestFocus();    }    @Override    public void setContentView(int layoutResID) {        super.setContentView(layoutResID);        initListener();            DisplayMetrics dm = new DisplayMetrics();            ((Activity) mContext).getWindowManager().getDefaultDisplay().getMetrics(dm);            int screenHeight = dm.heightPixels;            Window window = this.getWindow();            WindowManager.LayoutParams params = window.getAttributes();            params.x = 0;//设置x坐标            params.y = (screenHeight) / 2;//设置y坐标            window.setAttributes(params);    }    private void initListener() {        setOnKeyListener(new DialogInterface.OnKeyListener() {            @Override            public boolean onKey(DialogInterface arg0, int keyCode, KeyEvent arg2) {                // TODO Auto-generated method stub                if (keyCode == KeyEvent.KEYCODE_BACK) {                    dismiss();                    return true;                }                return false;            }        });        setOnDismissListener(new OnDismissListener() {            @Override            public void onDismiss(DialogInterface dialogInterface) {                mPoiSearch.destroy();            }        });    }    protected void initView() {        mAddrEditText = (EditText) findViewById(R.id.et_addr);        mListView = (ListView) findViewById(R.id.lv_result);    }    protected void setViews() {        mAddrEditText.setHint("输入地址");        mMapPosition = new MapPosition();        mMapPositionList = new ArrayList<MapPosition>();       // mMapPositionList.addAll(defaultPositionList);        mRootListAdapter = new ChoosePosAdapter(mContext, mMapPositionList);        mListView.setAdapter(mRootListAdapter);    }    /////////////////////////////////////setListeners////////////////////////////////////////    private void setListeners() {        mAddrEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {            @Override            public void onFocusChange(View view, boolean b) {                if (b) {                    String addr = mAddrEditText.getText().toString().trim();                    if (!TextUtils.isEmpty(addr)) {                        if (!TextUtils.isEmpty(mCity)) {                            mPoiSearch.searchInCity((new PoiCitySearchOption())                                    .city(mCity)                                    .keyword(addr.trim())                                    .pageNum(0).pageCapacity(15));                        }                    }                }            }        });        //////////////////////////////////////////////////////////////////////////////////        mAddrEditText.addTextChangedListener(new TextWatcher() {            @Override            public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {            }            @Override            public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {            }            @Override            public void afterTextChanged(Editable editable) {                String addr = mAddrEditText.getText().toString().trim();                if (!TextUtils.isEmpty(addr)) {                    if (!TextUtils.isEmpty(mCity)) {                        mPoiSearch.searchInCity((new PoiCitySearchOption())                                .city(mCity)                                .keyword(addr.trim())                                .pageNum(0).pageCapacity(15));                    }                }                ////            }        });        //////////////////////////////////////////////////////////////////////////////////        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                if (null == mListener) {                    dismiss();                    return;                }                    mMapPosition = mMapPositionList.get(i);                    if (TextUtils.isEmpty(mMapPosition.getName())) {                        Toast.makeText(mContext, "请输入正确的位置", Toast.LENGTH_SHORT).show();                    } else {                        if (null != mListener)                            mListener.choosePossuccess(mMapPosition);                        dismiss();                    }            }        });    }   //////////////////////////poi/////////////////////////////////////////    @Override    public void onGetPoiResult(PoiResult poiResult) {        if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) {            if (TextUtils.isEmpty(mAddrEditText.getText().toString().trim())) {                return;            }            mMapPositionList.clear();            for (int i = 0; i < poiResult.getAllPoi().size(); i++) {                try {                    MapPosition mp = new MapPosition();                    if (poiResult.getAllPoi().get(i).type == PoiInfo.POITYPE.BUS_STATION) {                        mp.setAddress(poiResult.getAllPoi().get(i).city + "(" +                                poiResult.getAllPoi().get(i).name + "公交车站)");                    } else {                        mp.setAddress(poiResult.getAllPoi().get(i).address);                    }                    mp.setName(poiResult.getAllPoi().get(i).name);                    mp.setLatitude(poiResult.getAllPoi().get(i).location.latitude + "");                    mp.setLongitude(poiResult.getAllPoi().get(i).location.longitude + "");                    mMapPositionList.add(mp);                } catch (Exception e) {                    e.printStackTrace();                    continue;                }            }            mRootListAdapter.notifyDataSetChanged();        } else {            mMapPosition.clearPos();        }    }    @Override    public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {    }    //////////////////////////poi/////////////////////////////////////////}

效果如下:
这里写图片描述

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 开始长妊娠纹了怎么办 已经长了妊娠纹怎么办 孕晚期长妊娠纹怎么办 妊娠纹长出来了怎么办 没提前预约四维怎么办 ct检查冠脉钙化怎么办 残角子宫有内膜怎么办 怀孕了长痔疮了怎么办 人流后子宫内膜薄怎么办 多囊子宫内膜薄怎么办 6岁儿童不爱睡觉怎么办 初生儿嗓子哑了怎么办 6岁儿童睡眠不好怎么办 8岁儿童睡眠不好怎么办 1个月婴儿睡眠少怎么办 三岁宝宝心跳快怎么办 宝宝右心房稍大怎么办 胎儿右心房偏大怎么办 胎心监测波动小怎么办 怀孕6个月不想要了怎么办 高敏肌钙蛋白t高怎么办 龟头沟槽里长疙瘩怎么办 肝郁气滞的体质怎么办 手指甲长在肉里怎么办 甲床与指甲脱离怎么办 指甲往肉里面长怎么办 指甲和肉分离是怎么办 大脚趾指甲空了怎么办 脚趾甲长在肉里怎么办 脚趾甲又厚又硬怎么办 小孩子咳嗽有痰怎么办%3f 支气扩张咳血怎么办小 背部第8块脊椎疼怎么办 坐时间长了背疼怎么办 新生儿总哭怎么办吐奶 婴儿吃饱了还哭怎么办 宝宝喉咙哭哑了怎么办 婴儿哭哑了嗓子怎么办 婴儿胖子哭哑了怎么办 孩子声音哭哑了怎么办 喝咖啡手抖心慌怎么办