2015-11-19 20:30 1477人阅读 评论(0) 收藏 举报

版权声明:本文为博主原创文章,未经博主允许不得转载。

百度key的申请在此就不多说了.

在应用Application中的onCreate()方法中初始化百度地图sdk各组件

  1. //在使用SDK各组件之前初始化context信息,传入ApplicationContext
  2. //注意该方法要再setContentView方法之前实现
  3. SDKInitializer.initialize(getApplicationContext());

核心代码(主要包含各个功能初始化及初始化后功能调用方法)

  1. public class BDMapManager implements OnMapClickListener, BDLocationListener,
  2. OnGetGeoCoderResultListener, OnGetPoiSearchResultListener {
  3. private BaiduMap mBaiduMap;
  4. private MapView mapView;
  5. private Context context;
  6. public LocationClient mLocationClient;
  7. private Vibrator mVibrator;
  8. private LocationClientOption clientOption;
  9. private BDMapResultInternet bdMapResult;
  10. // 定位参数
  11. private LocationMode tempMode = LocationMode.Hight_Accuracy;
  12. private String tempcoor = "bd09ll";
  13. private GeoCoder geoCoder;
  14. private List<PoiInfo> poilist;
  15. private LatLng point;
  16. private ReverseGeoCodeOption codeOption;
  17. private PoiSearch mPoiSearch;
  18. /**
  19. * 构造函数
  20. *
  21. * @param context
  22. *            上下文对象
  23. * @param mapView
  24. *            百度地图显示控件
  25. */
  26. public BDMapManager(Context context, MapView mapView,
  27. BDMapResultInternet bdMapResult) {
  28. this.mapView = mapView;
  29. this.mBaiduMap = mapView.getMap();
  30. this.context = context;
  31. this.bdMapResult = bdMapResult;
  32. }
  33. /**
  34. * 设置百度地图响应地图上poi点点击
  35. */
  36. public void setMapPoiChickListener() {
  37. mBaiduMap.setOnMapClickListener(this);
  38. }
  39. /**
  40. *
  41. * @return 返回初始化完成后的BaiduMap
  42. */
  43. public BaiduMap getBaiduMap() {
  44. return mBaiduMap;
  45. }
  46. /**
  47. * 初始化百度定位
  48. */
  49. public LocationClient initLocationClient() {
  50. // TODO Auto-generated method stub
  51. mLocationClient = new LocationClient(context.getApplicationContext());
  52. mLocationClient.registerLocationListener(this);
  53. mVibrator = (Vibrator) context.getApplicationContext()
  54. .getSystemService(Service.VIBRATOR_SERVICE);
  55. clientOption = new LocationClientOption();
  56. clientOption.setLocationMode(tempMode);// 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
  57. clientOption.setCoorType(tempcoor);// 可选,默认gcj02,设置返回的定位结果坐标系,
  58. // int span = 100000;
  59. // clientOption.setScanSpan(span);//
  60. // 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
  61. clientOption.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要
  62. clientOption.setOpenGps(true);// 可选,默认false,设置是否使用gps
  63. clientOption.setPriority(LocationClientOption.GpsFirst); // 设置GPS优先
  64. clientOption.setLocationNotify(true);// 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
  65. clientOption.setIgnoreKillProcess(true);// 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
  66. mLocationClient.setLocOption(clientOption);
  67. return mLocationClient;
  68. }
  69. /**
  70. * 初始化百度地图地理编码功能
  71. */
  72. public GeoCoder initGeoCoder() {
  73. geoCoder = GeoCoder.newInstance();
  74. geoCoder.setOnGetGeoCodeResultListener(this);
  75. codeOption = new ReverseGeoCodeOption();
  76. return geoCoder;
  77. }
  78. /**
  79. * 初始化创建PoiSearch实例(poi检索)
  80. *
  81. * @return PoiSearch实例
  82. */
  83. public PoiSearch initPoiSearch() {
  84. mPoiSearch = PoiSearch.newInstance();
  85. mPoiSearch.setOnGetPoiSearchResultListener(this);
  86. return mPoiSearch;
  87. }
  88. /**
  89. * poi范围内检索
  90. *
  91. * @param latLang
  92. *            地理范围数据结构,由西南以及东北坐标点确认
  93. * @param keyWord
  94. *            检索关键字
  95. * @param pageCapacity
  96. *            设置每页容量,默认为每页10条
  97. * @param pageNum
  98. *            分页编号
  99. */
  100. public void poiSearchInBound(LatLngBounds latLang, String keyWord,
  101. int pageCapacity, int pageNum) {
  102. PoiBoundSearchOption poiBoundOption = new PoiBoundSearchOption();
  103. poiBoundOption.bound(latLang);
  104. poiBoundOption.keyword(keyWord);
  105. poiBoundOption.pageCapacity(pageCapacity);
  106. poiBoundOption.pageNum(pageNum);
  107. mPoiSearch.searchInBound(poiBoundOption);
  108. }
  109. /**
  110. * poi城市内检索
  111. *
  112. * @param city
  113. *            城市名称
  114. * @param keyWord
  115. *            检索关键字
  116. * @param pageCapacity
  117. *            设置每页容量,默认为每页10条
  118. * @param pageNum
  119. *            分页编号
  120. */
  121. public void poiSearchInCity(String city, String keyWord, int pageCapacity,
  122. int pageNum) {
  123. PoiCitySearchOption poiCityOption = new PoiCitySearchOption();
  124. poiCityOption.city(city);
  125. poiCityOption.keyword(keyWord);
  126. poiCityOption.pageCapacity(pageCapacity);
  127. poiCityOption.pageNum(pageNum);
  128. mPoiSearch.searchInCity(poiCityOption);
  129. }
  130. /**
  131. * poi周边检索
  132. *
  133. * @param keyWord
  134. *            检索关键字
  135. * @param location
  136. *            检索位置
  137. * @param pageCapacity
  138. *            设置每页容量,默认为每页10条
  139. * @param pageNum
  140. *            分页编号
  141. * @param radius
  142. *            设置检索的半径范围
  143. * @param sortType
  144. *            搜索结果排序规则,可选,默认
  145. */
  146. public void pioSearchNearby(String keyWord, LatLng location,
  147. int pageCapacity, int pageNum, int radius, PoiSortType sortType) {
  148. PoiNearbySearchOption poiNearbyOption = new PoiNearbySearchOption();
  149. poiNearbyOption.keyword(keyWord);
  150. poiNearbyOption.location(location);
  151. poiNearbyOption.pageCapacity(pageCapacity);
  152. poiNearbyOption.pageNum(pageNum);
  153. poiNearbyOption.radius(radius);
  154. poiNearbyOption.sortType(sortType);
  155. }
  156. /**
  157. * 手动定位当前位置
  158. */
  159. public void Location() {
  160. // 开启定位
  161. mLocationClient.start();
  162. // start之后会默认发起一次定位请求,开发者无须判断isstart并主动调用request
  163. mLocationClient.requestLocation();
  164. }
  165. /**
  166. * 手动获取附近poi点
  167. */
  168. public void getlocationPlacePoi() {
  169. codeOption.location(point);
  170. geoCoder.reverseGeoCode(codeOption);
  171. }
  172. /**
  173. * 释放百度地图(Activity onDestroy调用方法)
  174. */
  175. public void onDestroyBDMap() {
  176. if (mLocationClient != null) {
  177. mLocationClient.stop();
  178. }
  179. if (geoCoder != null) {
  180. geoCoder.destroy();
  181. }
  182. if (mPoiSearch != null) {
  183. mPoiSearch.destroy();
  184. }
  185. mapView.onDestroy();
  186. }
  187. /**
  188. * Activity onResume调用方法
  189. */
  190. public void onResumeBDMap() {
  191. mapView.onResume();
  192. }
  193. /**
  194. * Activity onPause调用方法
  195. */
  196. public void onPauseBDMap() {
  197. mapView.onPause();
  198. }
  199. /**
  200. * 定位完成后结果回调
  201. */
  202. @Override
  203. public void onReceiveLocation(BDLocation location) {
  204. // TODO Auto-generated method stub
  205. bdMapResult.getBDLocation(location);
  206. point = new LatLng(location.getLatitude(), location.getLongitude());
  207. }
  208. /**
  209. * 地理编码查询结果回调函数
  210. */
  211. @Override
  212. public void onGetGeoCodeResult(GeoCodeResult arg0) {
  213. // TODO Auto-generated method stub
  214. bdMapResult.getGeoCodeResult(arg0);
  215. }
  216. /**
  217. * 反地理编码查询结果回调函数
  218. */
  219. @Override
  220. public void onGetReverseGeoCodeResult(ReverseGeoCodeResult arg0) {
  221. bdMapResult.getReverseGeoCodeResult(arg0);
  222. }
  223. /**
  224. * 地图点击响应回调
  225. */
  226. @Override
  227. public void onMapClick(LatLng arg0) {
  228. // TODO Auto-generated method stub
  229. bdMapResult.getClickMapMessage(arg0);
  230. }
  231. /**
  232. * 地图poi点点击响应回调
  233. */
  234. @Override
  235. public boolean onMapPoiClick(MapPoi mapPoi) {
  236. // TODO Auto-generated method stub
  237. // mapPoi.getName(); // 名称
  238. // mapPoi.getPosition(); // 坐标
  239. bdMapResult.getClickMapPoiMessage(mapPoi);
  240. return false;
  241. }
  242. /**
  243. * poi 详情查询结果回调
  244. */
  245. @Override
  246. public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
  247. // TODO Auto-generated method stub
  248. bdMapResult.getPoiDetailResult(poiDetailResult);
  249. }
  250. /**
  251. * poi 查询结果回调
  252. */
  253. @Override
  254. public void onGetPoiResult(PoiResult poiResult) {
  255. // TODO Auto-generated method stub
  256. bdMapResult.getPoiResult(poiResult);
  257. }

回调接口类(返回功能数据,获取数据后操作就由自己去处理了)

  1. /**
  2. * 百度地图回调接口类
  3. * @author user
  4. *
  5. */
  6. public interface BDMapResultInternet {
  7. /**
  8. * 地图poi点点击响应回调
  9. * @param mapPoi poi点对象
  10. * 名称:mapPoi.getName(); 坐标:mapPoi.getPosition();
  11. */
  12. void getClickMapPoiMessage(MapPoi mapPoi);
  13. /**
  14. * 地图点击响应回调
  15. * @param latLng 坐标对象
  16. */
  17. void getClickMapMessage(LatLng latLng);
  18. /**
  19. * 反地理编码查询结果回调函数
  20. * @param codeResult 反地理编码查询结果对象
  21. */
  22. void getReverseGeoCodeResult(ReverseGeoCodeResult codeResult);
  23. /**
  24. * 地理编码查询结果回调函数
  25. * @param geoCodeResult
  26. */
  27. void getGeoCodeResult(GeoCodeResult geoCodeResult);
  28. /**
  29. * 定位完成后结果回调
  30. * @param location
  31. */
  32. void getBDLocation(BDLocation location);
  33. /**
  34. * poi 详情查询结果回调
  35. * @param poiDetailResult
  36. */
  37. void getPoiDetailResult(PoiDetailResult poiDetailResult);
  38. /**
  39. * poi 查询结果回调
  40. * @param poiResult
  41. */
  42. void getPoiResult(PoiResult poiResult);
  43. }

附加方法

  1. bmapView.removeViewAt(1);
  2. bmapView.removeViewAt(2);View child = bmapView.getChildAt(1);// 隐藏百度logo和缩放控件ZoomControlif (child instanceof ImageView || child instanceof ZoomControls) {child.setVisibility(View.INVISIBLE);}

监听自定义缩放控件

  1. zoomInBtn = (Button) v.findViewById(R.id.zoomin);
  2. zoomOutBtn = (Button) v.findViewById(R.id.zoomout);
  3. zoomInBtn.setOnClickListener(new OnClickListener() {
  4. @Override
  5. public void onClick(View v) {
  6. float zoomLevel = baiduMap.getMapStatus().zoom;
  7. L.i(Float.toString(zoomLevel));
  8. if(zoomLevel<=18){
  9. //                  MapStatusUpdateFactory.zoomIn();
  10. baiduMap.setMapStatus(MapStatusUpdateFactory.zoomIn());
  11. zoomOutBtn.setEnabled(true);
  12. }else{
  13. Toast.makeText(getActivity(), "已经放至最大!", Toast.LENGTH_SHORT).show();
  14. zoomInBtn.setEnabled(false);
  15. }
  16. }
  17. });
  18. zoomOutBtn.setOnClickListener(new OnClickListener() {
  19. @Override
  20. public void onClick(View v) {
  21. float zoomLevel = baiduMap.getMapStatus().zoom;
  22. if(zoomLevel>4){
  23. baiduMap.setMapStatus(MapStatusUpdateFactory.zoomOut());
  24. zoomInBtn.setEnabled(true);
  25. }else{
  26. zoomOutBtn.setEnabled(false);
  27. Toast.makeText(getActivity(), "已经缩至最小!", Toast.LENGTH_SHORT).show();
  28. }
  29. }
  30. });
 
0
0
 
  相关文章推荐
 
 
查看评论
  暂无评论

 
 
您还没有登录,请[登录][注册]
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
 
 
 
 
    个人资料

(转载) 百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)的更多相关文章

  1. 百度地图api的简单应用(一):POI检索

    使用之前,需要注册一个百度地图开发者账号,最好申请一个认证以获取更高的使用配额和并发上限. 注册之后,申请一个应用,获得一个ak(密钥),并填写ip地址白名单.(这里我使用0.0.0.0/0,查了自己 ...

  2. 【转载】C#工具类:FTP操作辅助类FTPHelper

    FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样.可以通过C#中的FtpWebRequest类.NetworkCredential类.We ...

  3. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  4. 【转载】C#工具类:Json操作帮助类

    Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来简化相应的操作,该工具类中包含以下功能:对象转JSON.数据 ...

  5. 【转载】 C#工具类:Csv文件转换类

    CSV是逗号分隔值格式的文件,其文件以纯文本形式存储表格数据(数字和文本).CSV文件由任意数目的记录组成,记录间以某种换行符分隔:每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号 ...

  6. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  7. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

  8. Redis操作Hash工具类封装,Redis工具类封装

    Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...

  9. Redis操作字符串工具类封装,Redis工具类封装

    Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...

随机推荐

  1. Scrapy Architecture overview--官方文档

    原文地址:https://doc.scrapy.org/en/latest/topics/architecture.html This document describes the architect ...

  2. hadoop配置历史服务器

    此文档不建议当教程,仅供参考 配置历史服务器 我是在hadoop1机器上配置的 配置mapred-site.xml <property> <name>mapreduce.job ...

  3. (转)Django学习之 第三章:动态Web页面基础

    上一章我们解释了怎样开始一个Django项目和运行Django服务器 当然了,这个站点实际上什么也没有做------除了显示了"It worked"这条信息以外. 这一章我们介绍怎 ...

  4. python模拟登陆知乎

    ---恢复内容开始--- 在完成前面的阶段的任务之后,我们现在已经能够尝试着去模拟登录一些网站了.在这里我们模拟登录一下知乎做一下实验.笔者在这里总共用了三天多的时间,下面给大家分享一下笔者是怎么一步 ...

  5. WCF(四)windows服务寄宿

    WCF常用的寄宿方式除了IIS寄宿外,还有一种方式是寄宿到windows服务中,跟随系统启动而启动. 1.在项目中选择“添加”--“新建windows服务” 2.打开系统生成的设计界面的代码,引用“u ...

  6. Mac Dropbox 文件不显示同步图标 解决

    前言 开始时关了这个功能,今天想打开发现怎么也恢复不了. 按照官方教程说的重装也无济于事.最后在官方BBS发现一篇帖子顺利解决了问题 解决方案 这哥们意思是说禁用了一个Finder的插件就好了(有意思 ...

  7. Node_进阶_2

    第二天 一.复习: Node.js开发服务器.数据.路由.本地关心效果,交互. Node.js实际上是极客开发出的一个小玩具,不是银弹.有着别人不具备的怪异特点: 单线程.非阻塞I/O.事件驱动. 实 ...

  8. WordCount合作--自己部分

    前言: (1)合作者:201631062127,201631062625 (2)合作代码地址:WordCount 一.结对的PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟 ...

  9. php读写excel —— PhpSpreadsheet组件

    前言 PhpSpreadsheet是一个纯PHP类库,它提供了一组类,允许您从不同的电子表格文件格式(如Excel和LibreOffice Calc)读取和写入.用PHP读取Excel.CSV文件 还 ...

  10. AJAX 创建对象 请求 响应 readyState

    AJAX 创建对象 请求 响应 readyState AjAX = Asynchronous JavaScript and XML (异步的JavaScrip和 XML). 不是新的编程语言, 而是一 ...