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

 

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

标签: 百度地图定位搜索查询关键字

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

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

 

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

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

 

 

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


 

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

 

[java] view plain copy
  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. }  

附加方法

 

[java] view plain copy
  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);}  

 


监听自定义缩放控件

 

[java] view plain copy
  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网站的观点或立场
 
 
 
 
    个人资料
posted @ 2017-08-29 15:30  程序猿-北漂一族  阅读(655)  评论(0编辑  收藏  举报