Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能

    转载请标明出处:Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能_利用 android sdk 爬取poi-CSDN博客

    目前百度地图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检索监听者,并做相关的事件处理

	@Override
	public 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();

	}

	@Override
	public 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();
		}

	}

	@Override
	public 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);
		}

		@Override
		public 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.为了节省电量和资源,得设置搜索的相关生命周期

	@Override
	protected void onDestroy() {
		mPoiSearch.destroy();
		mSuggestionSearch.destroy();
		// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
		mMapView.onDestroy();
		super.onDestroy();
	}

	@Override
	protected void onResume() {
		super.onResume();
		// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
		mMapView.onResume();
	}

	@Override
	protected void onPause() {
		super.onPause();
		// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
		mMapView.onPause();
	}


         好了!代码实现已经介绍完毕!相信大家都看的懂!有什么不懂的或者建议,可以在下面留言!

         

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

                        源码下载地址
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谭祖爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值