百度地图SDK for Android【检索服务】
1搜索服务
百度地图SDK集成搜索服务包括:位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索,通过初始化MKSearch类,注册搜索结果的监听对象MKSearchListener,实现异步搜索服务。首先自定义MySearchListener实现MKSearchListener接口,通过不同的回调方法,获得搜索结果:
- public class MySearchListener implements MKSearchListener {
- @Override
- public void onGetAddrResult(MKAddrInfo result, int iError) {
- //返回地址信息搜索结果
- }
- @Override
- public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {
- //返回驾乘路线搜索结果
- }
- @Override
- public void onGetPoiResult(MKPoiResult result, int type, int iError) {
- //返回poi搜索结果
- }
- @Override
- public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
- //返回公交搜索结果
- }
- @Override
- public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {
- //返回步行路线搜索结果
- }
- @Override
- public void onGetBusDetailResult(MKBusLineResult result, int iError) {
- //返回公交车详情信息搜索结果
- }
- @Override
- public 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 展示搜索结果
实现MySearchListener的onGetPoiResult,并展示检索结果:
- @Override
- public 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);
- @Override
- public 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);
- }
百度地图SDK for Android【检索服务】的更多相关文章
- 百度地图SDK for Android【Demo兴趣点搜索】
百度地图SDK为开发人员提供了便捷的检索服务. 今天我将为大家介绍Poi检索相关的内容. 首先,我们要构建一个最主要的地图应用.详细介绍请參考:百度地图SDK for Android[ ...
- 百度地图SDK for Android v2.1.2全新发布
2013年6月20日 Android SDK:V2.1.2产品上线 新增: 自定义指南针位置(类:MapController,方法:setCompassMargin) 自定义当前位置图标(类:MyLo ...
- 百度地图SDK for Android v2.1.3全新发布
2013年8月1日 Android SDK:V2.1.3产品上线 新增: 增加短串分享接口(poiDetailShareURLSearch.poiRGCShareURLSearch) 驾车路线检索增加 ...
- 使用百度地图API进行Android地图应用开发(Eclipse)
随着基于位置的服务的兴起,地图类App呈现爆发趋势.随着而来的是地图供应商开放大量的API.供开发人员开发基于PC或者移动端的应用程序. 如今我们研究使用百度地图SDK进行Android项目的开发. ...
- Android Studio集成百度地图SDK
1.建议先阅读百度地图官方的继承指南,针对了Eclipse和Android Studio. 百度官方集成指南 2.下载百度地图SDK Android SDK v4.1.1 下载有两种: 1.一键下载( ...
- 【月入41万】Mono For Android中使用百度地图SDK
借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用.由于Mono For Android把Android SDK中绝大部分类库都 ...
- Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- Android 百度地图 SDK v3.0.0 (一)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SD ...
随机推荐
- MongoDB——环境搭建
项目中需要将一些读多改少的数据存入到 MongoDB 数据库中来提高效率,于是简单学习一些MongoDB数据库的知识,来进行应对,也是对自己知识盲区进行补充.本文主要学习介绍MongoDB数据库在Li ...
- bzoj 1086 树分块
将树分成一些块,做法见vfleaking博客. /************************************************************** Problem: 108 ...
- 一次经典的tcp三次握手
TCP报头 在三次握手中使用的字段: 32位序列号 seq:表示的是本次报文发送的数据的第一个字节的序号. 32位确认号:ack 表示期望下一次应该接受到的报文的第一个字节的序号,若ack = N则 ...
- Swift 笔记1
// Playground - noun: a place where people can play import Cocoa var str = "Hello, playground&q ...
- Windows UWP开发系列 – 控件默认样式
今天用一个Pivot控件的时候,想修改一下它的Header样式,却发现用Blend和VS无法导出它的默认样式了,导致无法下手,不知道是不是Blend的bug. 在网上搜了一下,在MSDN上还是找到了它 ...
- HDU 4496 D-City (并查集,水题)
D-City Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Subm ...
- MemoryModule -- load a DLL completely from memory
https://github.com/fancycode/MemoryModule MemoryModule is a library that can be used to load a DLL c ...
- STM32F401
The STM32F401 line is the entry level to the STM32 F4 series. It is designed for medical, industrial ...
- struts2自动接收表单数据
提交页面主要代码: <form method="post" action="messageAction"> <input type=&qu ...
- springboot2.X整合mybatis
github地址:https://github.com/BenchChen/springboot 1) 创建springboot-maven项目,并修改pom文件 <?xml version=& ...