百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)
2015-11-19 20:30
567 查看
百度key的申请在此就不多说了.
在应用Application中的onCreate()方法中初始化百度地图sdk各组件
核心代码(主要包含各个功能初始化及初始化后功能调用方法)
回调接口类(返回功能数据,获取数据后操作就由自己去处理了)
附加方法
监听自定义缩放控件
在应用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(); // 坐标 b 4000 dMapResult.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(); } } });
相关文章推荐
- 搜狗百度360市值齐跌:搜索引擎们陷入集体焦虑?
- CSS浮动和定位学习笔记
- 本人即将筹备败家日志,敬请期待!
- IE:使用搜索助手
- PowerShell实现查询打开某个文件的默认应用程序
- asp下查询xml的实现代码
- SQL语句实现查询SQL Server服务器名称和IP地址
- SQL语句的各个关键字的解析过程详细总结
- SQL多表连接查询实例分析(详细图文)
- 有关数据库SQL递归查询在不同数据库中的实现方法
- 日常收集常用SQL查询语句大全
- C# 的关键字详细介绍
- sql 多表连接查询
- SQL查询出表、存储过程、触发器的创建时间和最后修改时间示例
- C# linq查询之动态OrderBy用法实例
- C#使用linq语句查询数组中以特定字符开头元素的方法
- C# 参考之访问关键字:base、this
- C#实现txt定位指定行完整实例
- .net(c#)中的new关键字详细介绍
- super关键字与单例