POI搜索和在线建议查询功能

转载请标明出处:

目前百度地图SDK所集成的检索服务包括:POI检索、公交信息查询、线路规划、地理编码、在线建议查询、短串分享。

本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴,请参考Android 百度地图 SDK v3.3.0 (二)— 地图定位和图层展示)

百度地图SDK提供三种类型的POI检索:周边检索、区域检索和城市内检索。下面将以城市内检索为例,向大家介绍如何使用检索服务。

在介绍检索服务之前,想上一张要实现的效果图:

好了!现在我们上代码,,来实现上面的功能(代码中都做了相应的注解)

1.创建POI和在线建议查询实例

/** * 初始化搜索模块,注册搜索事件监听 */private void initPOIListener() {//POI检索实例mPoiSearch = PoiSearch.newInstance();//创建POI检索监听者mPoiSearch.setOnGetPoiSearchResultListener(this);//联想词检索实例mSuggestionSearch = SuggestionSearch.newInstance();//联想词检索监听者mSuggestionSearch.setOnGetSuggestionResultListener(this);} 2.创建POI检索监听者,并做相关的事件处理@Overridepublic void onGetSuggestionResult(SuggestionResult res) {if (res == null || res.getAllSuggestions() == null) {return;}sugAdapter.clear();for (SuggestionResult.SuggestionInfo info : res.getAllSuggestions()) {if (info.key != null)sugAdapter.add(info.key);}sugAdapter.notifyDataSetChanged();}@Overridepublic void onGetPoiDetailResult(PoiDetailResult result) {// 未找到了结果if (result.error != SearchResult.ERRORNO.NO_ERROR) {Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();} else {Toast.makeText(MainActivity.this,result.getName() + ": " + result.getAddress(),Toast.LENGTH_SHORT).show();}}@Overridepublic void onGetPoiResult(PoiResult result) {// 未找到结果if (result == null|| result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {Toast.makeText(MainActivity.this, "未找到结果", Toast.LENGTH_LONG).show();return;}// 结果没有异常,找到了结果if (result.error == SearchResult.ERRORNO.NO_ERROR) {mBaiduMap.clear();PoiOverlay overlay = new MyPoiOverlay(mBaiduMap);mBaiduMap.setOnMarkerClickListener(overlay);overlay.setData(result);overlay.addToMap();overlay.zoomToSpan();return;}// 当输入关键字在本市没有找到,但在其他城市找到时,返回包含该关键字信息的城市列表if (result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) {String strInfo = "在";for (CityInfo cityInfo : result.getSuggestCityList()) {strInfo += cityInfo.city;strInfo += ",";}strInfo += "找到结果";Toast.makeText(MainActivity.this, strInfo, Toast.LENGTH_LONG).show();}}/** * 提供了在地图上标识搜索结果的方法 * * @author TanZuAi * */private class MyPoiOverlay extends PoiOverlay {public MyPoiOverlay(BaiduMap baiduMap) {super(baiduMap);}@Overridepublic boolean onPoiClick(int index) {super.onPoiClick(index);// 获取poi覆盖物的详细信息PoiInfo poi = getPoiResult().getAllPoi().get(index);// uid是POI检索中获取的POI ID信息mPoiSearch.searchPoiDetail((new PoiDetailSearchOption()).poiUid(poi.uid));return true;}} 3.设置按钮的相关事件。/** * 影响搜索按钮点击事件 * * @param v */public void searchButtonProcess(View v) {EditText editCity = (EditText) findViewById(R.id.city);// 输入的城市EditText editSearchKey = (EditText) findViewById(R.id.searchkey);// 输入的关键词// 发起检索请求mPoiSearch.searchInCity((new PoiCitySearchOption()).city(editCity.getText().toString())// 根据城市.keyword(editSearchKey.getText().toString())// 根据关键字.pageNum(load_Index));// 查询的页数}/** * 每添加一页进行查询 * * @param v */public void goToNextPage(View v) {load_Index++;searchButtonProcess(null);} 4.为了节省电量和资源,得设置搜索的相关生命周期@Overrideprotected void onDestroy() {mPoiSearch.destroy();mSuggestionSearch.destroy();// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();super.onDestroy();}@Overrideprotected void onResume() {super.onResume();// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理mMapView.onPause();} 好了!代码实现已经介绍完毕!相信大家都看的懂!有什么不懂的或者建议,可以在下面留言!

下面是本篇博客的源码下载地址:

源码下载地址

做对的事情比把事情做对重要。

POI搜索和在线建议查询功能

相关文章:

你感兴趣的文章:

标签云: