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

本文介绍了如何在Android应用中使用百度地图SDK进行POI检索和在线建议查询。通过创建POI和在线建议查询实例,设置监听器并处理检索结果,实现了在地图上展示搜索结果的功能。同时,提供了代码示例,展示了如何在用户输入关键词后发起城市内检索,以及如何处理检索结果并展示在地图上。
摘要由CSDN通过智能技术生成

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

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

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

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

17f83d75c760f5706cb78d5ce883bec7.gif

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

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();

}

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值