(转载) 百度地图工具类封装(包括定位,附近、城市、范围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工具类封装 >>>>>>>>>>>>>>>>>>& ...
随机推荐
- Scrapy Architecture overview--官方文档
原文地址:https://doc.scrapy.org/en/latest/topics/architecture.html This document describes the architect ...
- hadoop配置历史服务器
此文档不建议当教程,仅供参考 配置历史服务器 我是在hadoop1机器上配置的 配置mapred-site.xml <property> <name>mapreduce.job ...
- (转)Django学习之 第三章:动态Web页面基础
上一章我们解释了怎样开始一个Django项目和运行Django服务器 当然了,这个站点实际上什么也没有做------除了显示了"It worked"这条信息以外. 这一章我们介绍怎 ...
- python模拟登陆知乎
---恢复内容开始--- 在完成前面的阶段的任务之后,我们现在已经能够尝试着去模拟登录一些网站了.在这里我们模拟登录一下知乎做一下实验.笔者在这里总共用了三天多的时间,下面给大家分享一下笔者是怎么一步 ...
- WCF(四)windows服务寄宿
WCF常用的寄宿方式除了IIS寄宿外,还有一种方式是寄宿到windows服务中,跟随系统启动而启动. 1.在项目中选择“添加”--“新建windows服务” 2.打开系统生成的设计界面的代码,引用“u ...
- Mac Dropbox 文件不显示同步图标 解决
前言 开始时关了这个功能,今天想打开发现怎么也恢复不了. 按照官方教程说的重装也无济于事.最后在官方BBS发现一篇帖子顺利解决了问题 解决方案 这哥们意思是说禁用了一个Finder的插件就好了(有意思 ...
- Node_进阶_2
第二天 一.复习: Node.js开发服务器.数据.路由.本地关心效果,交互. Node.js实际上是极客开发出的一个小玩具,不是银弹.有着别人不具备的怪异特点: 单线程.非阻塞I/O.事件驱动. 实 ...
- WordCount合作--自己部分
前言: (1)合作者:201631062127,201631062625 (2)合作代码地址:WordCount 一.结对的PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟 ...
- php读写excel —— PhpSpreadsheet组件
前言 PhpSpreadsheet是一个纯PHP类库,它提供了一组类,允许您从不同的电子表格文件格式(如Excel和LibreOffice Calc)读取和写入.用PHP读取Excel.CSV文件 还 ...
- AJAX 创建对象 请求 响应 readyState
AJAX 创建对象 请求 响应 readyState AjAX = Asynchronous JavaScript and XML (异步的JavaScrip和 XML). 不是新的编程语言, 而是一 ...