版权声明:本文为博主原创文章,未经博主允许不得转载。
百度key的申请在此就不多说了.
在应用Application中的onCreate()方法中初始化百度地图sdk各组件
- //在使用SDK各组件之前初始化context信息,传入ApplicationContext
- //注意该方法要再setContentView方法之前实现
- SDKInitializer.initialize(getApplicationContext());
核心代码(主要包含各个功能初始化及初始化后功能调用方法)
- public class BDMapManager implements OnMapClickListener, BDLocationListener,
- OnGetGeoCoderResultListener, OnGetPoiSearchResultListener {
- private BaiduMap mBaiduMap;
- private MapView mapView;
- private Context context;
- public LocationClient mLocationClient;
- private Vibrator mVibrator;
- private LocationClientOption clientOption;
- private BDMapResultInternet bdMapResult;
- // 定位参数
- private LocationMode tempMode = LocationMode.Hight_Accuracy;
- private String tempcoor = "bd09ll";
- private GeoCoder geoCoder;
- private List<PoiInfo> poilist;
- private LatLng point;
- private ReverseGeoCodeOption codeOption;
- private PoiSearch mPoiSearch;
- /**
- * 构造函数
- *
- * @param context
- * 上下文对象
- * @param mapView
- * 百度地图显示控件
- */
- public BDMapManager(Context context, MapView mapView,
- BDMapResultInternet bdMapResult) {
- this.mapView = mapView;
- this.mBaiduMap = mapView.getMap();
- this.context = context;
- this.bdMapResult = bdMapResult;
- }
- /**
- * 设置百度地图响应地图上poi点点击
- */
- public void setMapPoiChickListener() {
- mBaiduMap.setOnMapClickListener(this);
- }
- /**
- *
- * @return 返回初始化完成后的BaiduMap
- */
- public BaiduMap getBaiduMap() {
- return mBaiduMap;
- }
- /**
- * 初始化百度定位
- */
- public LocationClient initLocationClient() {
- // TODO Auto-generated method stub
- mLocationClient = new LocationClient(context.getApplicationContext());
- mLocationClient.registerLocationListener(this);
- mVibrator = (Vibrator) context.getApplicationContext()
- .getSystemService(Service.VIBRATOR_SERVICE);
- clientOption = new LocationClientOption();
- clientOption.setLocationMode(tempMode);// 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
- clientOption.setCoorType(tempcoor);// 可选,默认gcj02,设置返回的定位结果坐标系,
- // int span = 100000;
- // clientOption.setScanSpan(span);//
- // 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
- clientOption.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要
- clientOption.setOpenGps(true);// 可选,默认false,设置是否使用gps
- clientOption.setPriority(LocationClientOption.GpsFirst); // 设置GPS优先
- clientOption.setLocationNotify(true);// 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
- clientOption.setIgnoreKillProcess(true);// 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
- mLocationClient.setLocOption(clientOption);
- return mLocationClient;
- }
- /**
- * 初始化百度地图地理编码功能
- */
- public GeoCoder initGeoCoder() {
- geoCoder = GeoCoder.newInstance();
- geoCoder.setOnGetGeoCodeResultListener(this);
- codeOption = new ReverseGeoCodeOption();
- return geoCoder;
- }
- /**
- * 初始化创建PoiSearch实例(poi检索)
- *
- * @return PoiSearch实例
- */
- public PoiSearch initPoiSearch() {
- mPoiSearch = PoiSearch.newInstance();
- mPoiSearch.setOnGetPoiSearchResultListener(this);
- return mPoiSearch;
- }
- /**
- * poi范围内检索
- *
- * @param latLang
- * 地理范围数据结构,由西南以及东北坐标点确认
- * @param keyWord
- * 检索关键字
- * @param pageCapacity
- * 设置每页容量,默认为每页10条
- * @param pageNum
- * 分页编号
- */
- public void poiSearchInBound(LatLngBounds latLang, String keyWord,
- int pageCapacity, int pageNum) {
- PoiBoundSearchOption poiBoundOption = new PoiBoundSearchOption();
- poiBoundOption.bound(latLang);
- poiBoundOption.keyword(keyWord);
- poiBoundOption.pageCapacity(pageCapacity);
- poiBoundOption.pageNum(pageNum);
- mPoiSearch.searchInBound(poiBoundOption);
- }
- /**
- * poi城市内检索
- *
- * @param city
- * 城市名称
- * @param keyWord
- * 检索关键字
- * @param pageCapacity
- * 设置每页容量,默认为每页10条
- * @param pageNum
- * 分页编号
- */
- public void poiSearchInCity(String city, String keyWord, int pageCapacity,
- int pageNum) {
- PoiCitySearchOption poiCityOption = new PoiCitySearchOption();
- poiCityOption.city(city);
- poiCityOption.keyword(keyWord);
- poiCityOption.pageCapacity(pageCapacity);
- poiCityOption.pageNum(pageNum);
- mPoiSearch.searchInCity(poiCityOption);
- }
- /**
- * poi周边检索
- *
- * @param keyWord
- * 检索关键字
- * @param location
- * 检索位置
- * @param pageCapacity
- * 设置每页容量,默认为每页10条
- * @param pageNum
- * 分页编号
- * @param radius
- * 设置检索的半径范围
- * @param sortType
- * 搜索结果排序规则,可选,默认
- */
- public void pioSearchNearby(String keyWord, LatLng location,
- int pageCapacity, int pageNum, int radius, PoiSortType sortType) {
- PoiNearbySearchOption poiNearbyOption = new PoiNearbySearchOption();
- poiNearbyOption.keyword(keyWord);
- poiNearbyOption.location(location);
- poiNearbyOption.pageCapacity(pageCapacity);
- poiNearbyOption.pageNum(pageNum);
- poiNearbyOption.radius(radius);
- poiNearbyOption.sortType(sortType);
- }
- /**
- * 手动定位当前位置
- */
- public void Location() {
- // 开启定位
- mLocationClient.start();
- // start之后会默认发起一次定位请求,开发者无须判断isstart并主动调用request
- mLocationClient.requestLocation();
- }
- /**
- * 手动获取附近poi点
- */
- public void getlocationPlacePoi() {
- codeOption.location(point);
- geoCoder.reverseGeoCode(codeOption);
- }
- /**
- * 释放百度地图(Activity onDestroy调用方法)
- */
- public void onDestroyBDMap() {
- if (mLocationClient != null) {
- mLocationClient.stop();
- }
- if (geoCoder != null) {
- geoCoder.destroy();
- }
- if (mPoiSearch != null) {
- mPoiSearch.destroy();
- }
- mapView.onDestroy();
- }
- /**
- * Activity onResume调用方法
- */
- public void onResumeBDMap() {
- mapView.onResume();
- }
- /**
- * Activity onPause调用方法
- */
- public void onPauseBDMap() {
- mapView.onPause();
- }
- /**
- * 定位完成后结果回调
- */
- @Override
- public void onReceiveLocation(BDLocation location) {
- // TODO Auto-generated method stub
- bdMapResult.getBDLocation(location);
- point = new LatLng(location.getLatitude(), location.getLongitude());
- }
- /**
- * 地理编码查询结果回调函数
- */
- @Override
- public void onGetGeoCodeResult(GeoCodeResult arg0) {
- // TODO Auto-generated method stub
- bdMapResult.getGeoCodeResult(arg0);
- }
- /**
- * 反地理编码查询结果回调函数
- */
- @Override
- public void onGetReverseGeoCodeResult(ReverseGeoCodeResult arg0) {
- bdMapResult.getReverseGeoCodeResult(arg0);
- }
- /**
- * 地图点击响应回调
- */
- @Override
- public void onMapClick(LatLng arg0) {
- // TODO Auto-generated method stub
- bdMapResult.getClickMapMessage(arg0);
- }
- /**
- * 地图poi点点击响应回调
- */
- @Override
- public boolean onMapPoiClick(MapPoi mapPoi) {
- // TODO Auto-generated method stub
- // mapPoi.getName(); // 名称
- // mapPoi.getPosition(); // 坐标
- bdMapResult.getClickMapPoiMessage(mapPoi);
- return false;
- }
- /**
- * poi 详情查询结果回调
- */
- @Override
- public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
- // TODO Auto-generated method stub
- bdMapResult.getPoiDetailResult(poiDetailResult);
- }
- /**
- * poi 查询结果回调
- */
- @Override
- public void onGetPoiResult(PoiResult poiResult) {
- // TODO Auto-generated method stub
- bdMapResult.getPoiResult(poiResult);
- }
回调接口类(返回功能数据,获取数据后操作就由自己去处理了)
- /**
- * 百度地图回调接口类
- * @author user
- *
- */
- public interface BDMapResultInternet {
- /**
- * 地图poi点点击响应回调
- * @param mapPoi poi点对象
- * 名称:mapPoi.getName(); 坐标:mapPoi.getPosition();
- */
- void getClickMapPoiMessage(MapPoi mapPoi);
- /**
- * 地图点击响应回调
- * @param latLng 坐标对象
- */
- void getClickMapMessage(LatLng latLng);
- /**
- * 反地理编码查询结果回调函数
- * @param codeResult 反地理编码查询结果对象
- */
- void getReverseGeoCodeResult(ReverseGeoCodeResult codeResult);
- /**
- * 地理编码查询结果回调函数
- * @param geoCodeResult
- */
- void getGeoCodeResult(GeoCodeResult geoCodeResult);
- /**
- * 定位完成后结果回调
- * @param location
- */
- void getBDLocation(BDLocation location);
- /**
- * poi 详情查询结果回调
- * @param poiDetailResult
- */
- void getPoiDetailResult(PoiDetailResult poiDetailResult);
- /**
- * poi 查询结果回调
- * @param poiResult
- */
- void getPoiResult(PoiResult poiResult);
- }
附加方法
- bmapView.removeViewAt(1);
- bmapView.removeViewAt(2);View child = bmapView.getChildAt(1);// 隐藏百度logo和缩放控件ZoomControlif (child instanceof ImageView || child instanceof ZoomControls) {child.setVisibility(View.INVISIBLE);}
监听自定义缩放控件
- zoomInBtn = (Button) v.findViewById(R.id.zoomin);
- zoomOutBtn = (Button) v.findViewById(R.id.zoomout);
- zoomInBtn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- float zoomLevel = baiduMap.getMapStatus().zoom;
- L.i(Float.toString(zoomLevel));
- if(zoomLevel<=18){
- // MapStatusUpdateFactory.zoomIn();
- baiduMap.setMapStatus(MapStatusUpdateFactory.zoomIn());
- zoomOutBtn.setEnabled(true);
- }else{
- Toast.makeText(getActivity(), "已经放至最大!", Toast.LENGTH_SHORT).show();
- zoomInBtn.setEnabled(false);
- }
- }
- });
- zoomOutBtn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- float zoomLevel = baiduMap.getMapStatus().zoom;
- if(zoomLevel>4){
- baiduMap.setMapStatus(MapStatusUpdateFactory.zoomOut());
- zoomInBtn.setEnabled(true);
- }else{
- zoomOutBtn.setEnabled(false);
- Toast.makeText(getActivity(), "已经缩至最小!", Toast.LENGTH_SHORT).show();
- }
- }
- });
- 顶
- 0
- 踩
- 0
- 上一篇Dialog底部滑出并横向占满屏幕
- 下一篇自动弹出键盘
- 个人资料