百度地图集成(三):检索功能的实现
来源:互联网 发布:淘宝客 click url 编辑:程序博客网 时间:2024/05/12 06:24
检索功能实现
说到这里小白的我不得不说 百度地图真是个坑货! SDK更新杠杠的,但是API跟没动过一样。各种无奈!
好啦不多说了,小灰灰上图...
首先在 initMap() 方法里创建POI 检索实例
//创建POI检索实例 mPoiSearch = PoiSearch.newInstance();
点击搜索时 进入 getPoiSearch() 方法,开始我们的poi检索之旅
首先检索之前就要关闭我们的软键盘
// 关闭软键盘InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);if (imm != null) { imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);}
之后呢
final OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() { public void onGetPoiResult(PoiResult result) { L.e("poi查询结果回调:" + result.toString()); if (result.error == SearchResult.ERRORNO.NO_ERROR) { if (baiduMap != null) { baiduMap.clear(); } MyOverlayManager myOverlayManager = new MyOverlayManager(baiduMap); myOverlayManager.setData(result, makerIcon); myOverlayManager.addToMap(); myOverlayManager.zoomToSpan(); baiduMap.setOnMarkerClickListener(myOverlayManager); } else { getLatLng(); } } public void onGetPoiDetailResult(PoiDetailResult result) { // poi详情查询结果回调 L.e("poi详情查询结果回调:" + result.toString()); } @Override public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) { // poi室内检索结果回调 L.e("poi室内检索结果回调:" + poiIndoorResult.toString()); } }; mPoiSearch.setOnGetPoiSearchResultListener(poiListener); // 设置检索监听回调 mPoiSearch.searchInCity(new PoiCitySearchOption() .city(mBdLocationListener.sCityStr) // 城市 .keyword(mFindContent.getText().toString()) // 检索的关键字 .pageNum(0) // 分页编号 这里只要第一页前五条 .pageCapacity(5)); // 设置每页几条 默认10条 }
写到这里你会注意到上面有一个自己键的类MyOverlayManager 这个是管理Marker的
主要用途就是让我们的这里查找出来的每页的 Maker 适应到页面上的视野区。
下面就是那个类
// 覆盖物 public class MyOverlayManager extends OverlayManager { private PoiResult mPoiResult; private int[] mImg; public MyOverlayManager(BaiduMap baiduMap) { super(baiduMap); } public void setData(PoiResult poiResult, int[] img) { mPoiResult = poiResult; mImg = img; } @Override public List<OverlayOptions> getOverlayOptions() { ArrayList<OverlayOptions> arrayList = null; if (mPoiResult != null || mPoiResult.getAllPoi() != null) { arrayList = new ArrayList<>(); for (int i = 0; i < mPoiResult.getAllPoi().size(); i++) { if (mPoiResult.getAllPoi().get(i).location == null) continue; // 给marker加上标签 Bundle bundle = new Bundle(); bundle.putInt("index", i); arrayList.add(new MarkerOptions() .icon(BitmapDescriptorFactory.fromResource(mImg[i])) .position(mPoiResult.getAllPoi().get(i).location)); } } return arrayList; } @Override public boolean onMarkerClick(Marker marker) { if (marker.getExtraInfo() != null) { int index = marker.getExtraInfo().getInt("index"); PoiInfo poi = mPoiResult.getAllPoi().get(index); return true; } return false; } @Override public boolean onPolylineClick(Polyline polyline) { return false; } }
如果你是写的 你会发现百度包中根本没有 OverlayManager 啊,
如果你直接复制 你也会发现导包的时候是让你新建有木有......
我也找了半天,终于在我以前的百度代码中找到了这类的代码,不得不鄙视下度娘!
下面是代码的下载地址:算是帮助类吧
http://download.csdn.net/detail/qq_35352552/9800453
下载完成之后解压出来直接复制到 java 包下
然后导包即可;
下面是检索的所有代码
private int makerIcon[] = new int[]{R.drawable.maker_1, R.drawable.maker_2, R.drawable.maker_3, R.drawable.maker_4, R.drawable.maker_5}; // 检索功能 public void getPoiSearch() { // 关闭软键盘 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); } final OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() { public void onGetPoiResult(PoiResult result) { L.e("poi查询结果回调:" + result.toString()); if (result.error == SearchResult.ERRORNO.NO_ERROR) { if (baiduMap != null) { baiduMap.clear(); } MyOverlayManager myOverlayManager = new MyOverlayManager(baiduMap); myOverlayManager.setData(result, makerIcon); // 设置数据 myOverlayManager.addToMap(); // 将所有Overlay 添加到地图上 myOverlayManager.zoomToSpan(); // 所有Overlay都在合适的视野内 baiduMap.setOnMarkerClickListener(myOverlayManager); } else { getLatLng(); } } public void onGetPoiDetailResult(PoiDetailResult result) { // poi详情查询结果回调 L.e("poi详情查询结果回调:" + result.toString()); } @Override public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) { // poi室内检索结果回调 L.e("poi室内检索结果回调:" + poiIndoorResult.toString()); } }; mPoiSearch.setOnGetPoiSearchResultListener(poiListener);// 设置检索监听回调 mPoiSearch.searchInCity(new PoiCitySearchOption() .city(mBdLocationListener.sCityStr) // 城市 .keyword(mFindContent.getText().toString()) // 检索的关键字 .pageNum(0) // 分页编号 这里只要第一页前五条 .pageCapacity(5)); // 设置每页几条 默认10条 } // 覆盖物 public class MyOverlayManager extends OverlayManager { private PoiResult mPoiResult; private int[] mImg; public MyOverlayManager(BaiduMap baiduMap) { super(baiduMap); } public void setData(PoiResult poiResult, int[] img) { mPoiResult = poiResult; mImg = img; } @Override public List<OverlayOptions> getOverlayOptions() { ArrayList<OverlayOptions> arrayList = null; if (mPoiResult != null || mPoiResult.getAllPoi() != null) { arrayList = new ArrayList<>(); for (int i = 0; i < mPoiResult.getAllPoi().size(); i++) { if (mPoiResult.getAllPoi().get(i).location == null) continue; // 给marker加上标签 Bundle bundle = new Bundle(); bundle.putInt("index", i); arrayList.add(new MarkerOptions() .icon(BitmapDescriptorFactory.fromResource(mImg[i])) .position(mPoiResult.getAllPoi().get(i).location)); // 这里可以吧信息放入一个list集合在listView 中显示并操作 } } return arrayList; } @Override public boolean onMarkerClick(Marker marker) { // 点击Marker 的操作 if (marker.getExtraInfo() != null) { int index = marker.getExtraInfo().getInt("index"); PoiInfo poi = mPoiResult.getAllPoi().get(index);// String name = poi.name; // poi名称 *// String city = poi.city; // 城市// String address = poi.address; // 地址信息// LatLng location = poi.location; // 坐标 * return true; } return false; } @Override public boolean onPolylineClick(Polyline polyline) { return false; } }
其他的操作,根据需求而定了...
2 0
- 百度地图集成(三):检索功能的实现
- 百度地图检索的实现
- 百度地图----检索功能的使用
- 百度地图开发-检索功能
- AndroidStudio百度地图定位功能的集成
- 百度地图 Android SDK - 检索功能使用的简单示例
- Android-百度地图的调用(检索功能)
- android集成百度地图定位、poi检索、marker标记功能,以及marker点击事件
- 百度地图的集成
- 百度地图的集成
- 百度地图的集成
- 百度地图之云检索功能
- 百度地图定位功能的实现
- 百度地图路线规划功能的实现
- 百度地图 聚合功能的实现
- 百度地图实现简单的定位功能
- Swift - 集成百度地图的周边雷达功能(附样例)
- 基于百度地图SDK集成的一些功能
- SecureCRT光标不见了的解决办法
- 【PHP7内核剖析】面向对象-类的实现及编译
- oracle学习知识点
- 中国前端开发者大会第二届4月8日上海来袭!
- 机器学习的两次浪潮——浅层学习和深度学习
- 百度地图集成(三):检索功能的实现
- Python入门练习0005:输出最大公约数 & 最小公倍数
- vue语法阻止内部内容滚动
- android 获取第三方应用程序包名并启动
- Spring中Bean及@Bean的理解
- Spring学习-14:Spring整合web开发
- cas与jeesite结合
- 给初学者的RxJava2.0教程(转链接)
- linux安装jdk+maven