1搜索服务

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

  1. public class MySearchListener implements MKSearchListener {
  2. @Override
  3. public void onGetAddrResult(MKAddrInfo result, int iError) {
  4. //返回地址信息搜索结果
  5. }
  6. @Override
  7. public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {
  8. //返回驾乘路线搜索结果
  9. }
  10. @Override
  11. public void onGetPoiResult(MKPoiResult result, int type, int iError) {
  12. //返回poi搜索结果
  13. }
  14. @Override
  15. public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
  16. //返回公交搜索结果
  17. }
  18. @Override
  19. public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {
  20. //返回步行路线搜索结果
  21. }
  22. @Override
  23. public void onGetBusDetailResult(MKBusLineResult result, int iError) {
  24. //返回公交车详情信息搜索结果
  25. }
  26. @Override
  27. public void onGetSuggestionResult(MKSuggestionResult result, intiError) {
  28. //返回联想词信息搜索结果
  29. }
  30. }

在MyMapActivity中添加成员变量:

  1. MKSearch mMKSearch = null;

然后在onCreate()中初始化:

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

2兴趣点(poi)搜索

2.1 范围检索

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

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

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

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

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

2.2 城市检索

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

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

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

2.3 周边检索

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

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

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

2.4 展示搜索结果

实现MySearchListener的onGetPoiResult,并展示检索结果:

  1. @Override
  2. public void onGetPoiResult(MKPoiResult res, int type, int error) {
  3. // 错误号可参考MKEvent中的定义
  4. if ( error == MKEvent.ERROR_RESULT_NOT_FOUND){
  5. Toast.makeText(MyMapActivity.this, "抱歉,未找到结果",Toast.LENGTH_LONG).show();
  6. return ;
  7. }
  8. else if (error != 0 || res == null) {
  9. Toast.makeText(MyMapActivity.this, "搜索出错啦..", Toast.LENGTH_LONG).show();
  10. return;
  11. }
  12. // 将poi结果显示到地图上
  13. PoiOverlay poiOverlay = new PoiOverlay(MyMapActivity.this, mMapView);
  14. poiOverlay.setData(res.getAllPoi());
  15. mMapView.getOverlays().clear();
  16. mMapView.getOverlays().add(poiOverlay);
  17. mMapView.refresh();
  18. //当ePoiType为2(公交线路)或4(地铁线路)时, poi坐标为空
  19. for(MKPoiInfo info : res.getAllPoi() ){
  20. if ( info.pt != null ){
  21. mMapView.getController().animateTo(info.pt);
  22. break;
  23. }
  24. }
  25. }

运行结果如下图所示:

3 地址信息查询

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

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

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

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

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

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

4 在线建议查询

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

    1. ListView mSuggestionList = (ListView) findViewById(R.id.listView1);
    2. @Override
    3. public void onGetSuggestionResult(MKSuggestionResult res, int iError){
    4. if (iError!= 0 || res == null) {
    5. Toast.makeText(MyMapActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show();
    6. return;
    7. }
    8. int nSize = res.getSuggestionNum();
    9. String[] mStrSuggestions = new String[nSize];
    10. for (int i = 0; i <nSize; i++){
    11. mStrSuggestions[i] = res.getSuggestion(i).city + res.getSuggestion(i).key;
    12. }
    13. ArrayAdapter<String> suggestionString = new ArrayAdapter<String>(MyMapActivity.this, android.R.layout.simple_list_item_1,mStrSuggestions);
    14. mSuggestionList.setAdapter(suggestionString);
    15. }

百度地图SDK for Android【检索服务】的更多相关文章

  1. 百度地图SDK for Android【Demo兴趣点搜索】

            百度地图SDK为开发人员提供了便捷的检索服务. 今天我将为大家介绍Poi检索相关的内容. 首先,我们要构建一个最主要的地图应用.详细介绍请參考:百度地图SDK for Android[ ...

  2. 百度地图SDK for Android v2.1.2全新发布

    2013年6月20日 Android SDK:V2.1.2产品上线 新增: 自定义指南针位置(类:MapController,方法:setCompassMargin) 自定义当前位置图标(类:MyLo ...

  3. 百度地图SDK for Android v2.1.3全新发布

    2013年8月1日 Android SDK:V2.1.3产品上线 新增: 增加短串分享接口(poiDetailShareURLSearch.poiRGCShareURLSearch) 驾车路线检索增加 ...

  4. 使用百度地图API进行Android地图应用开发(Eclipse)

    随着基于位置的服务的兴起,地图类App呈现爆发趋势.随着而来的是地图供应商开放大量的API.供开发人员开发基于PC或者移动端的应用程序. 如今我们研究使用百度地图SDK进行Android项目的开发. ...

  5. Android Studio集成百度地图SDK

    1.建议先阅读百度地图官方的继承指南,针对了Eclipse和Android Studio. 百度官方集成指南 2.下载百度地图SDK Android SDK v4.1.1 下载有两种: 1.一键下载( ...

  6. 【月入41万】Mono For Android中使用百度地图SDK

    借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用.由于Mono For Android把Android SDK中绝大部分类库都 ...

  7. Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...

  8. Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...

  9. Android 百度地图 SDK v3.0.0 (一)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SD ...

随机推荐

  1. FastReport.Net使用:[29]调用存储过程1

    1.创建存储过程sp_querycourse,用于查询学生成绩. 2.在FastReport.Net报表设计器中,通过 数据-->添加数据源 来打开数据向导. 选择数据源,添加数据连接. 3.在 ...

  2. HDU 5952 [DFS]

    题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=5952] 题意:给出一张无向图,然后判断这张图中一共有多少个不同的大小为S的完全图,并且保证每个点的度 ...

  3. POJ 1498[二分匹配——最小顶点覆盖]

    题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=1498] 题意:给出一个大小为n*n(0<n<100)的矩阵,矩阵中放入m种颜色(标号为1 ...

  4. loj2576 「TJOI2018」str

    link 题意: 给一个模板串s和n个模式串,每个模式串有$a_i$种可取的串.现在要将n个模式串每个任取一种它可取的串,连接起来,记为串t,那么这种连接方式对答案的贡献为t在s中出现的次数.问所有连 ...

  5. 我是如何从一个xss到某个浏览器的远程命令执行

    0x01 前言:其实我是个小白平时就喜欢瞎搞,无意间碰到一个浏览器就想一探究竟,好了废话不多说开始!!! 0x02 可以看到我打开的新标签是怎么一个链接页面,既然是页面我是不可以XSS它呢? 于是我就 ...

  6. nginx的重试机制以及nginx常用的超时配置说明

    nginx的重试机制 现在对外服务的网站,很少只使用一个服务节点,而是部署多台服务器,上层通过一定机制保证容错和负载均衡. nginx就是常用的一种HTTP和反向代理服务器,支持容错和负载均衡. ng ...

  7. HDU 5654 xiaoxin and his watermelon candy 离线树状数组 区间不同数的个数

    xiaoxin and his watermelon candy 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5654 Description Du ...

  8. 阻止a标签跳转

       一.在html中 1. <a href="javascript:;"></a> 2. <a href="###">&l ...

  9. Scrapy 轻松定制网络爬虫(转)

    网络爬虫(Web Crawler, Spider)就是一个在网络上乱爬的机器人.当然它通常并不是一个实体的机器人,因为网络本身也是虚拟的东西,所以这个“机器人”其实也就是一段程序,并且它也不是乱爬,而 ...

  10. openCV+ASM+LBP+Gabor实现人脸识别(GT人脸库)

    原理:使用GT人脸库做样本,VS2010下使用openCV2.44自带的Haar算法检測人脸区域,ASM Library特征检測,然后使用YCrCb颜色空间做肤色检測,再用LBP+Gabor小波提取特 ...