1搜索服务

百度地图SDK集成搜索服务包括:位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索,通过初始化MKSearch类,注册搜索结果的监听对象MKSearchListener,实现异步搜索服务。首先自定义MySearchListener实现MKSearchListener接口,通过不同的回调方法,获得搜索结果:

public class MySearchListener implements MKSearchListener {@Overridepublic void onGetAddrResult(MKAddrInfo result, int iError) {//返回地址信息搜索结果}@Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {//返回驾乘路线搜索结果}@Overridepublic void onGetPoiResult(MKPoiResult result, int type, int iError) {//返回poi搜索结果}@Overridepublic void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {//返回公交搜索结果}@Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {//返回步行路线搜索结果}@Override    public void onGetBusDetailResult(MKBusLineResult result, int iError) {//返回公交车详情信息搜索结果}@Overridepublic void onGetSuggestionResult(MKSuggestionResult result, intiError) {//返回联想词信息搜索结果}}

MyMapActivity中添加成员变量:

MKSearch mMKSearch = null;

然后在onCreate()中初始化:

mMKSearch = new MKSearch();mMKSearch.init(mBMapMan, new MySearchListener());//注意,MKSearchListener只支持一个,以最后一次设置为准

2兴趣点(poi)搜索

2.1 范围检索

指在给定的一个矩形区域内,根据开发者设定的指定关键字,搜索兴趣点信息,所使用的方法为:poiSearchInbounds(String key, GeoPoint ptLB, GeoPoint ptRT);核心代码如下:

如要检索北京西站与北京北站为顶点所确定的距形区域内的KFC餐厅,使用以下代码发起检索:

// 北京西站GeoPoint ptLB = new GeoPoint( (int)(39.901375 * 1E6),(int)(116.329099 * 1E6)); // 北京北站GeoPoint ptRT = new GeoPoint( (int)(39.949404 * 1E6),(int)(116.360719 * 1E6));mMKSearch.poiSearchInbounds("KFC", ptLB, ptRT);

Tips:想知道某个兴趣点的百度地图坐标吗?

请移步百度地图坐标拾取系统http://api.map.baidu.com/lbsapi/getpoint/index.html

2.2 城市检索

城市检索,即在某一城市内搜索兴趣点信息。所使用的方法是:poiSearchInCity(String city, String key);核心代码如下:

如要检索北京的KFC餐厅,使用以下代码发起检索:

mMKSearch.poiSearchInCity("北京", "KFC");

2.3 周边检索

周边检索指的是以指定坐标点为圆心,根据给定关键字查询一定半径范围内的全部兴趣点。使用方法:poiSearchNearBy(String key, GeoPoint pt, int radius);核心代码如下:

检索周边5000米之内的KFC餐厅:

mMKSearch.poiSearchNearBy("KFC", new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)), 5000);

2.4 展示搜索结果

实现MySearchListeneronGetPoiResult,并展示检索结果:

@Overridepublic void onGetPoiResult(MKPoiResult res, int type, int error) {// 错误号可参考MKEvent中的定义if ( error == MKEvent.ERROR_RESULT_NOT_FOUND){Toast.makeText(MyMapActivity.this, "抱歉,未找到结果",Toast.LENGTH_LONG).show();return ;}else if (error != 0 || res == null) {Toast.makeText(MyMapActivity.this, "搜索出错啦..", Toast.LENGTH_LONG).show();return;}// 将poi结果显示到地图上PoiOverlay poiOverlay = new PoiOverlay(MyMapActivity.this, mMapView);poiOverlay.setData(res.getAllPoi());mMapView.getOverlays().clear();mMapView.getOverlays().add(poiOverlay);mMapView.refresh();//当ePoiType为2(公交线路)或4(地铁线路)时, poi坐标为空for(MKPoiInfo info : res.getAllPoi() ){if ( info.pt != null ){mMapView.getController().animateTo(info.pt);break;}    }}

运行结果如下图所示:

3 地址信息查询

根据地理坐标查询地址信息:

mMKSearch.reverseGeocode(new GeoPoint(40057031, 116307852)); //逆地址解析mMKSearch.geocode(key, city);//地址解析

reverseGeocode返回结果在MKSearchListener里的onGetAddrResult方法,核心代码如下所示:

public void onGetAddrResult(MKAddrInfo res, int error) { if (error != 0) {  String str = String.format("错误号:%d", error);  Toast.makeText(MyMapActivity.this, str, Toast.LENGTH_LONG).show();  return; } mMapView.getController().animateTo(res.geoPt);String strInfo = String.format("纬度:%f 经度:%f\r\n", res.geoPt.getLatitudeE6()/1e6,res.geoPt.getLongitudeE6()/1e6); Toast.makeText(MyMapActivity.this, strInfo, Toast.LENGTH_LONG).show(); }

geocode返回结果在MKSearchListener里的onGetPoiResult方法,核心代码如下:

public void onGetPoiResult(MKPoiResult res, int type, int error) { if (error != 0 || res == null) {  Toast.makeText(MyMapActivity.this, "解析失败", Toast.LENGTH_LONG).show();  return; } if (res != null&&res.getCurrentNumPois() > 0) {  GeoPointptGeo = res.getAllPoi().get(0).pt;  // 移动地图到该点:mMapView.getController().animateTo(ptGeo);  String strInfo = String.format("纬度:%f 经度:%f\r\n", ptGeo.getLatitudeE6()/1e6,ptGeo.getLongitudeE6()/1e6);  strInfo += "\r\n附近有:";  for (int i = 0; i <res.getAllPoi().size(); i++) {   strInfo += (res.getAllPoi().get(i).name + ";");  } Toast.makeText(MyMapActivity.this, strInfo, Toast.LENGTH_LONG).show(); }}

4 在线建议查询

根据关键词查询在线建议词,具体使用的方法为:suggestionSearch(String key),参数key为关键字;获取查询结果的方法需要实现MKSearchListener接口中的onGetSuggestionResult方法,核心代码如下所示:

ListView mSuggestionList = (ListView) findViewById(R.id.listView1);@Overridepublic void onGetSuggestionResult(MKSuggestionResult res, int iError){if (iError!= 0 || res == null) {Toast.makeText(MyMapActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show(); return;}int nSize = res.getSuggestionNum();String[] mStrSuggestions = new String[nSize];for (int i = 0; i <nSize; i++){mStrSuggestions[i] = res.getSuggestion(i).city + res.getSuggestion(i).key;}ArrayAdapter<String> suggestionString = new ArrayAdapter<String>(MyMapActivity.this, android.R.layout.simple_list_item_1,mStrSuggestions);mSuggestionList.setAdapter(suggestionString);}



更多详细信息请登录百度地图API官方网站:http://developer.baidu.com/map/
百度地图API论坛:http://bbs.lbsyun.baidu.com/

更多相关文章

  1. Android(安卓)Fragment实践(一)
  2. Android(安卓)点击两次退后按钮程序退出
  3. AndroidStudio 升级后遇到的问题
  4. 菜单项选项
  5. Android(安卓)双击返回键退出应用
  6. Android(安卓)Web App官方文档翻译第三章:WebView构建应用
  7. Android使用transaction.addToBackStack(null)加入返回栈无效
  8. Android(安卓)Activity提供服务(被调用Activity 给调用Activity
  9. Android实现整理PackageManager获取所有安装程序信息

随机推荐

  1. Android(安卓)Hilt的使用以及遇到的问题
  2. 【转载】微信Android(安卓)视频编码爬过
  3. Mac下获取Android(安卓)SHA1·针对才搭建
  4. Android(安卓)TextView属性详解
  5. App测试中ios和Android的区别
  6. SQL SERVER修改函数名容易引发的问题分析
  7. SqlServer Mysql数据库修改自增列的值及
  8. SQL Server中避免触发镜像SUSPEND的N种方
  9. 浅谈SQL Server 2016里TempDb的进步
  10. Sql Server中REPLACE函数的使用