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

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网站的观点或立场
 
 
 
 
    个人资料
上一篇:react 配置开发环境


下一篇:laravel中的validate验证的使用案例: