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
- Android 开发百度地图之四 Poi
- 百度地图开发(四)之POI检索
- 百度地图开发(四)之POI检索
- 百度地图开发(四)之POI检索
- 百度地图开发(四)之POI检索
- 百度地图开发之POI数据检索
- Android 百度地图开发 POI搜索
- Android百度地图开发POI(三)
- Android百度地图Poi检索开发总结
- [Android]百度地图之POI检索
- Android开发之百度地图
- android百度地图开发V4.5最新版(7)---POI搜索之全城搜索
- android百度地图开发V4.5最新版(8)---POI搜索之周边搜索
- Android 百度地图开发之地图初始化
- Android 百度地图开发之地图定位
- 百度地图之POI搜索
- Android 百度地图API POI
- android 百度地图描绘POI
- 深度学习之google deepmind的alphago AI人工智能算法技术演变历程
- Problem C: 小数计算——结构体
- Bootst 按钮
- Site
- 2016SDAU课程练习一1004 E
- Android 开发百度地图之四 Poi
- POJ 2411 + POJ 2663 + POJ 3420 小方格填充之多米诺骨牌系列(状压DP)
- LTE attach 流程UE-eNodeB
- Problem D: 分数减法——结构体
- C2N4
- (深搜)HDU 1016-Prime Ring Problem
- 对象生命周期与可终结对象
- 用javascript模拟用户发起浏览器请求
- tcp 服务端FIN_WAIT_2 状态下,客户端操作的抛错实验