Android版本百度地图开发(二)——图层和检索
来源:互联网 发布:网络诈骗案立案标准 编辑:程序博客网 时间:2024/06/08 11:22
通过上面一章我们已经了解到如何进行基本的地图应用开发,接下来的都是属于应用方面的技巧。本章主要讲解图层和检索服务。
2 地图图层
图层包括底图、交通图和卫星图。我们正常情况下看到的就是底图,可以通过mapView控制显示交通图和卫星图。
// 显示交通图mMapView.setTraffic(true);// 显示卫星图//mMapView.setSatellite(true);
3 检索服务
3.1 搜索框架
搜索包括位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索、短串分享,需要创建一个MKSearch对象进行搜索。
我们首先创建一个搜索类:
package com.demo.baidumap;import com.baidu.mapapi.search.MKAddrInfo;import com.baidu.mapapi.search.MKBusLineResult;import com.baidu.mapapi.search.MKDrivingRouteResult;import com.baidu.mapapi.search.MKPoiResult;import com.baidu.mapapi.search.MKSearchListener;import com.baidu.mapapi.search.MKShareUrlResult;import com.baidu.mapapi.search.MKSuggestionResult;import com.baidu.mapapi.search.MKTransitRouteResult;import com.baidu.mapapi.search.MKWalkingRouteResult;public class MySearchListener implements MKSearchListener {@Overridepublic void onGetAddrResult(MKAddrInfo arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetPoiDetailSearchResult(int arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {// TODO Auto-generated method stub}@Overridepublic void onGetShareUrlResult(MKShareUrlResult arg0, int arg1, int arg2) {// TODO Auto-generated method stub}@Overridepublic void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {// TODO Auto-generated method stub}}
在我们的Activity中定义一个成员变量:
private MKSearch mMKSearch = null;
在Activity的onCreate中初始化MKSearch变量:
// 初始化搜索变量mMKSearch = new MKSearch();mMKSearch.init(mBMapMan, new MySearchListener());
根据文档的说明,还需要在Activity的onDestroy中销毁搜索变量:
mMKSearch.destory();
这样,我们就可以在需要的地方使用搜索了:
3.2 兴趣点搜索
兴趣点的搜索主要还是集中于输入的关键字上:
3.2.1 范围检索
范围检索顾名思义是给定一个范围和关键字的搜索,这里的范围是通过两个点确定的矩形区域。代码是这样的:
// 北京西站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);
3.2.2 城市搜索
城市搜索需要输入城市名和搜索关键字:
mMKSearch.poiSearchInCity("北京", "KFC");
3.2.3 周边搜索
周边搜索需要输入关键字、搜索点和搜索半径:
mMKSearch.poiSearchNearBy("KFC", new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)), 5000);
3.2.4 搜索结果
搜索结果是异步回调,对于兴趣点搜索保存在onGetPoiResult中:
@Overridepublic void onGetPoiResult(MKPoiResult res, int type, int error) {// 错误号可参考MKEvent中的定义if (error == MKEvent.ERROR_RESULT_NOT_FOUND) {System.out.println("抱歉,未找到结果");return;} else if (error != 0 || res == null) {System.out.println("搜索出错啦..");return;}// 将poi结果显示到地图上PoiOverlay poiOverlay = new PoiOverlay(activity, mapView);poiOverlay.setData(res.getAllPoi());mapView.getOverlays().clear();mapView.getOverlays().add(poiOverlay);mapView.refresh();// 当ePoiType为2(公交线路)或4(地铁线路)时, poi坐标为空for (MKPoiInfo info : res.getAllPoi()) {if (info.pt != null) {mapView.getController().animateTo(info.pt);break;}}}
3.3 地址信息查询
3.3.1 根据坐标查询地址
mMKSearch.reverseGeocode(new GeoPoint(31240252, 121496944)); // 通过坐标查询地址
3.3.2 根据地址查询坐标
mMKSearch.geocode("东方明珠", "上海");// 通过地址查询坐标
3.3.3 回调处理
@Overridepublic void onGetAddrResult(MKAddrInfo res, int error) {if (error != 0) {String str = String.format("错误号:%d", error);Toast.makeText(activity, str, Toast.LENGTH_LONG).show();return;}//地图移动到该点mapView.getController().animateTo(res.geoPt);if (res.type == MKAddrInfo.MK_GEOCODE) {//地理编码:通过地址检索坐标点String strInfo = String.format("纬度:%f 经度:%f", res.geoPt.getLatitudeE6()/1e6, res.geoPt.getLongitudeE6()/1e6);Toast.makeText(activity, strInfo, Toast.LENGTH_LONG).show();}if (res.type == MKAddrInfo.MK_REVERSEGEOCODE) {//反地理编码:通过坐标点检索详细地址及周边poiString strInfo = res.strAddr;Toast.makeText(activity, strInfo, Toast.LENGTH_LONG).show();}}
3.4 在线建议查询
在线建议是指用户输入一个关键字,系统自动匹配的搜索结果列表。
3.4.1 搜索
搜索执行代码:
mMKSearch.suggestionSearch("东方明珠", "上海");
3.4.2 搜索结果
搜索结果处理使用:
@Overridepublic void onGetSuggestionResult(MKSuggestionResult res, int err) {if (err!= 0 || res == null) { Toast.makeText(activity, "抱歉,未找到结果", Toast.LENGTH_LONG).show(); return; } int nSize = res.getSuggestionNum(); for (int i = 0; i <nSize; i++){ System.out.println(res.getSuggestion(i).city + res.getSuggestion(i).key); } }
3.5 短串分享
短串是指搜索结果对应一个很短的链接,用户分享这个链接后别人可以打开这个链接访问搜索结果。目前百度地图开放的是“POI点分享”和“反Geo分享”。
3.5.1 POI点分享
根据POI结果的uid,可以生成一个短链接用于分享,由于目前我们尚未讲到POI,所以这里仅给出一个示例,后续讲解如何得到一个POI:
MKPoiInfo poi = new MKPoiInfo();mMKSearch.poiDetailShareURLSearch(poi.uid);
3.5.2 反Geo点分享
/* * 发起地址信息短串请求,一个位置的地理信息一可以通过GeoCode/反GeoCode搜索获得. mSearch 为 * MKSearch象, 参数pt为要分享的位置的经纬度坐标 * ,name和addr为百度地图客户端在展示该位置时显示的名称和地址. */GeoPoint pt = new GeoPoint((int) (31.240252 * 1E6),(int) (121.496944 * 1E6));String name = "东方明珠";String addr = "世纪大道1号";mMKSearch.poiRGCShareURLSearch(pt, name, addr);
3.5.3 搜索结果
@Overridepublic void onGetShareUrlResult(MKShareUrlResult result, int type, int error) {if (error != 0) {// 错误码不为0,表示搜索错误return;}if (type == MKEvent.MKEVENT_POIDETAILSHAREURL) {// 返回poi详情短串Log.d("baidumapsdk", result.url);}if (type == MKEvent.MKEVENT_POIRGCSHAREURL) {// 返回地址信息短串Log.d("baidumapsdk", result.url);}}
- Android版本百度地图开发(二)——图层和检索
- Android版本百度地图开发(二)——图层和检索
- 百度地图开发(二)POI检索
- Android 百度地图 SDK v3.3.0 (二)--- 地图定位和图层展示
- Android版本百度地图开发(四)——定位
- Android版本百度地图开发(四)——定位
- 百度地图SDK开发,版本V3.0.0(二)——申请百度地图开发ak密钥
- Android百度地图开发——学习历程(二)
- Android百度地图Poi检索开发总结
- Android 程序开发——百度地图的使用(二) 基础地图
- Android 百度地图开发(二)
- Android开发--百度地图(二)
- Android--百度地图开发(二)
- Android百度地图开发(二)-定位
- Android百度公交开发(二)———百度地图API之ItemizedOverlay的使用
- (二)Android百度公交开发— 百度地图API之ItemizedOverlay的使用
- Android百度地图——定位SDK(版本v3.1)(二)
- Android 百度地图开发(二)
- Node.j: exports 和 module.exports
- 使用hibernate出现node to traverse cannot be null错误
- 23-取石子(一)《利用博弈论知识》
- apache tomcat 集群配置
- 子窗体上巧用单例模式
- Android版本百度地图开发(二)——图层和检索
- Oracle view 小结片段
- 1784:Digital Roots
- JSTL标签使用说明
- 解决在Kali Linux中官网下载msf不能编译二进制文件的问题
- MFC启动过程(二)
- 面向对象方法学
- SCM中的基线与配置对象
- dos批量处理