(转载) 百度地图工具类封装(包括定位,附近、城市、范围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工具类封装 >>>>>>>>>>>>>>>>>>& ...
随机推荐
- [转] Java 插入表记录后得到自增的id (附3种方法代码)
转自:https://blog.csdn.net/yaerfeng/article/details/7231093 在MySQL中,使用auto_increment类型的id字段作为表的主键,并用它作 ...
- 洛谷P3327 [SDOI2015]约数个数和(莫比乌斯反演)
题目描述 设d(x)为x的约数个数,给定N.M,求 \sum^N_{i=1}\sum^M_{j=1}d(ij)∑i=1N∑j=1Md(ij) 输入输出格式 输入格式: 输入文件包含多组测试数据.第 ...
- 如何将App从一个账号迁移到另一个账号?
App迁移(App transfer):将App从一个开发者账号迁移至另一个开发者账号.此文演示了整个迁移过程,为了方便解释,在此过程中,将App转出的开发者账号我们下文将会称之为A账号,接收杭州Ap ...
- 理解UIView的绘制-孙亚洲
前言 最近研究OpenGL ES相关和 GPU 相关 发现这篇文章很具有参考的入门价值. 理解 UIView 的绘制, UIView 是如何显示到 Screen 上的? 首先要从Runloop开始说, ...
- 前端框架easyui layout, Tabs,tree
一.三大前端框架的 1.easyui=jquery+html4(用来做后台的管理界面) 不要钱,开发速度快,不好看,不支持响应式 2.bootstrap=jquery+html5 好看,开发速度快,部 ...
- php && 运算符使用说明
“&&” 运算符的用法: ;;echo $test;//输出:000
- js数组的一些骚操作 (用一行代码实现)
1.扁平化n维数组 1.终极篇 [1,[2,3]].flat(2) //[1,2,3] [1,[2,3,[4,5]].flat(3) //[1,2,3,4,5] [1[2,3,[4,5[...]].f ...
- Java web课程学习之JSP
JSP jsp隐式对象:JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对象也被称为预定义变量. jsp脚本片段 l jsp脚本片段是指 ...
- HDU 5918 Sequence I
题目来源:2016 CCPC 长春站 题意:给出两个序列 a[] , b[] ,如果b1,b2....bm能够与aq,aq+p,aq+2p...aq+(m-1)p对应( q+(m-1)p<=n ...
- 【技术翻译】SIFT算子原理及其实现 (一)介绍
介绍 匹配不同图片的特征是计算机视觉常见的问题. 当所有要匹配的图片很相似的时候(大小,方位),简单的角点检测算子就可以匹配,但是,当你的图片大小,方位不同的时候,你就要用到尺度不变特征变换(scal ...
目录视图
摘要视图
订阅