(转载) 百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)
版权声明:本文为博主原创文章,未经博主允许不得转载。
百度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底部滑出并横向占满屏幕
- 下一篇自动弹出键盘
- 个人资料
(转载) 百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)的更多相关文章
- 百度地图api的简单应用(一):POI检索
使用之前,需要注册一个百度地图开发者账号,最好申请一个认证以获取更高的使用配额和并发上限. 注册之后,申请一个应用,获得一个ak(密钥),并填写ip地址白名单.(这里我使用0.0.0.0/0,查了自己 ...
- 【转载】C#工具类:FTP操作辅助类FTPHelper
FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样.可以通过C#中的FtpWebRequest类.NetworkCredential类.We ...
- Redis操作Set工具类封装,Java Redis Set命令封装
Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...
- 【转载】C#工具类:Json操作帮助类
Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来简化相应的操作,该工具类中包含以下功能:对象转JSON.数据 ...
- 【转载】 C#工具类:Csv文件转换类
CSV是逗号分隔值格式的文件,其文件以纯文本形式存储表格数据(数字和文本).CSV文件由任意数目的记录组成,记录间以某种换行符分隔:每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号 ...
- 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 ...
- Redis操作List工具类封装,Java Redis List命令封装
Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...
- Redis操作Hash工具类封装,Redis工具类封装
Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...
- Redis操作字符串工具类封装,Redis工具类封装
Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...
随机推荐
- iris中间件
最近使用golang写的时候涉及到权限校验,用中间件(使用iris框架内的东西) 自己摸索出一种自己的方式 iris.UseFunc(MiddlewareFunc)使用这个方法,会在所有的请求之前执行 ...
- 洛谷P4012 深海机器人问题(费用流)
题目描述 深海资源考察探险队的潜艇将到达深海的海底进行科学考察. 潜艇内有多个深海机器人.潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动. 深海机器人在移动中还必须沿途采集海底生物标本.沿途生 ...
- Hibernate框架学习(六)——一对多&多对一关系
一.关系表达 1.表中的表达 2.实体中的表达 3.orm元数据中的表达 一对多:(在Customer.hbm.xml中添加) 多对一:(在LinkMan.hbm.xml中添加) 最后别忘了在hibe ...
- Custom Hosting in IIS/WAS
常常需要与宿主实例进行交互.这对于使用自托管的方式是不可或缺的.当使用IIS或WAS时,不能直接访问宿主.为了克服这个障碍,WCF提供了一个宿主工厂.在.svc文件中使用Factory标签,使用此工厂 ...
- Lucene倒排索引结构及关系
- Paper-[acmi 2015]Image based Static Facial Expression Recognition with Multiple Deep Network Learning
[acmi 2015]Image based Static Facial Expression Recognition with Multiple Deep Network Learning ABST ...
- https://blog.csdn.net/sxf359/article/details/71082404
https://blog.csdn.net/sxf359/article/details/71082404
- 11 个使用 GNOME 3 桌面环境的理由
11 个使用 GNOME 3 桌面环境的理由 作者: David Both 译者: LCTT geekpi | 2017-08-22 11:43 评论: 27 GNOME 3 桌面的设计目的是简单 ...
- 在ros中集成Fast-rtps库并运行hello world 程序
1.介绍 ROS:自行百度 Fast-RTPS:是eProsima公司对RTPS标准的一个实现,也就是函数库.RTPS是DDS标准中的一个子集.RTPS:Real Time Publish Subsc ...
- Pyhton学习——Day48
# 转载:http://www.cnblogs.com/yuanchenqi/articles/6437362.html#python关于mysql的API--pymysql模块# 执行sql语句# ...