(转载) 百度地图工具类封装(包括定位,附近、城市、范围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工具类封装 >>>>>>>>>>>>>>>>>>& ...
随机推荐
- 队列(FIFO)详解
写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera Algorithms Part1&2 本文 ...
- ZYQAssetPickerController的使用,不错的图片选择
import UIKit class ViewController: UIViewController,ZYQAssetPickerControllerDelegate,UIImagePickerCo ...
- struts2学习之基础笔记6
第十一章 Struts 2的国际化 1 国际化简介 http协议,request_locale值 Locale类àà封装类request_locale值 ResourcesBandleàà ...
- Vue.js 2.x Development Build With Hot Reloading For External Server (using Webpack template)
This article assuming you created your project using webpack template. vue init webpack <PROJECT_ ...
- windows 2008 中IIS7.0以上如何设置404错误页面
404错误页面的设置,不仅仅可以提高用户体验度,从SEO方面考虑,也是非常重要的.今天,笔者在这里介绍一下在windows 2008下如何设置404错误页面. 注意:设置404有我这里介绍2种方式,推 ...
- Pyhton学习——Day10
#################################################################################################### ...
- WPF原生环形图表
原文:WPF原生环形图表 版权声明:欢迎转载.转载请注明出处,谢谢 https://blog.csdn.net/wzcool273509239/article/details/56480963 主要利 ...
- Jenkins学习总结(5)——免费DevOps开源工具简介
一:开发工具 1.版本控制系统 Git Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. 2.代码托管平台 GitLab GitLab是一个利用Ruby on ...
- Core abstraction layer for telecommunication network applications
A new sub-system, the core abstraction layer (CAL), is introduced to the middleware layer of the mul ...
- SQL SERVER-主键的建立和删除
PRIMARY KEY 约束唯一标识数据库表中的每条记录.主键必须包含唯一的值.主键列不能包含 NULL 值.每个表都应该有一个主键,并且每个表只能有一个主键.主键约束操作包含了添加约束和删除约束,修 ...
目录视图
摘要视图
订阅